00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "JackMachNotifyChannel.h"
00021 #include "JackRPCClient.h"
00022 #include "JackError.h"
00023 #include "JackConstants.h"
00024
00025 namespace Jack
00026 {
00027
00028
00029
00030 int JackMachNotifyChannel::Open(const char* name)
00031 {
00032 JackLog("JackMachNotifyChannel::Open name = %s\n", name);
00033
00034 char buf[256];
00035 snprintf(buf, sizeof(buf) - 1, "%s:%s", jack_client_entry, name);
00036
00037
00038 if (!fClientPort.ConnectPort(buf)) {
00039 jack_error("Cannot connect client port");
00040 return -1;
00041 } else {
00042 return 0;
00043 }
00044 }
00045
00046 void JackMachNotifyChannel::Close()
00047 {
00048 fClientPort.DisconnectPort();
00049 }
00050
00051 void JackMachNotifyChannel::ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2, int* result)
00052 {
00053 kern_return_t res = (sync)
00054 ? rpc_jack_client_sync_notify(fClientPort.GetPort(), refnum, (char*)name, notify, value1, value2, result)
00055 : rpc_jack_client_async_notify(fClientPort.GetPort(), refnum, (char*)name, notify, value1, value2);
00056 if (res == KERN_SUCCESS) {
00057 *result = 0;
00058 } else {
00059 jack_error("JackMachNotifyChannel::ClientNotify: name = %s notify = %ld err = %s", name, notify, mach_error_string(res));
00060 *result = -1;
00061 }
00062 }
00063
00064 }
00065
00066