• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

daemon/src/ClientHandler.h

Go to the documentation of this file.
00001 /*
00002  * ClientHandler.h
00003  *
00004  *  Created on: 24.06.2009
00005  *      Author: morgenro
00006  */
00007 
00008 #ifndef CLIENTHANDLER_H_
00009 #define CLIENTHANDLER_H_
00010 
00011 #include "core/AbstractWorker.h"
00012 #include "ibrdtn/streams/StreamConnection.h"
00013 #include "ibrdtn/streams/StreamContactHeader.h"
00014 #include "ibrcommon/net/tcpstream.h"
00015 #include "core/EventReceiver.h"
00016 #include <memory>
00017 
00018 using namespace dtn::streams;
00019 
00020 namespace dtn
00021 {
00022         namespace daemon
00023         {
00024                 class ClientHandler;
00025 
00026                 class ApiServerInterface
00027                 {
00028                 public:
00029                         virtual void connectionUp(ClientHandler *conn) = 0;
00030                         virtual void connectionDown(ClientHandler *conn) = 0;
00031                 };
00032 
00033                 class ClientHandler : public dtn::streams::StreamConnection::Callback, public ibrcommon::DetachedThread
00034                 {
00035                 public:
00036                         ClientHandler(ApiServerInterface &srv, ibrcommon::tcpstream *stream, size_t connectionid);
00037                         virtual ~ClientHandler();
00038 
00039                         size_t id;
00040 
00041                         virtual void initialize();
00042                         virtual void shutdown();
00043 
00044                         virtual void eventShutdown(StreamConnection::ConnectionShutdownCases csc);
00045                         virtual void eventTimeout();
00046                         virtual void eventError();
00047                         virtual void eventConnectionDown();
00048                         virtual void eventConnectionUp(const StreamContactHeader &header);
00049 
00050                         virtual void eventBundleRefused();
00051                         virtual void eventBundleForwarded();
00052                         virtual void eventBundleAck(size_t ack);
00053 
00054                         friend ClientHandler& operator>>(ClientHandler &conn, dtn::data::Bundle &bundle);
00055                         friend ClientHandler& operator<<(ClientHandler &conn, const dtn::data::Bundle &bundle);
00056 
00057                         const dtn::data::EID& getPeer() const;
00058 
00059                         void queue(const dtn::data::Bundle &bundle);
00060 
00061                 protected:
00062                         void received(const dtn::streams::StreamContactHeader &h);
00063                         void run();
00064                         void finally();
00065 
00066                 private:
00067                         class Sender : public ibrcommon::JoinableThread, public ibrcommon::Queue<dtn::data::Bundle>
00068                         {
00069                         public:
00070                                 Sender(ClientHandler &client);
00071                                 virtual ~Sender();
00072 
00073                         protected:
00074                                 void run();
00075                                 bool __cancellation();
00076 
00077                         private:
00078                                 ClientHandler &_client;
00079                         };
00080 
00081                         ApiServerInterface &_srv;
00082                         ClientHandler::Sender _sender;
00083 
00084                         dtn::data::EID _eid;
00085 
00086                         auto_ptr<ibrcommon::tcpstream> _stream;
00087                         dtn::streams::StreamConnection _connection;
00088                         StreamContactHeader _contact;
00089 
00090                         ibrcommon::Queue<dtn::data::Bundle> _sentqueue;
00091                         size_t _lastack;
00092                 };
00093         }
00094 }
00095 #endif /* CLIENTHANDLER_H_ */

Generated on Thu Nov 11 2010 09:49:46 for IBR-DTNSuite by  doxygen 1.7.1