[Cppfcplib] r13528 - trunk/apps/CppFCPLib
Matthew Toseland
toad at amphibian.dyndns.org
Thu Jun 14 18:05:24 UTC 2007
Are you assuming that we will never have two ListPeerNotes for the same node
at the same time, and enforcing this through coalescing in the library?
Should we include an Identifier field?
On Tuesday 12 June 2007 09:03, mkolar at freenetproject.org wrote:
> Author: mkolar
> Date: 2007-06-12 08:03:45 +0000 (Tue, 12 Jun 2007)
> New Revision: 13528
>
> Added:
> trunk/apps/CppFCPLib/EndMessage.h
> trunk/apps/CppFCPLib/FCPClientHelloResult.h
> trunk/apps/CppFCPLib/FCPListPeerNotesResult.cpp
> trunk/apps/CppFCPLib/FCPListPeerNotesResult.h
> trunk/apps/CppFCPLib/NodeHelloMessage.h
> trunk/apps/CppFCPLib/PeerNoteMessage.h
> trunk/apps/CppFCPLib/todo.txt
> Modified:
> trunk/apps/CppFCPLib/FCPListPeersResult.cpp
> trunk/apps/CppFCPLib/FCPListPeersResult.h
> trunk/apps/CppFCPLib/FCPResult.cpp
> trunk/apps/CppFCPLib/FCPResult.h
> trunk/apps/CppFCPLib/Node.cpp
> trunk/apps/CppFCPLib/Node.h
> trunk/apps/CppFCPLib/NodeThread.cpp
> trunk/apps/CppFCPLib/ServerMessage.cpp
> trunk/apps/CppFCPLib/ServerMessage.h
> trunk/apps/CppFCPLib/main.cpp
> Log:
> * added handling for ListPeers and ListPeerNotes
> * some minor changes on ClientHello and NodeHello messages
>
>
>
> Added: trunk/apps/CppFCPLib/EndMessage.h
> ===================================================================
> --- trunk/apps/CppFCPLib/EndMessage.h (rev 0)
> +++ trunk/apps/CppFCPLib/EndMessage.h 2007-06-12 08:03:45 UTC (rev 13528)
> @@ -0,0 +1,6 @@
> +#ifndef ENDMESSAGE_H__
> +#define ENDMESSAGE_H__
> +
> +
> +
> +#endif // ENDMESSAGE_H__
>
> Added: trunk/apps/CppFCPLib/FCPClientHelloResult.h
> ===================================================================
> --- trunk/apps/CppFCPLib/FCPClientHelloResult.h
> (rev 0) +++ trunk/apps/CppFCPLib/FCPClientHelloResult.h 2007-06-12 08:03:45
> UTC (rev 13528) @@ -0,0 +1,24 @@
> +#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__
>
> Added: trunk/apps/CppFCPLib/FCPListPeerNotesResult.cpp
> ===================================================================
> --- trunk/apps/CppFCPLib/FCPListPeerNotesResult.cpp
> (rev 0) +++ trunk/apps/CppFCPLib/FCPListPeerNotesResult.cpp 2007-06-12
> 08:03:45 UTC (rev 13528) @@ -0,0 +1,16 @@
> +#include "FCPListPeerNotesResult.h"
> +
> +
> +using namespace FCPLib;
> +
> +const std::vector<ServerMessage::ServerMessagePtr>
> +FCPListPeerNotesResult::getPeerNotes() const
> +{
> + return peerNotes;
> +}
> +
> +FCPListPeerNotesResult::FCPListPeerNotesResult(const
> std::vector<ServerMessage::ServerMessagePtr> &nodeResponse ) +{
> + // FIX: do not store last message (EndListPeerNotes)
> + this->peerNotes = std::vector<ServerMessage::ServerMessagePtr>(
> nodeResponse ); +}
>
> Added: trunk/apps/CppFCPLib/FCPListPeerNotesResult.h
> ===================================================================
> --- trunk/apps/CppFCPLib/FCPListPeerNotesResult.h
> (rev 0) +++ trunk/apps/CppFCPLib/FCPListPeerNotesResult.h 2007-06-12
> 08:03:45 UTC (rev 13528) @@ -0,0 +1,26 @@
> +#ifndef FCPLISTPEERNOTESRESULT_H__
> +#define FCPLISTPEERNOTESRESULT_H__
> +
> +#include <vector>
> +#include <memory>
> +#include "Message.h"
> +#include "FCPResult.h"
> +
> +
> +namespace FCPLib {
> +
> +
> +class FCPListPeerNotesResult : public FCPResult {
> + std::vector<ServerMessage::ServerMessagePtr> peerNotes;
> +
> + FCPListPeerNotesResult(const
> std::vector<ServerMessage::ServerMessagePtr> &nodeResponse ); +public:
> + typedef boost::shared_ptr<FCPListPeerNotesResult>
> FCPListPeerNotesResultPtr; +
> + const std::vector<ServerMessage::ServerMessagePtr> getPeerNotes() const;
> +
> + friend class FCPResult;
> +};
> +}
> +
> +#endif // FCPLISTPEERNOTESRESULT_H__
>
> Modified: trunk/apps/CppFCPLib/FCPListPeersResult.cpp
> ===================================================================
> --- trunk/apps/CppFCPLib/FCPListPeersResult.cpp 2007-06-12 02:14:54 UTC
> (rev 13527) +++ trunk/apps/CppFCPLib/FCPListPeersResult.cpp 2007-06-12
> 08:03:45 UTC (rev 13528) @@ -3,12 +3,15 @@
>
> using namespace FCPLib;
>
> -FCPListPeersResult::FCPResultPtr
> -FCPListPeersResult::createFromMessages(const
> std::vector<ServerMessage::ServerMessagePtr> &nodeResponse) +
> +const std::vector<ServerMessage::ServerMessagePtr>
> +FCPListPeersResult::getPeers() const
> {
> - FCPListPeersResultPtr ret( new FCPListPeersResult() );
> + return peers;
> +}
>
> - ret->peers = std::vector<ServerMessage::ServerMessagePtr>( nodeResponse
> ); -
> - return ret;
> +FCPListPeersResult::FCPListPeersResult(const
> std::vector<ServerMessage::ServerMessagePtr> &nodeResponse) +{
> + // FIX: do not store last message (EndListPeers)
> + this->peers = std::vector<ServerMessage::ServerMessagePtr>( nodeResponse
> ); }
>
> Modified: trunk/apps/CppFCPLib/FCPListPeersResult.h
> ===================================================================
> --- trunk/apps/CppFCPLib/FCPListPeersResult.h 2007-06-12 02:14:54 UTC (rev
> 13527) +++ trunk/apps/CppFCPLib/FCPListPeersResult.h 2007-06-12 08:03:45
> UTC (rev 13528) @@ -14,11 +14,12 @@
> class FCPListPeersResult : public FCPResult {
> std::vector<ServerMessage::ServerMessagePtr> peers;
>
> - FCPListPeersResult() {}
> + FCPListPeersResult( const std::vector<ServerMessage::ServerMessagePtr>
> &nodeResponse ); public:
> typedef boost::shared_ptr<FCPListPeersResult> FCPListPeersResultPtr;
>
> - static FCPResultPtr createFromMessages(const
> std::vector<ServerMessage::ServerMessagePtr> &nodeResponse); + const
> std::vector<ServerMessage::ServerMessagePtr> getPeers() const; + friend
> class FCPResult;
> };
> }
>
>
> Modified: trunk/apps/CppFCPLib/FCPResult.cpp
> ===================================================================
> --- trunk/apps/CppFCPLib/FCPResult.cpp 2007-06-12 02:14:54 UTC (rev 13527)
> +++ trunk/apps/CppFCPLib/FCPResult.cpp 2007-06-12 08:03:45 UTC (rev 13528)
> @@ -3,14 +3,22 @@
>
>
> #include "FCPListPeersResult.h"
> +#include "FCPClientHelloResult.h"
> +#include "FCPListPeerNotesResult.h"
>
> using namespace FCPLib;
>
> FCPResult::FCPResultPtr
> -FCPResult::factory(const std::string cmd,
> std::vector<ServerMessage::ServerMessagePtr> nodeResponse)
> +FCPResult::factory(const std::string cmd,
> std::vector<ServerMessage::ServerMessagePtr> &nodeResponse) {
> + if (cmd == "ClientHello") {
> + return FCPClientHelloResult::FCPClientHelloResultPtr( new
> FCPClientHelloResult( (*nodeResponse.begin())->getMessage() ) ); + } else
> if (cmd == "ListPeers") {
> - return FCPListPeersResult::createFromMessages( nodeResponse );
> + return FCPListPeersResult::FCPListPeersResultPtr( new
> FCPListPeersResult(nodeResponse) ); + } else
> + if (cmd == "ListPeerNotes") {
> + return FCPListPeerNotesResult::FCPListPeerNotesResultPtr( new
> FCPListPeerNotesResult(nodeResponse) ); }
>
> throw new std::runtime_error("Not implemented : " + cmd);
>
> Modified: trunk/apps/CppFCPLib/FCPResult.h
> ===================================================================
> --- trunk/apps/CppFCPLib/FCPResult.h 2007-06-12 02:14:54 UTC (rev 13527)
> +++ trunk/apps/CppFCPLib/FCPResult.h 2007-06-12 08:03:45 UTC (rev 13528)
> @@ -13,7 +13,7 @@
> public:
> typedef boost::shared_ptr<FCPResult> FCPResultPtr;
>
> - static FCPResultPtr factory(const std::string cmd,
> std::vector<ServerMessage::ServerMessagePtr> nodeResponse); + static
> FCPResultPtr factory(const std::string cmd,
> std::vector<ServerMessage::ServerMessagePtr> &nodeResponse); virtual
> ~FCPResult() = 0;
> };
>
>
> Modified: trunk/apps/CppFCPLib/Node.cpp
> ===================================================================
> --- trunk/apps/CppFCPLib/Node.cpp 2007-06-12 02:14:54 UTC (rev 13527)
> +++ trunk/apps/CppFCPLib/Node.cpp 2007-06-12 08:03:45 UTC (rev 13528)
> @@ -41,17 +41,38 @@
> executor.interrupt();
> }
>
> -FCPListPeersResult
> +FCPListPeersResult::FCPListPeersResultPtr
> Node::listPeers(bool withMetaData = false,
> - bool withVolatile = false){
> + bool withVolatile = false)
> +{
> Message::MessagePtr m = Message::factory( std::string("ListPeers") );
> m->setField("WithMetadata", withMetaData ? "true" : "false");
> m->setField("WithVolatila", withVolatile ? "true" : "false");
>
> - JobTicket::JobTicketPtr job = JobTicket::factory( "__hello", m, false,
> false, false, 0 ); + JobTicket::JobTicketPtr job = JobTicket::factory(
> "__global", m, false, false, false, 0 ); log().log(DEBUG, job->toString());
> clientReqQueue->put(job);
>
> - //TODO: finish
> + log().log(DEBUG, "waiting for the EndListPeers");
> + job->wait(0);
> + log().log(DEBUG, "EndListPeers arrived");
> +
> + return boost::dynamic_pointer_cast<FCPListPeersResult,
> FCPResult>(job->getResult()); }
>
> +FCPListPeerNotesResult::FCPListPeerNotesResultPtr
> +Node::listPeerNotes(std::string& identifier)
> +{
> + Message::MessagePtr m = Message::factory( std::string("ListPeerNotes")
> ); + m->setField("NodeIdentifier", identifier);
> +
> + JobTicket::JobTicketPtr job = JobTicket::factory( "__global", m, false,
> false, false, 0 ); + log().log(DEBUG, job->toString());
> + clientReqQueue->put(job);
> +
> + log().log(DEBUG, "waiting for the EndListPeerNotes");
> + job->wait(0);
> + log().log(DEBUG, "EndListPeers arrived");
> +
> + return boost::dynamic_pointer_cast<FCPListPeerNotesResult,
> FCPResult>(job->getResult()); +}
>
> Modified: trunk/apps/CppFCPLib/Node.h
> ===================================================================
> --- trunk/apps/CppFCPLib/Node.h 2007-06-12 02:14:54 UTC (rev 13527)
> +++ trunk/apps/CppFCPLib/Node.h 2007-06-12 08:03:45 UTC (rev 13528)
> @@ -10,6 +10,7 @@
> #include "TQueue.h"
> #include "NodeThread.h"
> #include "FCPListPeersResult.h"
> +#include "FCPListPeerNotesResult.h"
>
> namespace FCPLib {
> class Node {
> @@ -24,7 +25,8 @@
> Node(std::string name, std::string host, int port);
> ~Node();
>
> - FCPListPeersResult listPeers(bool, bool);
> + FCPListPeersResult::FCPListPeersResultPtr listPeers(bool, bool);
> + FCPListPeerNotesResult::FCPListPeerNotesResultPtr
> listPeerNotes(std::string&); };
> }
>
>
> Added: trunk/apps/CppFCPLib/NodeHelloMessage.h
> ===================================================================
> --- trunk/apps/CppFCPLib/NodeHelloMessage.h (rev 0)
> +++ trunk/apps/CppFCPLib/NodeHelloMessage.h 2007-06-12 08:03:45 UTC (rev
> 13528) @@ -0,0 +1,26 @@
> +#ifndef NODEHELLOMESSAGE_H__
> +#define NODEHELLOMESSAGE_H__
> +
> +namespace FCPLib {
> +
> +class ServerMessage;
> +
> +class NodeHelloMessage : public ServerMessage {
> + NodeHelloMessage() {}
> +public:
> + std::string getIdOfJob() const
> + {
> + return "__hello";
> + }
> +
> + bool isLastMessage(const std::string &cmd) const
> + {
> + return true;
> + }
> +
> + friend class ServerMessage;
> +};
> +
> +}
> +
> +#endif // NODEHELLOMESSAGE_H__
>
> Modified: trunk/apps/CppFCPLib/NodeThread.cpp
> ===================================================================
> --- trunk/apps/CppFCPLib/NodeThread.cpp 2007-06-12 02:14:54 UTC (rev 13527)
> +++ trunk/apps/CppFCPLib/NodeThread.cpp 2007-06-12 08:03:45 UTC (rev 13528)
> @@ -68,7 +68,7 @@
>
> it = jobs->find(message->getIdOfJob());
> if (it == jobs->end()) {
> - log().log(DEBUG, "doMessage : received NodeHello, cannot find __hello
> in started jobs"); + log().log(DETAIL, "doMessage : received " +
> message->toString() + ", cannot find " + message->getIdOfJob() + " in
> started jobs"); return;
> }
>
>
> Added: trunk/apps/CppFCPLib/PeerNoteMessage.h
> ===================================================================
> --- trunk/apps/CppFCPLib/PeerNoteMessage.h (rev 0)
> +++ trunk/apps/CppFCPLib/PeerNoteMessage.h 2007-06-12 08:03:45 UTC (rev
> 13528) @@ -0,0 +1,33 @@
> +#ifndef PEERNOTEMESSAGE_H__
> +#define PEERNOTEMESSAGE_H__
> +
> +#include <string>
> +#include <stdexcept>
> +
> +namespace FCPLib {
> +
> +class ServerMessage;
> +
> +class PeerNoteMessage : public ServerMessage {
> + PeerNoteMessage() {}
> +public:
> + std::string getIdOfJob() const
> + {
> + return "__global";
> + }
> +
> + bool isLastMessage(const std::string &cmd) const
> + {
> + if (cmd == "ListPeerNotes")
> + return false;
> + else if (cmd == "ModifyPeerNote")
> + return true;
> +
> + throw new std::runtime_error("Unknown command");
> + }
> +
> + friend class ServerMessage;
> +};
> +
> +}
> +#endif // PEERNOTEMESSAGE_H__
>
> Modified: trunk/apps/CppFCPLib/ServerMessage.cpp
> ===================================================================
> --- trunk/apps/CppFCPLib/ServerMessage.cpp 2007-06-12 02:14:54 UTC (rev
> 13527) +++ trunk/apps/CppFCPLib/ServerMessage.cpp 2007-06-12 08:03:45 UTC
> (rev 13528) @@ -1,6 +1,9 @@
>
> #include "ServerMessage.h"
> +#include "PeerNoteMessage.h"
> #include "PeerMessage.h"
> +#include "NodeHelloMessage.h"
> +#include "Log.h"
>
> using namespace FCPLib;
>
> @@ -14,8 +17,22 @@
> line[strlen(line)-1] = 0;
> std::string header = std::string(line);
>
> + log().log(DETAIL, "NODE: " + header);
> +
> + if (header == "NodeHello"){
> + m = ServerMessagePtr( new NodeHelloMessage() );
> + } else
> if (header == "Peer") {
> m = ServerMessagePtr( new PeerMessage() );
> + } else
> + if (header == "EndListPeers") {
> + m = ServerMessagePtr( new EndMessage() );
> + } else
> + if (header == "PeerNote") {
> + m = ServerMessagePtr( new PeerNoteMessage() );
> + } else
> + if (header == "EndListPeerNotes") {
> + m = ServerMessagePtr( new EndMessage() );
> }
> m->message = Message::factory(header);
>
> @@ -31,6 +48,8 @@
> s.readln(line, 1000);
> line[strlen(line)-1] = 0;
>
> + log().log(DETAIL, "NODE: " + std::string(line));
> +
> if (!strcmp(line, "End") || !strcmp(line, "EndMessage"))
> break;
>
> @@ -40,4 +59,7 @@
> }
> }
>
> -
> +const std::string&
> +ServerMessage::toString() const {
> + return message->toString();
> +}
>
> Modified: trunk/apps/CppFCPLib/ServerMessage.h
> ===================================================================
> --- trunk/apps/CppFCPLib/ServerMessage.h 2007-06-12 02:14:54 UTC (rev
> 13527) +++ trunk/apps/CppFCPLib/ServerMessage.h 2007-06-12 08:03:45 UTC
> (rev 13528) @@ -7,9 +7,11 @@
> namespace FCPLib {
>
> class ServerMessage {
> + void read(Server &s);
> +
> +protected:
> Message::MessagePtr message;
>
> - void read(Server &s);
> public:
> typedef boost::shared_ptr<ServerMessage> ServerMessagePtr;
> static ServerMessagePtr factory(Server &s);
> @@ -17,6 +19,9 @@
> virtual std::string getIdOfJob() const = 0;
> virtual bool isLastMessage(const std::string &cmd) const = 0;
> virtual ~ServerMessage() {}
> +
> + const std::string& toString() const;
> + const Message::MessagePtr getMessage() const { return message; }
> };
>
> }
>
> Modified: trunk/apps/CppFCPLib/main.cpp
> ===================================================================
> --- trunk/apps/CppFCPLib/main.cpp 2007-06-12 02:14:54 UTC (rev 13527)
> +++ trunk/apps/CppFCPLib/main.cpp 2007-06-12 08:03:45 UTC (rev 13528)
> @@ -2,7 +2,8 @@
> #include <string>
> #include "Server.h"
> #include "Node.h"
> -
> +#include "FCPListPeersResult.h"
> +
> using namespace std;
> using namespace FCPLib;
>
> @@ -17,6 +18,8 @@
> // cout << line;
> // }
>
> - Node("123", "", -1);
> + Node n("123", "", -1);
> +// FCPListPeersResult::FCPListPeersResultPtr r = n.listPeers();
> +
> return 0;
> }
>
> Added: trunk/apps/CppFCPLib/todo.txt
> ===================================================================
> --- trunk/apps/CppFCPLib/todo.txt (rev 0)
> +++ trunk/apps/CppFCPLib/todo.txt 2007-06-12 08:03:45 UTC (rev 13528)
> @@ -0,0 +1,10 @@
> +Todo
> +====
> +
> +* work on logging messages...
> +
> +
> +Questions
> +=========
> +
> +* what to do with CloseConnectionDuplicateClientName
> \ No newline at end of file
>
> _______________________________________________
> Cppfcplib mailing list
> Cppfcplib at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cppfcplib
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://emu.freenetproject.org/pipermail/cppfcplib/attachments/20070614/f8f00d33/attachment.pgp
More information about the Cppfcplib
mailing list