00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JackMachServerChannel__
00021 #define __JackMachServerChannel__
00022
00023 #include "JackPlatformPlug.h"
00024 #include "JackMachPort.h"
00025 #include <map>
00026
00027 namespace Jack
00028 {
00029
00030 class JackServer;
00031 class JackLockedEngine;
00032
00037 class JackMachServerChannel : public JackRunnableInterface
00038 {
00039
00040 private:
00041
00042 JackMachPortSet fServerPort;
00043 JackThread fThread;
00044 JackServer* fServer;
00045 std::map<mach_port_t, int> fClientTable;
00046
00047 static boolean_t MessageHandler(mach_msg_header_t* Request, mach_msg_header_t* Reply);
00048
00049 public:
00050
00051 JackMachServerChannel();
00052 ~JackMachServerChannel();
00053
00054 int Open(const char* server_name, JackServer* server);
00055 void Close();
00056
00057 JackLockedEngine* GetEngine();
00058 JackServer* GetServer();
00059
00060 void ClientCheck(char* name, char* name_res, int protocol, int options, int* status, int* result);
00061 void ClientOpen(char* name, int pid, mach_port_t* private_port, int* shared_engine, int* shared_client, int* shared_graph, int* result);
00062 void ClientClose(mach_port_t private_port, int refnum);
00063 void ClientKill(mach_port_t private_port);
00064
00065 bool Execute();
00066
00067 static std::map<mach_port_t, JackMachServerChannel*> fPortTable;
00068 };
00069
00070 }
00071
00072 #endif
00073