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 "JackChannel.h"
00024 #include "JackSocket.h"
00025 #include "JackThread.h"
00026 #include <poll.h>
00027 #include <map>
00028
00029 namespace Jack
00030 {
00031
00036 class JackSocketServerChannel : public JackServerChannelInterface, public JackRunnableInterface
00037 {
00038
00039 private:
00040
00041 JackServerSocket fRequestListenSocket;
00042 JackThread* fThread;
00043 JackServer* fServer;
00044 pollfd* fPollTable;
00045 bool fRebuild;
00046 std::map<int, std::pair<int, JackClientSocket*> > fSocketTable;
00047
00048 int HandleRequest(int fd);
00049 void CreateClient();
00050 void AddClient(int fd, char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result);
00051 void RemoveClient(int fd, int refnum);
00052 void KillClient(int fd);
00053 void BuildPoolTable();
00054
00055 public:
00056
00057 JackSocketServerChannel();
00058 virtual ~JackSocketServerChannel();
00059
00060 int Open(JackServer* server);
00061 void Close();
00062
00063
00064 bool Execute();
00065 };
00066
00067 }
00068
00069 #endif
00070