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);
65 void JackLibClient::ShutDown()
68 JackGlobals::fServerRunning =
false;
69 JackClient::ShutDown();
74 jack_log(
"JackLibClient::JackLibClient table = %x", table);
78 JackLibClient::~JackLibClient()
80 jack_log(
"JackLibClient::~JackLibClient");
84 int JackLibClient::Open(
const char* server_name,
const char* name,
int uuid, jack_options_t options, jack_status_t* status)
86 int shared_engine, shared_client, shared_graph, result;
87 jack_log(
"JackLibClient::Open name = %s", name);
89 strncpy(fServerName, server_name,
sizeof(fServerName));
92 char name_res[JACK_CLIENT_NAME_SIZE + 1];
93 if (
fChannel->Open(server_name, name, uuid, name_res,
this, options, status) < 0) {
105 fChannel->ClientOpen(name_res, JackTools::GetPID(), uuid, &shared_engine, &shared_client, &shared_graph, &result);
107 jack_error(
"Cannot open %s client", name_res);
113 JackLibGlobals::fGlobals->fEngineControl.SetShmIndex(shared_engine, fServerName);
114 JackLibGlobals::fGlobals->fGraphManager.SetShmIndex(shared_graph, fServerName);
115 fClientControl.SetShmIndex(shared_client, fServerName);
116 JackGlobals::fVerbose = GetEngineControl()->fVerbose;
118 jack_error(
"Map shared memory segments exception");
125 if (!fSynchroTable[GetClientControl()->fRefNum].Connect(name_res, fServerName)) {
126 jack_error(
"Cannot ConnectSemaphore %s client", name_res);
130 JackGlobals::fClientTable[GetClientControl()->fRefNum] =
this;
131 JackGlobals::fServerRunning =
true;
132 SetClockSource(GetEngineControl()->fClockSource);
133 jack_log(
"JackLibClient::Open name = %s refnum = %ld", name_res, GetClientControl()->fRefNum);
153 jack_log(
"JackClient::AddClient name = %s, ref = %ld ", name, refnum);
155 res = fSynchroTable[refnum].Connect(name, fServerName) ? 0 : -1;
159 jack_log(
"JackClient::RemoveClient name = %s, ref = %ld ", name, refnum);
160 if (GetClientControl() && strcmp(GetClientControl()->fName, name) != 0)
161 res = fSynchroTable[refnum].Disconnect() ? 0 : -1;
170 assert(JackLibGlobals::fGlobals->fGraphManager);
171 return JackLibGlobals::fGlobals->fGraphManager;
174 JackEngineControl* JackLibClient::GetEngineControl()
const
176 assert(JackLibGlobals::fGlobals->fEngineControl);
177 return JackLibGlobals::fGlobals->fEngineControl;
180 JackClientControl* JackLibClient::GetClientControl()
const
182 return fClientControl;
Inter process synchronization using using Mach semaphore.
SERVER_EXPORT void jack_error(const char *fmt,...)
Graph manager: contains the connection manager and the port array.
void SetupDriverSync(bool freewheel)
JackClientChannel using sockets.
JackLibClient(JackSynchro *table)
int ClientNotifyImp(int refnum, const char *name, int notify, int sync, const char *message, int value1, int value2)
Notification received from the server.
detail::JackClientChannelInterface * fChannel
SERVER_EXPORT void jack_log(const char *fmt,...)
The base class for clients: share part of the implementation for JackInternalClient and JackLibClient...