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