Browse Source

New JackLoadableInternalClient1 and JackLoadableInternalClient2 classes.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2826 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
6c6264701c
3 changed files with 100 additions and 36 deletions
  1. +57
    -28
      common/JackInternalClient.cpp
  2. +41
    -6
      common/JackInternalClient.h
  3. +2
    -2
      common/JackServer.cpp

+ 57
- 28
common/JackInternalClient.cpp View File

@@ -172,21 +172,6 @@ JackClientControl* JackInternalClient::GetClientControl() const
return const_cast<JackClientControl*>(&fClientControl); return const_cast<JackClientControl*>(&fClientControl);
} }


JackLoadableInternalClient::JackLoadableInternalClient(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data)
: JackInternalClient(server, table)
{
snprintf(fObjectData, JACK_LOAD_INIT_LIMIT, object_data);
fParameters = NULL;
Init(so_name);
}

JackLoadableInternalClient::JackLoadableInternalClient(JackServer* server, JackSynchro* table, const char* so_name, const JSList* parameters)
: JackInternalClient(server, table)
{
fParameters = parameters;
Init(so_name);
}

void JackLoadableInternalClient::Init(const char* so_name) void JackLoadableInternalClient::Init(const char* so_name)
{ {
char path_to_so[PATH_MAX + 1]; char path_to_so[PATH_MAX + 1];
@@ -200,18 +185,6 @@ void JackLoadableInternalClient::Init(const char* so_name)
throw - 1; throw - 1;
} }


fInitialize = (InitializeCallback)GetJackProc(fHandle, "jack_initialize");
if (!fInitialize) {
UnloadJackModule(fHandle);
jack_error("symbol jack_initialize cannot be found in %s", so_name);
throw - 1;
}
fInternalInitialize = (InternalInitializeCallback)GetJackProc(fHandle, "jack_internal_initialize");
if (!fInternalInitialize) {
jack_info("No jack_internal_initialize entry-point for %s", so_name);
}

fFinish = (FinishCallback)GetJackProc(fHandle, "jack_finish"); fFinish = (FinishCallback)GetJackProc(fHandle, "jack_finish");
if (!fFinish) { if (!fFinish) {
UnloadJackModule(fHandle); UnloadJackModule(fHandle);
@@ -225,6 +198,44 @@ void JackLoadableInternalClient::Init(const char* so_name)
} }
} }


void JackLoadableInternalClient1::Init(const char* so_name)
{
JackLoadableInternalClient::Init(so_name);
fInitialize = (InitializeCallback)GetJackProc(fHandle, "jack_initialize");
if (!fInitialize) {
UnloadJackModule(fHandle);
jack_error("symbol jack_initialize cannot be found in %s", so_name);
throw - 1;
}
}

void JackLoadableInternalClient2::Init(const char* so_name)
{
JackLoadableInternalClient::Init(so_name);
fInitialize = (InternalInitializeCallback)GetJackProc(fHandle, "jack_internal_initialize");
if (!fInitialize) {
UnloadJackModule(fHandle);
jack_error("symbol jack_internal_initialize cannot be found in %s", so_name);
throw - 1;
}
}

JackLoadableInternalClient1::JackLoadableInternalClient1(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data)
: JackLoadableInternalClient(server, table)
{
snprintf(fObjectData, JACK_LOAD_INIT_LIMIT, object_data);
Init(so_name);
}

JackLoadableInternalClient2::JackLoadableInternalClient2(JackServer* server, JackSynchro* table, const char* so_name, const JSList* parameters)
: JackLoadableInternalClient(server, table)
{
fParameters = parameters;
Init(so_name);
}

JackLoadableInternalClient::~JackLoadableInternalClient() JackLoadableInternalClient::~JackLoadableInternalClient()
{ {
if (fFinish) if (fFinish)
@@ -232,9 +243,10 @@ JackLoadableInternalClient::~JackLoadableInternalClient()
UnloadJackModule(fHandle); UnloadJackModule(fHandle);
} }


int JackLoadableInternalClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status)
int JackLoadableInternalClient1::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status)
{ {
int res = -1; int res = -1;
if (JackInternalClient::Open(server_name, name, options, status) == 0) { if (JackInternalClient::Open(server_name, name, options, status) == 0) {
if (fInitialize((jack_client_t*)this, fObjectData) == 0) { if (fInitialize((jack_client_t*)this, fObjectData) == 0) {
res = 0; res = 0;
@@ -243,6 +255,23 @@ int JackLoadableInternalClient::Open(const char* server_name, const char* name,
fFinish = NULL; fFinish = NULL;
} }
} }
return res;
}

int JackLoadableInternalClient2::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status)
{
int res = -1;
if (JackInternalClient::Open(server_name, name, options, status) == 0) {
if (fInitialize((jack_client_t*)this, fParameters) == 0) {
res = 0;
} else {
JackInternalClient::Close();
fFinish = NULL;
}
}
return res; return res;
} }




+ 41
- 6
common/JackInternalClient.h View File

@@ -87,23 +87,58 @@ typedef jack_driver_desc_t * (*JackDriverDescFunction) ();
class JackLoadableInternalClient : public JackInternalClient class JackLoadableInternalClient : public JackInternalClient
{ {


private:
protected:


HANDLE fHandle; HANDLE fHandle;
InitializeCallback fInitialize;
InternalInitializeCallback fInternalInitialize;
FinishCallback fFinish; FinishCallback fFinish;
JackDriverDescFunction fDescriptor; JackDriverDescFunction fDescriptor;
virtual void Init(const char* so_name);

public:

JackLoadableInternalClient(JackServer* server, JackSynchro* table)
:JackInternalClient(server, table), fHandle(NULL), fFinish(NULL), fDescriptor(NULL)
{}
virtual ~JackLoadableInternalClient();

};

class JackLoadableInternalClient1 : public JackLoadableInternalClient
{

private:

InitializeCallback fInitialize;
char fObjectData[JACK_LOAD_INIT_LIMIT]; char fObjectData[JACK_LOAD_INIT_LIMIT];
void Init(const char* so_name);

public:

JackLoadableInternalClient1(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data);
virtual ~JackLoadableInternalClient1()
{}

int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status);

};

class JackLoadableInternalClient2 : public JackLoadableInternalClient
{

private:

InternalInitializeCallback fInitialize;
const JSList* fParameters; const JSList* fParameters;
void Init(const char* so_name); void Init(const char* so_name);


public: public:


JackLoadableInternalClient(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data);
JackLoadableInternalClient(JackServer* server, JackSynchro* table, const char* so_name, const JSList* parameters);
virtual ~JackLoadableInternalClient();
JackLoadableInternalClient2(JackServer* server, JackSynchro* table, const char* so_name, const JSList* parameters);
virtual ~JackLoadableInternalClient2()
{}


int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status);




+ 2
- 2
common/JackServer.cpp View File

@@ -156,7 +156,7 @@ int JackServer::Close()
int JackServer::InternalClientLoad(const char* client_name, const char* so_name, const char* objet_data, int options, int* int_ref, int* status) int JackServer::InternalClientLoad(const char* client_name, const char* so_name, const char* objet_data, int options, int* int_ref, int* status)
{ {
try { try {
JackLoadableInternalClient* client = new JackLoadableInternalClient(fInstance, GetSynchroTable(), so_name, objet_data);
JackLoadableInternalClient* client = new JackLoadableInternalClient1(fInstance, GetSynchroTable(), so_name, objet_data);
assert(client); assert(client);
return InternalClientLoadAux(client, client_name, options, int_ref, status); return InternalClientLoadAux(client, client_name, options, int_ref, status);
} catch (...) { } catch (...) {
@@ -170,7 +170,7 @@ int JackServer::InternalClientLoad(const char* client_name, const char* so_name,
int JackServer::InternalClientLoad(const char* client_name, const char* so_name, const JSList * parameters, int options, int* int_ref, int* status) int JackServer::InternalClientLoad(const char* client_name, const char* so_name, const JSList * parameters, int options, int* int_ref, int* status)
{ {
try { try {
JackLoadableInternalClient* client = new JackLoadableInternalClient(fInstance, GetSynchroTable(), so_name, parameters);
JackLoadableInternalClient* client = new JackLoadableInternalClient2(fInstance, GetSynchroTable(), so_name, parameters);
assert(client); assert(client);
return InternalClientLoadAux(client, client_name, options, int_ref, status); return InternalClientLoadAux(client, client_name, options, int_ref, status);
} catch (...) { } catch (...) {


Loading…
Cancel
Save