00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JackSocketServerChannel__
00021 #define __JackSocketServerChannel__
00022
00023 #include "JackSocket.h"
00024 #include "JackPlatformPlug.h"
00025 #include "JackRequestDecoder.h"
00026
00027 #include <poll.h>
00028 #include <map>
00029
00030 namespace Jack
00031 {
00032
00033 class JackServer;
00034
00039 class JackSocketServerChannel : public JackRunnableInterface, public JackClientHandlerInterface
00040 {
00041
00042 private:
00043
00044 JackServerSocket fRequestListenSocket;
00045 JackThread fThread;
00046 JackRequestDecoder* fDecoder;
00047 JackServer* fServer;
00048
00049 pollfd* fPollTable;
00050 bool fRebuild;
00051 std::map<int, std::pair<int, JackClientSocket*> > fSocketTable;
00052
00053 void BuildPoolTable();
00054
00055 void ClientCreate();
00056 void ClientKill(int fd);
00057
00058 void ClientAdd(detail::JackChannelTransactionInterface* socket, JackClientOpenRequest* req, JackClientOpenResult *res);
00059 void ClientRemove(detail::JackChannelTransactionInterface* socket, int refnum);
00060
00061 int GetFd(JackClientSocket* socket);
00062
00063 public:
00064
00065 JackSocketServerChannel();
00066 ~JackSocketServerChannel();
00067
00068 int Open(const char* server_name, JackServer* server);
00069 void Close();
00070
00071 int Start();
00072 void Stop();
00073
00074
00075 bool Init();
00076 bool Execute();
00077 };
00078
00079 }
00080
00081 #endif
00082