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