00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __JackInternalClient__
00022 #define __JackInternalClient__
00023
00024 #include "JackClient.h"
00025 #include "JackClientControl.h"
00026 #include "driver_interface.h"
00027
00028 namespace Jack
00029 {
00030
00031 struct JackEngineControl;
00032
00037 class JackInternalClient : public JackClient
00038 {
00039
00040 private:
00041
00042 JackClientControl fClientControl;
00044 public:
00045
00046 JackInternalClient(JackServer* server, JackSynchro* table);
00047 virtual ~JackInternalClient();
00048
00049 int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status);
00050
00051 JackGraphManager* GetGraphManager() const;
00052 JackEngineControl* GetEngineControl() const;
00053 JackClientControl* GetClientControl() const;
00054
00055 static JackGraphManager* fGraphManager;
00056 static JackEngineControl* fEngineControl;
00057 };
00058
00063 #ifdef WIN32
00064
00065 #include <windows.h>
00066 #define HANDLE HINSTANCE
00067 #define LoadJackModule(name) LoadLibrary((name));
00068 #define UnloadJackModule(handle) FreeLibrary((handle));
00069 #define GetJackProc(handle, name) GetProcAddress((handle), (name));
00070
00071 #else
00072
00073 #include <dlfcn.h>
00074 #define HANDLE void*
00075 #define LoadJackModule(name) dlopen((name), RTLD_NOW | RTLD_LOCAL);
00076 #define UnloadJackModule(handle) dlclose((handle));
00077 #define GetJackProc(handle, name) dlsym((handle), (name));
00078 #define PrintLoadError(so_name) jack_log("error loading %s err = %s", so_name, dlerror());
00079
00080 #endif
00081
00082 typedef int (*InitializeCallback)(jack_client_t*, const char*);
00083 typedef int (*InternalInitializeCallback)(jack_client_t*, const JSList* params);
00084 typedef void (*FinishCallback)(void *);
00085 typedef jack_driver_desc_t * (*JackDriverDescFunction) ();
00086
00087 class JackLoadableInternalClient : public JackInternalClient
00088 {
00089
00090 protected:
00091
00092 HANDLE fHandle;
00093 FinishCallback fFinish;
00094 JackDriverDescFunction fDescriptor;
00095
00096 public:
00097
00098 JackLoadableInternalClient(JackServer* server, JackSynchro* table)
00099 :JackInternalClient(server, table), fHandle(NULL), fFinish(NULL), fDescriptor(NULL)
00100 {}
00101 virtual ~JackLoadableInternalClient();
00102
00103 virtual int Init(const char* so_name);
00104
00105 };
00106
00107 class JackLoadableInternalClient1 : public JackLoadableInternalClient
00108 {
00109
00110 private:
00111
00112 InitializeCallback fInitialize;
00113 char fObjectData[JACK_LOAD_INIT_LIMIT];
00114
00115 public:
00116
00117 JackLoadableInternalClient1(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data);
00118 virtual ~JackLoadableInternalClient1()
00119 {}
00120
00121 int Init(const char* so_name);
00122 int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status);
00123
00124 };
00125
00126 class JackLoadableInternalClient2 : public JackLoadableInternalClient
00127 {
00128
00129 private:
00130
00131 InternalInitializeCallback fInitialize;
00132 const JSList* fParameters;
00133
00134 public:
00135
00136 JackLoadableInternalClient2(JackServer* server, JackSynchro* table, const char* so_name, const JSList* parameters);
00137 virtual ~JackLoadableInternalClient2()
00138 {}
00139
00140 int Init(const char* so_name);
00141 int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status);
00142
00143 };
00144
00145
00146 }
00147
00148 #endif