[Cppfcplib] r14155 - trunk/apps/CppFCPLib

mkolar at freenetproject.org mkolar at freenetproject.org
Mon Jul 16 10:46:15 UTC 2007


Author: mkolar
Date: 2007-07-16 10:46:15 +0000 (Mon, 16 Jul 2007)
New Revision: 14155

Removed:
   trunk/apps/CppFCPLib/FCPClientHelloResult.h
   trunk/apps/CppFCPLib/FCPErrorResponse.h
   trunk/apps/CppFCPLib/FCPMultiMessageResponse.h
   trunk/apps/CppFCPLib/FCPOneMessageResponse.h
   trunk/apps/CppFCPLib/FCPResult.cpp
   trunk/apps/CppFCPLib/FCPTestDDAReplyResponse.h
   trunk/apps/CppFCPLib/FCPTestDDAResponse.h
Modified:
   trunk/apps/CppFCPLib/FCPResult.h
   trunk/apps/CppFCPLib/JobTicket.h
   trunk/apps/CppFCPLib/Node.cpp
   trunk/apps/CppFCPLib/Node.h
   trunk/apps/CppFCPLib/NodeThread.h
   trunk/apps/CppFCPLib/main.cpp
   trunk/apps/CppFCPLib/todo.txt
Log:
results are rewritten

Deleted: trunk/apps/CppFCPLib/FCPClientHelloResult.h
===================================================================
--- trunk/apps/CppFCPLib/FCPClientHelloResult.h	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/FCPClientHelloResult.h	2007-07-16 10:46:15 UTC (rev 14155)
@@ -1,24 +0,0 @@
-#ifndef FCPCLIENTHELLORESULT_H__
-#define FCPCLIENTHELLORESULT_H__
-
-#include <vector>
-#include <memory>
-#include "Message.h"
-#include "FCPResult.h"
-
-namespace FCPLib {
-
-class FCPClientHelloResult : public FCPResult {
-  Message::MessagePtr message;
-
-  FCPClientHelloResult(Message::MessagePtr message_) : message(message_) {}
-public:
-  typedef boost::shared_ptr<FCPClientHelloResult> FCPClientHelloResultPtr;
-
-  const Message::MessagePtr getMessage() const { return message; }
-
-  friend class FCPResult;
-};
-}
-
-#endif // FCPCLIENTHELLORESULT_H__

Deleted: trunk/apps/CppFCPLib/FCPErrorResponse.h
===================================================================
--- trunk/apps/CppFCPLib/FCPErrorResponse.h	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/FCPErrorResponse.h	2007-07-16 10:46:15 UTC (rev 14155)
@@ -1,32 +0,0 @@
-#ifndef FCPERRORRESPONSE_H_INCLUDED
-#define FCPERRORRESPONSE_H_INCLUDED
-
-#include <vector>
-#include <memory>
-#include "Message.h"
-#include "FCPResult.h"
-
-
-namespace FCPLib {
-
-
-class FCPErrorResponse : public FCPResult {
-
-protected:
-  std::vector<ServerMessage::Ptr> messages;
-
-  FCPErrorResponse( const std::vector<ServerMessage::Ptr>& nodeResponse)
-    : messages(nodeResponse)
-  {
-  }
-public:
-  typedef boost::shared_ptr<FCPErrorResponse> Ptr;
-
-  const std::vector<ServerMessage::Ptr>& getMessages() const {
-    return messages;
-  }
-  friend class FCPResult;
-};
-}
-
-#endif // FCPERRORRESPONSE_H_INCLUDED

Deleted: trunk/apps/CppFCPLib/FCPMultiMessageResponse.h
===================================================================
--- trunk/apps/CppFCPLib/FCPMultiMessageResponse.h	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/FCPMultiMessageResponse.h	2007-07-16 10:46:15 UTC (rev 14155)
@@ -1,34 +0,0 @@
-#ifndef FCPMULTIMESSAGERESPONSE_H__
-#define FCPMULTIMESSAGERESPONSE_H__
-
-
-#include <vector>
-#include <memory>
-#include "Message.h"
-#include "FCPResult.h"
-
-
-namespace FCPLib {
-
-
-class FCPMultiMessageResponse : public FCPResult {
-
-protected:
-  std::vector<ServerMessage::Ptr> messages;
-
-  FCPMultiMessageResponse( const std::vector<ServerMessage::Ptr> &nodeResponse, bool removeLast = true ) {
-    messages = nodeResponse;
-    if (removeLast)
-      messages.pop_back();
-  }
-public:
-  typedef boost::shared_ptr<FCPMultiMessageResponse> Ptr;
-
-  const std::vector<ServerMessage::Ptr>& getMessages() const {
-    return messages;
-  }
-  friend class FCPResult;
-};
-}
-
-#endif // FCPMULTIMESSAGERESPONSE_H__

Deleted: trunk/apps/CppFCPLib/FCPOneMessageResponse.h
===================================================================
--- trunk/apps/CppFCPLib/FCPOneMessageResponse.h	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/FCPOneMessageResponse.h	2007-07-16 10:46:15 UTC (rev 14155)
@@ -1,24 +0,0 @@
-#ifndef FCPONEMESSAGERESPONSE_H__
-#define FCPONEMESSAGERESPONSE_H__
-
-#include <vector>
-#include <memory>
-#include "Message.h"
-#include "FCPResult.h"
-
-namespace FCPLib {
-
-class FCPOneMessageResponse : public FCPResult {
-protected:
-  Message::Ptr message;
-  FCPOneMessageResponse(Message::Ptr message_) : message(message_) {}
-public:
-  typedef boost::shared_ptr<FCPOneMessageResponse> Ptr;
-
-  const Message::Ptr getMessage() const { return message; }
-
-  friend class FCPResult;
-};
-}
-
-#endif // FCPONEMESSAGERESPONSE_H__

Deleted: trunk/apps/CppFCPLib/FCPResult.cpp
===================================================================
--- trunk/apps/CppFCPLib/FCPResult.cpp	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/FCPResult.cpp	2007-07-16 10:46:15 UTC (rev 14155)
@@ -1,62 +0,0 @@
-#include "FCPResult.h"
-#include <stdexcept>
-
-
-#include "FCPMultiMessageResponse.h"
-#include "FCPOneMessageResponse.h"
-#include "FCPTestDDAReplyResponse.h"
-#include "FCPErrorResponse.h"
-
-using namespace FCPLib;
-
-FCPResult::Ptr
-FCPResult::factory(const std::string cmd, Response &nodeResponse)
-{
-  // check for error
-  if (nodeResponse.responses.back()->isError())
-    return FCPErrorResponse::Ptr( new FCPErrorResponse(nodeResponse.responses) );
-
-  if (cmd == "ClientHello") {
-    return FCPOneMessageResponse::Ptr( new FCPOneMessageResponse( (*nodeResponse.responses.begin())->getMessage() ));
-  } else
-  if (cmd == "ListPeers") {
-    return FCPMultiMessageResponse::Ptr( new FCPMultiMessageResponse(nodeResponse.responses) );
-  } else
-  if (cmd == "ListPeerNotes") {
-    return FCPMultiMessageResponse::Ptr( new FCPMultiMessageResponse(nodeResponse.responses) );
-  } else
-  if (cmd == "ModifyPeer") {
-    return FCPOneMessageResponse::Ptr( new FCPOneMessageResponse( (*nodeResponse.responses.begin())->getMessage() ));
-  } else
-  if (cmd == "ModifyPeerNote") {
-    return FCPOneMessageResponse::Ptr( new FCPOneMessageResponse( (*nodeResponse.responses.begin())->getMessage() ));
-  } else
-  if (cmd == "RemovePeer") {
-    return FCPOneMessageResponse::Ptr( new FCPOneMessageResponse( (*nodeResponse.responses.begin())->getMessage() ));
-  } else
-  if (cmd == "GetNode") {
-    return FCPOneMessageResponse::Ptr( new FCPOneMessageResponse( (*nodeResponse.responses.begin())->getMessage() ));
-  } else
-  if (cmd == "GetConfig") {
-    return FCPOneMessageResponse::Ptr( new FCPOneMessageResponse( (*nodeResponse.responses.begin())->getMessage() ));
-  } else
-  if (cmd == "ModifyConfig") {
-    return FCPOneMessageResponse::Ptr( new FCPOneMessageResponse( (*nodeResponse.responses.begin())->getMessage() ));
-  } else
-  if (cmd == "TestDDARequest") {
-    return FCPTestDDAReplyResponse::Ptr( new FCPTestDDAReplyResponse( (*nodeResponse.responses.begin())->getMessage() ));
-  } else
-  if (cmd == "TestDDAResponse") {
-    return FCPOneMessageResponse::Ptr( new FCPTestDDAReplyResponse( (*nodeResponse.responses.begin())->getMessage() ));
-  } else
-  if (cmd == "GenerateSSK") {
-    return FCPOneMessageResponse::Ptr( new FCPOneMessageResponse( (*nodeResponse.responses.begin())->getMessage() ));
-  } else
-  if (cmd == "ClientPut") {
-    return FCPMultiMessageResponse::Ptr( new FCPMultiMessageResponse(nodeResponse.responses, false) );
-  }
-
-  throw std::runtime_error("Not implemented : " + cmd);
-}
-
-FCPResult::~FCPResult() {}

Modified: trunk/apps/CppFCPLib/FCPResult.h
===================================================================
--- trunk/apps/CppFCPLib/FCPResult.h	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/FCPResult.h	2007-07-16 10:46:15 UTC (rev 14155)
@@ -9,43 +9,106 @@
 
 namespace FCPLib {
 
-class FCPResult {
+class TestDDAReplyResponse {
+  Message::Ptr message;
+
+  TestDDAReplyResponse(Message::Ptr message_) : message(message_) {}
+
+  const std::string& getField(std::string field) const {
+    const std::string& ret = message->getField(field);
+    if (ret == "")
+      throw std::logic_error("TestDDAReply does not contain " + field + " field.");
+    return ret;
+  }
 public:
-  typedef boost::shared_ptr<FCPResult> Ptr;
+  typedef boost::shared_ptr<TestDDAReplyResponse> Ptr;
 
-  static Ptr factory(const std::string cmd, Response &nodeResponse);
-  virtual ~FCPResult() = 0;
+  const std::string getDirectory() const throw(std::logic_error){
+    return message->getField("Directory");
+  }
+  const std::string getReadFilename() const throw(std::logic_error){
+    return getField("ReadFilename");
+  }
+  const std::string getWriteFilename() const throw(std::logic_error){
+    return getField("WriteFilename");
+  }
+  const std::string getContent () const throw(std::logic_error){
+    return getField("ContentToWrite");
+  }
+
+  friend struct TestDDAReplyConverter;
 };
 
+class TestDDAResponse {
+public:
+  TestDDAResponse(std::string dir, bool read, bool write)
+    : directory(dir),
+      readDirectory(read),
+      writeDirectory(write)
+  {}
+  std::string directory;
+  bool readDirectory;
+  bool writeDirectory;
+};
 
-//Message::Ptr getMessage(ServerMessage::Ptr sm) {
-//  return Message::Ptr( sm->getMessage() );
-//}
+///////////
 
 Message::Ptr
-MessageConverter( Response &resp )
-{
-  return Message::Ptr( resp.responses.front()->getMessage() );
+getMessage(ServerMessage::Ptr sm) {
+  return Message::Ptr( sm->getMessage() );
 }
 
-ServerMessage::Ptr
-LastMessage( Response &resp )
-{
-  return ServerMessage::Ptr( resp.responses.back() );
-}
+struct MessageConverter {
+  Message::Ptr
+  operator()( Response &resp )
+  {
+    return Message::Ptr( resp.responses.front()->getMessage() );
+  }
+};
 
-//std::vector<Message::Ptr>
-//VectorConverter( Response &resp )
-//{
-//  std::vector<Message::Ptr> ret = std::vector<Message::Ptr>( nodeResponse.size() );
-//  std::transform(nodeResponse.begin(), nodeResponse.end(), ret.begin(), getMessage);
-//  return ret;
-//}
+struct LastMessageConverter {
+  ServerMessage::Ptr
+  operator()( Response &resp )
+  {
+    return ServerMessage::Ptr( resp.responses.back() );
+  }
+};
 
-template<class ReturnT, class ConverterT >
+struct VectorConverter {
+  std::vector<Message::Ptr>
+  operator()( Response &resp )
+  {
+    std::vector<Message::Ptr> ret = std::vector<Message::Ptr>( resp.responses.size() );
+    std::transform(resp.responses.begin(), resp.responses.end(), ret.begin(), getMessage);
+    return ret;
+  }
+};
+
+struct VectorWithoutLastConverter {
+  std::vector<Message::Ptr>
+  operator()( Response &resp )
+  {
+    int numToCopy = resp.responses.size();
+    std::vector<Message::Ptr> ret = std::vector<Message::Ptr>( numToCopy );
+    std::transform(resp.responses.begin(), resp.responses.begin() + numToCopy, ret.begin(), getMessage);
+    return ret;
+  }
+};
+
+struct TestDDAReplyConverter {
+  TestDDAReplyResponse::Ptr
+  operator()( Response &resp )
+  {
+    return TestDDAReplyResponse::Ptr( new TestDDAReplyResponse(resp.responses.front()->getMessage()) );
+  }
+};
+
+//////////
+
+template<typename ReturnT, typename ConverterT>
 ReturnT createResult( Response &resp )
 {
-  return ConverterT( resp );
+  return ConverterT()( resp );
 }
 
 }

Deleted: trunk/apps/CppFCPLib/FCPTestDDAReplyResponse.h
===================================================================
--- trunk/apps/CppFCPLib/FCPTestDDAReplyResponse.h	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/FCPTestDDAReplyResponse.h	2007-07-16 10:46:15 UTC (rev 14155)
@@ -1,39 +0,0 @@
-#ifndef FCPTESTDDAREPLYRESPONSE_H_INCLUDED
-#define FCPTESTDDAREPLYRESPONSE_H_INCLUDED
-
-#include "FCPOneMessageResponse.h"
-#include <exception>
-
-namespace FCPLib {
-
-class FCPTestDDAReplyResponse : public FCPOneMessageResponse {
-  FCPTestDDAReplyResponse(Message::Ptr message_) : FCPOneMessageResponse(message_) {}
-
-  const std::string& getField(std::string field) const {
-    const std::string& ret = message->getField(field);
-    if (ret == "")
-      throw std::logic_error("TestDDAReply does not contain " + field + " field.");
-    return ret;
-  }
-public:
-  typedef boost::shared_ptr<FCPTestDDAReplyResponse> Ptr;
-
-  const std::string getDirectory() const throw(std::logic_error){
-    return message->getField("Directory");
-  }
-  const std::string getReadFilename() const throw(std::logic_error){
-    return getField("ReadFilename");
-  }
-  const std::string getWriteFilename() const throw(std::logic_error){
-    return getField("WriteFilename");
-  }
-  const std::string getContent () const throw(std::logic_error){
-    return getField("ContentToWrite");
-  }
-
-  friend class FCPResult;
-};
-
-}
-
-#endif // FCPTESTDDAREPLYRESPONSE_H_INCLUDED

Deleted: trunk/apps/CppFCPLib/FCPTestDDAResponse.h
===================================================================
--- trunk/apps/CppFCPLib/FCPTestDDAResponse.h	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/FCPTestDDAResponse.h	2007-07-16 10:46:15 UTC (rev 14155)
@@ -1,22 +0,0 @@
-#ifndef FCPTESTDDARESPONSE_H_INCLUDED
-#define FCPTESTDDARESPONSE_H_INCLUDED
-
-#include <string>
-
-namespace FCPLib {
-
-class FCPTestDDAResponse {
-public:
-  FCPTestDDAResponse(std::string dir, bool read, bool write)
-    : directory(dir),
-      readDirectory(read),
-      writeDirectory(write)
-  {}
-  std::string directory;
-  bool readDirectory;
-  bool writeDirectory;
-};
-
-}
-
-#endif // FCPTESTDDARESPONSE_H_INCLUDED

Modified: trunk/apps/CppFCPLib/JobTicket.h
===================================================================
--- trunk/apps/CppFCPLib/JobTicket.h	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/JobTicket.h	2007-07-16 10:46:15 UTC (rev 14155)
@@ -3,7 +3,6 @@
 
 #include "Message.h"
 #include "ServerMessage.h"
-#include "FCPResult.h"
 
 #include <stdexcept>
 #include <vector>

Modified: trunk/apps/CppFCPLib/Node.cpp
===================================================================
--- trunk/apps/CppFCPLib/Node.cpp	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/Node.cpp	2007-07-16 10:46:15 UTC (rev 14155)
@@ -1,13 +1,13 @@
 
-#include "Node.h"
-#include "Log.h"
 #include <boost/lexical_cast.hpp>
 #include <typeinfo>
-#include "Exceptions.h"
-#include "FCPErrorResponse.h"
 #include <fstream>
 #include <sstream>
 
+#include "Node.h"
+#include "Log.h"
+#include "Exceptions.h"
+
 using namespace FCPLib;
 
 std::string
@@ -26,7 +26,7 @@
 void
 Node::checkProtocolError(Response &resp)
 {
-  ServerMessage::Ptr sm = createResult<ServerMessage::Ptr, LastMessage>( resp );
+  ServerMessage::Ptr sm = createResult<ServerMessage::Ptr, LastMessageConverter>( resp );
 
   if ( sm->isError() )
     throw FCPException( sm->getMessage() );
@@ -58,10 +58,7 @@
   // check if CloceConnectionDuplicateName or ProtocolError has arrived
   checkProtocolError(resp); // throws
 
-  nodeHelloMessage = boost::dynamic_pointer_cast<FCPOneMessageResponse,
-                                                 FCPResult>(
-                                                     FCPResult::factory( job->getCommandName(), resp )
-                                                )->getMessage();
+  nodeHelloMessage = createResult<Message::Ptr, MessageConverter>( resp );
 }
 
 Node::~Node()
@@ -69,7 +66,7 @@
   executor.interrupt();
 }
 
-FCPMultiMessageResponse::Ptr
+std::vector<Message::Ptr>
 Node::listPeers(const AdditionalFields& fields)
 {
   Message::Ptr m = Message::factory( std::string("ListPeers") );
@@ -84,13 +81,12 @@
 
   Response resp = job->getResponse();
   // NOTE: error should never happen here...
-  checkProtocolError(resp) // throws
+  checkProtocolError(resp); // throws
 
-  return boost::dynamic_pointer_cast<FCPMultiMessageResponse,
-                                     FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
+  return createResult<std::vector<Message::Ptr>, VectorWithoutLastConverter>( resp );
 }
 
-FCPMultiMessageResponse::Ptr
+std::vector<Message::Ptr>
 Node::listPeerNotes(const std::string& identifier)
 {
   Message::Ptr m = Message::factory( std::string("ListPeerNotes") );
@@ -106,11 +102,10 @@
   // ProtocolError or UnknownNodeIdentifier
   checkProtocolError(resp); // throws
 
-  return boost::dynamic_pointer_cast<FCPMultiMessageResponse,
-                                    FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
+  return createResult<std::vector<Message::Ptr>, VectorWithoutLastConverter>( resp );
 }
 
-FCPOneMessageResponse::Ptr
+Message::Ptr
 Node::addPeer(const std::string &value, bool isURL = false) {
   Message::Ptr m = Message::factory( std::string("AddPeer") );
   if (!isURL)
@@ -128,12 +123,10 @@
   // ProtocolError or UnknownNodeIdentifier
   checkProtocolError(resp); // throws
 
-  return boost::dynamic_pointer_cast<FCPOneMessageResponse,
-                                     FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
+  return createResult<Message::Ptr, MessageConverter>( resp );
 }
 
-
-FCPOneMessageResponse::Ptr
+Message::Ptr
 Node::addPeer(const std::map<std::string, std::string> &message)
 {
   Message::Ptr m = Message::factory( std::string("AddPeer") );
@@ -150,11 +143,10 @@
   // ProtocolError or UnknownNodeIdentifier
   checkProtocolError(resp); // throws
 
-  return boost::dynamic_pointer_cast<FCPOneMessageResponse,
-                                     FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
+  return createResult<Message::Ptr, MessageConverter>( resp );
 }
 
-FCPOneMessageResponse::Ptr
+Message::Ptr
 Node::modifyPeer(const std::string & nodeIdentifier,
                  const AdditionalFields& fields)
 {
@@ -174,11 +166,10 @@
   Response resp = job->getResponse();
   checkProtocolError(resp); // throws
 
-  return boost::dynamic_pointer_cast<FCPOneMessageResponse,
-                                     FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
+  return createResult<Message::Ptr, MessageConverter>( resp );
 }
 
-FCPOneMessageResponse::Ptr
+Message::Ptr
 Node::modifyPeerNote(const std::string & nodeIdentifier,
                      const std::string & noteText,
                      int peerNoteType = 1)
@@ -199,11 +190,10 @@
   // ProtocolError or UnknownNodeIdentifier
   checkProtocolError(resp); // throws
 
-  return boost::dynamic_pointer_cast<FCPOneMessageResponse,
-                                     FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
+  return createResult<Message::Ptr, MessageConverter>( resp );
 }
 
-FCPOneMessageResponse::Ptr
+Message::Ptr
 Node::removePeer(const std::string &identifier)
 {
   Message::Ptr m = Message::factory( std::string("RemovePeer") );
@@ -221,8 +211,7 @@
   checkProtocolError(resp); // throws
 
 
-  return boost::dynamic_pointer_cast<FCPOneMessageResponse,
-                                     FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
+  return createResult<Message::Ptr, MessageConverter>( resp );
 }
 
 Message::Ptr
@@ -243,13 +232,10 @@
   // ProtocolError or UnknownNodeIdentifier
   checkProtocolError(resp); // throws
 
-//  return boost::dynamic_pointer_cast<FCPOneMessageResponse,
-//                                     FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
-
   return createResult<Message::Ptr, MessageConverter>( resp );
 }
 
-FCPOneMessageResponse::Ptr
+Message::Ptr
 Node::getConfig(const AdditionalFields& fields)
 {
   Message::Ptr m = Message::factory( std::string("GetConfig") );
@@ -272,11 +258,10 @@
   // ProtocolError or UnknownNodeIdentifier
   checkProtocolError(resp); // throws
 
-  return boost::dynamic_pointer_cast<FCPOneMessageResponse,
-                                     FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
+  return createResult<Message::Ptr, MessageConverter>( resp );
 }
 
-FCPOneMessageResponse::Ptr
+Message::Ptr
 Node::modifyConfig(Message::Ptr m)
 {
   if (m->getHeader() != "ModifyConfig")
@@ -292,11 +277,10 @@
   // ProtocolError or UnknownNodeIdentifier
   checkProtocolError(resp); // throws
 
-  return boost::dynamic_pointer_cast<FCPOneMessageResponse,
-                                     FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
+  return createResult<Message::Ptr, MessageConverter>( resp );
 }
 
-FCPTestDDAReplyResponse::Ptr
+TestDDAReplyResponse::Ptr
 Node::testDDARequest(std::string dir, bool read, bool write)
 {
   Message::Ptr m = Message::factory( std::string("TestDDARequest") );
@@ -317,12 +301,10 @@
   // check if protocol error has occured
   checkProtocolError(resp); // throws
 
-
-  return boost::dynamic_pointer_cast<FCPTestDDAReplyResponse,
-                                     FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
+  return createResult<TestDDAReplyResponse::Ptr, TestDDAReplyConverter>( resp );
 }
 
-FCPTestDDAResponse
+TestDDAResponse
 Node::testDDAResponse(std::string dir, std::string readContent)
 {
   Message::Ptr m = Message::factory( std::string("TestDDAResponse") );
@@ -338,25 +320,19 @@
   job->wait(globalCommandsTimeout);
 
   Response resp = job->getResponse();
-
   // check if protocol error has occured
   checkProtocolError(resp); // throws
 
-
-  FCPOneMessageResponse::Ptr response =
-     boost::dynamic_pointer_cast<FCPOneMessageResponse,
-                                 FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
-
-  m = response->getMessage();
-  return FCPTestDDAResponse(m->getField("Directory"),
+  m = createResult<Message::Ptr, MessageConverter>( resp );
+  return TestDDAResponse(m->getField("Directory"),
                             m->getField("ReadDirectoryAllowed")=="true",
                             m->getField("WriteDirectoryAllowed")=="true");
 }
 
-FCPTestDDAResponse
+TestDDAResponse
 Node::testDDA(std::string dir, bool read, bool write)
 {
-   FCPTestDDAReplyResponse::Ptr replyResponse;
+   TestDDAReplyResponse::Ptr replyResponse;
    Message::Ptr m;
 
    try
@@ -378,33 +354,33 @@
          os.close();
        }
      }
-     FCPTestDDAResponse ret = testDDAResponse(dir, readContent.str());
+     TestDDAResponse ret = testDDAResponse(dir, readContent.str());
      //TODO: delete created file
      return ret;
    }
    catch (FCPException& e)
    {
      log().log(ERROR, e.getMessage()->toString());
-     return FCPTestDDAResponse(dir, false, false);
+     return TestDDAResponse(dir, false, false);
    }
    catch (std::logic_error& e)
    {
      log().log(FATAL, e.what()); // this should never happen... TODO: should I force shutdown?
-     return FCPTestDDAResponse(dir, false, false);
+     return TestDDAResponse(dir, false, false);
    }
    catch (std::runtime_error& e)
    {
      log().log(ERROR, e.what());
-     return FCPTestDDAResponse(dir, false, false);
+     return TestDDAResponse(dir, false, false);
    }
    catch (std::exception& e)
    {
      log().log(ERROR, e.what());
-     return FCPTestDDAResponse(dir, false, false);
+     return TestDDAResponse(dir, false, false);
    }
 }
 
-FCPOneMessageResponse::Ptr
+Message::Ptr
 Node::generateSSK(std::string identifier)
 {
   Message::Ptr m = Message::factory( std::string("GenerateSSK") );
@@ -419,8 +395,7 @@
   Response resp = job->getResponse();
   checkProtocolError(resp); // throws
 
-  return boost::dynamic_pointer_cast<FCPOneMessageResponse,
-                                     FCPResult>( FCPResult::factory( job->getCommandName(), resp ) );
+  return createResult<Message::Ptr, MessageConverter>( resp );
 }
 
 JobTicket::Ptr

Modified: trunk/apps/CppFCPLib/Node.h
===================================================================
--- trunk/apps/CppFCPLib/Node.h	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/Node.h	2007-07-16 10:46:15 UTC (rev 14155)
@@ -8,12 +8,9 @@
 #include "zthread/Thread.h"
 #include "zthread/ThreadedExecutor.h"
 
+#include "FCPResult.h"
 #include "TQueue.h"
 #include "NodeThread.h"
-#include "FCPMultiMessageResponse.h"
-#include "FCPOneMessageResponse.h"
-#include "FCPTestDDAReplyResponse.h"
-#include "FCPTestDDAResponse.h"
 #include "AdditionalFields.h"
 
 namespace FCPLib {
@@ -51,22 +48,22 @@
 
   const Message::Ptr getNodeHelloMessage() const;
 
-  FCPMultiMessageResponse::Ptr listPeers(const AdditionalFields& = AdditionalFields());
-  FCPMultiMessageResponse::Ptr listPeerNotes(const std::string&);
-  FCPOneMessageResponse::Ptr addPeer(const std::string &, bool isURL);
-  FCPOneMessageResponse::Ptr addPeer(const std::map<std::string, std::string> &message);
-  FCPOneMessageResponse::Ptr modifyPeer(const std::string &, const AdditionalFields& = AdditionalFields());
-  FCPOneMessageResponse::Ptr modifyPeerNote(const std::string &, const std::string &, int);
-  FCPOneMessageResponse::Ptr removePeer(const std::string &);
+  std::vector<Message::Ptr> listPeers(const AdditionalFields& = AdditionalFields());
+  std::vector<Message::Ptr> listPeerNotes(const std::string&);
+  Message::Ptr addPeer(const std::string &, bool isURL);
+  Message::Ptr addPeer(const std::map<std::string, std::string> &message);
+  Message::Ptr modifyPeer(const std::string &, const AdditionalFields& = AdditionalFields());
+  Message::Ptr modifyPeerNote(const std::string &, const std::string &, int);
+  Message::Ptr removePeer(const std::string &);
   Message::Ptr getNode(const AdditionalFields& = AdditionalFields());
-  FCPOneMessageResponse::Ptr getConfig(const AdditionalFields& = AdditionalFields());
-  FCPOneMessageResponse::Ptr modifyConfig(Message::Ptr m);
+  Message::Ptr getConfig(const AdditionalFields& = AdditionalFields());
+  Message::Ptr modifyConfig(Message::Ptr m);
 
-  FCPTestDDAReplyResponse::Ptr testDDARequest(std::string dir, bool read, bool write);
-  FCPTestDDAResponse testDDAResponse(std::string dir, std::string readContent = "");
-  FCPTestDDAResponse testDDA(std::string dir, bool read, bool write);
+  TestDDAReplyResponse::Ptr testDDARequest(std::string dir, bool read, bool write);
+  TestDDAResponse testDDAResponse(std::string dir, std::string readContent = "");
+  TestDDAResponse testDDA(std::string dir, bool read, bool write);
 
-  FCPOneMessageResponse::Ptr generateSSK(std::string identifier);
+  Message::Ptr generateSSK(std::string identifier);
   JobTicket::Ptr putData(const std::string , // URI
                                   std::istream*, // Data Stream
                                   int, // dataLength

Modified: trunk/apps/CppFCPLib/NodeThread.h
===================================================================
--- trunk/apps/CppFCPLib/NodeThread.h	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/NodeThread.h	2007-07-16 10:46:15 UTC (rev 14155)
@@ -1,17 +1,19 @@
 #ifndef NODETHREAD_H__
 #define NODETHREAD_H__
 
-#include "zthread/Thread.h"
-#include "TQueue.h"
-#include "Log.h"
-#include "Server.h"
+#include <zthread/Thread.h>
 #include <map>
 #include <string>
-#include "JobTicket.h"
-#include "ServerMessage.h"
 #include <exception>
 #include <boost/shared_ptr.hpp>
 
+#include "JobTicket.h"
+#include "ServerMessage.h"
+#include "TQueue.h"
+#include "Log.h"
+#include "Server.h"
+
+
 namespace FCPLib {
 
 class Node;

Modified: trunk/apps/CppFCPLib/main.cpp
===================================================================
--- trunk/apps/CppFCPLib/main.cpp	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/main.cpp	2007-07-16 10:46:15 UTC (rev 14155)
@@ -2,17 +2,12 @@
 #include <string>
 #include "Server.h"
 #include "Node.h"
-#include "FCPMultiMessageResponse.h"
 #include "ServerMessage.h"
-#include "FCPTestDDAResponse.h"
 
-using namespace std;
-using namespace FCPLib;
-
 int main()
 {
-  Node n("123", "", -1);
-  Message::Ptr m = n.getNode();
+  FCPLib::Node n("123", "", -1);
+  FCPLib::Message::Ptr m = n.getNode();
   std::cout << m->toString() ;
 
   getchar ();

Modified: trunk/apps/CppFCPLib/todo.txt
===================================================================
--- trunk/apps/CppFCPLib/todo.txt	2007-07-16 09:17:50 UTC (rev 14154)
+++ trunk/apps/CppFCPLib/todo.txt	2007-07-16 10:46:15 UTC (rev 14155)
@@ -14,8 +14,6 @@
 *  create examples, tests
 *  what should be status for the callback function
 *  what do you do with close connection message?
-*  creation of results from responses is currently quite inflexible... 
-      create function:  ReturnType get_result<ReturnType, Converter> ( nodeResponses );
 
 Questions
 =========




More information about the Cppfcplib mailing list