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(jack_status_t code, 
const char* message)
    68     JackGlobals::fServerRunning = 
false;
    69     JackClient::ShutDown(code, message);
    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;
    88     jack_log(
"JackLibClient::Open name = %s", name);
    90     if (strlen(name) >= JACK_CLIENT_NAME_SIZE) {
    91         jack_error(
"\"%s\" is too long to be used as a JACK client name.\n"    92                    "Please use %lu characters or less",
    94                    JACK_CLIENT_NAME_SIZE - 1);
    98     strncpy(fServerName, server_name, 
sizeof(fServerName));
   101     char name_res[JACK_CLIENT_NAME_SIZE+1];
   102     if (
fChannel->Open(server_name, name, uuid, name_res, 
this, options, status) < 0) {
   114     fChannel->ClientOpen(name_res, JackTools::GetPID(), uuid, &shared_engine, &shared_client, &shared_graph, &result);
   116         jack_error(
"Cannot open %s client", name_res);
   122         JackLibGlobals::fGlobals->fEngineControl.SetShmIndex(shared_engine, fServerName);
   123         JackLibGlobals::fGlobals->fGraphManager.SetShmIndex(shared_graph, fServerName);
   124         fClientControl.SetShmIndex(shared_client, fServerName);
   125         JackGlobals::fVerbose = GetEngineControl()->fVerbose;
   127         jack_error(
"Map shared memory segments exception");
   134     assert(JackGlobals::fSynchroMutex);
   135     JackGlobals::fSynchroMutex->Lock();
   136     res = fSynchroTable[GetClientControl()->fRefNum].Connect(name_res, fServerName);
   137     JackGlobals::fSynchroMutex->Unlock();
   139         jack_error(
"Cannot ConnectSemaphore %s client", name_res);
   143     JackGlobals::fClientTable[GetClientControl()->fRefNum] = 
this;
   144     SetClockSource(GetEngineControl()->fClockSource);
   145     jack_log(
"JackLibClient::Open name = %s refnum = %ld", name_res, GetClientControl()->fRefNum);
   160     assert(JackGlobals::fSynchroMutex);
   161     JackGlobals::fSynchroMutex->Lock();
   167             jack_log(
"JackClient::AddClient name = %s, ref = %ld ", name, refnum);
   169             res = fSynchroTable[refnum].Connect(name, fServerName) ? 0 : -1;
   173             jack_log(
"JackClient::RemoveClient name = %s, ref = %ld ", name, refnum);
   174             if (GetClientControl() && strcmp(GetClientControl()->fName, name) != 0) {
   175                 res = fSynchroTable[refnum].Disconnect() ? 0 : -1;
   180     JackGlobals::fSynchroMutex->Unlock();
   186     assert(JackLibGlobals::fGlobals->fGraphManager);
   187     return JackLibGlobals::fGlobals->fGraphManager;
   190 JackEngineControl* JackLibClient::GetEngineControl()
 const   192     assert(JackLibGlobals::fGlobals->fEngineControl);
   193     return JackLibGlobals::fGlobals->fEngineControl;
   196 JackClientControl* JackLibClient::GetClientControl()
 const   198     return fClientControl;
 Inter process synchronization using POSIX 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...