00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __JackWinNamedPipeServerChannel__
00022 #define __JackWinNamedPipeServerChannel__
00023
00024 #include "JackWinNamedPipe.h"
00025 #include "JackPlatformPlug.h"
00026 #include <list>
00027
00028 namespace Jack
00029 {
00030
00031 class JackServer;
00032
00033 class JackClientPipeThread : public JackRunnableInterface
00034 {
00035
00036 private:
00037
00038 JackWinNamedPipeClient* fPipe;
00039 JackServer* fServer;
00040 JackThread fThread;
00041 int fRefNum;
00042
00043 void ClientAdd(char* name, int pid, int uuid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
00044 void ClientRemove();
00045 void ClientKill();
00046
00047 static HANDLE fMutex;
00048
00049 public:
00050
00051 JackClientPipeThread(JackWinNamedPipeClient* pipe);
00052 virtual ~JackClientPipeThread();
00053
00054 int Open(JackServer* server);
00055 void Close();
00056
00057 bool HandleRequest();
00058
00059
00060 bool Execute();
00061
00062
00063 bool IsRunning()
00064 {
00065 return (fRefNum >= 0);
00066 }
00067 };
00068
00073 class JackWinNamedPipeServerChannel : public JackRunnableInterface
00074 {
00075
00076 private:
00077
00078 JackWinNamedPipeServer fRequestListenPipe;
00079 JackServer* fServer;
00080 JackThread fThread;
00081 char fServerName[64];
00082
00083 std::list<JackClientPipeThread*> fClientList;
00084
00085 void ClientAdd(JackWinNamedPipeClient* pipe);
00086
00087 public:
00088
00089 JackWinNamedPipeServerChannel();
00090 ~JackWinNamedPipeServerChannel();
00091
00092 int Open(const char* server_name, JackServer* server);
00093 void Close();
00094
00095 int Start();
00096
00097
00098 bool Init();
00099 bool Execute();
00100 };
00101
00102
00103 }
00104
00105 #endif
00106