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);
}

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)
{
char path_to_so[PATH_MAX + 1];
@@ -200,18 +185,6 @@ void JackLoadableInternalClient::Init(const char* so_name)
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");
if (!fFinish) {
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()
{
if (fFinish)
@@ -232,9 +243,10 @@ JackLoadableInternalClient::~JackLoadableInternalClient()
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;
if (JackInternalClient::Open(server_name, name, options, status) == 0) {
if (fInitialize((jack_client_t*)this, fObjectData) == 0) {
res = 0;
@@ -243,6 +255,23 @@ int JackLoadableInternalClient::Open(const char* server_name, const char* name,
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;
}



+ 41
- 6
common/JackInternalClient.h View File

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

private:
protected:

HANDLE fHandle;
InitializeCallback fInitialize;
InternalInitializeCallback fInternalInitialize;
FinishCallback fFinish;
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];
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;
void Init(const char* so_name);

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);



+ 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)
{
try {
JackLoadableInternalClient* client = new JackLoadableInternalClient(fInstance, GetSynchroTable(), so_name, objet_data);
JackLoadableInternalClient* client = new JackLoadableInternalClient1(fInstance, GetSynchroTable(), so_name, objet_data);
assert(client);
return InternalClientLoadAux(client, client_name, options, int_ref, status);
} 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)
{
try {
JackLoadableInternalClient* client = new JackLoadableInternalClient(fInstance, GetSynchroTable(), so_name, parameters);
JackLoadableInternalClient* client = new JackLoadableInternalClient2(fInstance, GetSynchroTable(), so_name, parameters);
assert(client);
return InternalClientLoadAux(client, client_name, options, int_ref, status);
} catch (...) {


Loading…
Cancel
Save