20 #include "JackLibClient.h"
22 #include "JackLibGlobals.h"
23 #include "JackGlobals.h"
24 #include "JackPlatformPlug.h"
25 #include "JackTools.h"
31 JackGraphManager* GetGraphManager()
33 if (JackLibGlobals::fGlobals) {
34 return JackLibGlobals::fGlobals->fGraphManager;
40 JackEngineControl* GetEngineControl()
42 if (JackLibGlobals::fGlobals) {
43 return JackLibGlobals::fGlobals->fEngineControl;
49 JackSynchro* GetSynchroTable()
51 return (JackLibGlobals::fGlobals ? JackLibGlobals::fGlobals->fSynchroTable : 0);
60 jack_log(
"JackLibClient::JackLibClient table = %x", table);
64 JackLibClient::~JackLibClient()
66 jack_log(
"JackLibClient::~JackLibClient");
70 int JackLibClient::Open(
const char* server_name,
const char* name,
int uuid, jack_options_t options, jack_status_t* status)
72 int shared_engine, shared_client, shared_graph, result;
73 jack_log(
"JackLibClient::Open name = %s", name);
75 strncpy(fServerName, server_name,
sizeof(fServerName));
78 char name_res[JACK_CLIENT_NAME_SIZE + 1];
79 if (
fChannel->Open(server_name, name, uuid, name_res,
this, options, status) < 0) {
91 fChannel->ClientOpen(name_res, JackTools::GetPID(), uuid, &shared_engine, &shared_client, &shared_graph, &result);
99 JackLibGlobals::fGlobals->fEngineControl.SetShmIndex(shared_engine, fServerName);
100 JackLibGlobals::fGlobals->fGraphManager.SetShmIndex(shared_graph, fServerName);
101 fClientControl.SetShmIndex(shared_client, fServerName);
102 JackGlobals::fVerbose = GetEngineControl()->fVerbose;
104 jack_error(
"Map shared memory segments exception");
111 if (!fSynchroTable[GetClientControl()->fRefNum].Connect(name_res, fServerName)) {
112 jack_error(
"Cannot ConnectSemaphore %s client", name_res);
116 JackGlobals::fClientTable[GetClientControl()->fRefNum] =
this;
117 JackGlobals::fServerRunning =
true;
118 SetClockSource(GetEngineControl()->fClockSource);
119 jack_log(
"JackLibClient::Open name = %s refnum = %ld", name_res, GetClientControl()->fRefNum);
139 jack_log(
"JackClient::AddClient name = %s, ref = %ld ", name, refnum);
141 res = fSynchroTable[refnum].Connect(name, fServerName) ? 0 : -1;
145 jack_log(
"JackClient::RemoveClient name = %s, ref = %ld ", name, refnum);
146 if (GetClientControl() && strcmp(GetClientControl()->fName, name) != 0)
147 res = fSynchroTable[refnum].Disconnect() ? 0 : -1;
156 assert(JackLibGlobals::fGlobals->fGraphManager);
157 return JackLibGlobals::fGlobals->fGraphManager;
160 JackEngineControl* JackLibClient::GetEngineControl()
const
162 assert(JackLibGlobals::fGlobals->fEngineControl);
163 return JackLibGlobals::fGlobals->fEngineControl;
166 JackClientControl* JackLibClient::GetClientControl()
const
168 return fClientControl;