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 <poll.h>
00026 #include <map>
00027
00028 namespace Jack
00029 {
00030
00031 class JackServer;
00032
00037 class JackSocketServerChannel : public JackRunnableInterface
00038 {
00039
00040 private:
00041
00042 JackServerSocket fRequestListenSocket;
00043 JackThread fThread;
00044 JackServer* fServer;
00045 pollfd* fPollTable;
00046 bool fRebuild;
00047 std::map<int, std::pair<int, JackClientSocket*> > fSocketTable;
00048
00049 bool HandleRequest(int fd);
00050 void BuildPoolTable();
00051
00052 void ClientCreate();
00053 void ClientAdd(int fd, char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
00054 void ClientRemove(int fd, int refnum);
00055 void ClientKill(int fd);
00056
00057 public:
00058
00059 JackSocketServerChannel();
00060 ~JackSocketServerChannel();
00061
00062 int Open(const char* server_name, JackServer* server);
00063 void Close();
00064
00065 int Start();
00066
00067
00068 bool Init();
00069 bool Execute();
00070 };
00071
00072 }
00073
00074 #endif
00075