git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4689 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.9.9.5
| @@ -25,7 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||||
| namespace Jack | namespace Jack | ||||
| { | { | ||||
| JackGenericClientChannel::JackGenericClientChannel():fClient(NULL) | |||||
| JackGenericClientChannel::JackGenericClientChannel() | |||||
| {} | {} | ||||
| JackGenericClientChannel::~JackGenericClientChannel() | JackGenericClientChannel::~JackGenericClientChannel() | ||||
| @@ -39,7 +39,6 @@ class JackGenericClientChannel : public detail::JackClientChannelInterface | |||||
| protected: | protected: | ||||
| detail::JackClientRequestInterface* fRequest; | detail::JackClientRequestInterface* fRequest; | ||||
| JackClient* fClient; | |||||
| void ServerSyncCall(JackRequest* req, JackResult* res, int* result); | void ServerSyncCall(JackRequest* req, JackResult* res, int* result); | ||||
| void ServerAsyncCall(JackRequest* req, JackResult* res, int* result); | void ServerAsyncCall(JackRequest* req, JackResult* res, int* result); | ||||
| @@ -27,7 +27,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
| #include "JackServer.h" | #include "JackServer.h" | ||||
| #include "JackEngineControl.h" | #include "JackEngineControl.h" | ||||
| #include "JackClientControl.h" | #include "JackClientControl.h" | ||||
| #include "JackInternalClientChannel.h" | #include "JackInternalClientChannel.h" | ||||
| #include "JackGenericClientChannel.h" | |||||
| #include "JackTools.h" | #include "JackTools.h" | ||||
| #include <assert.h> | #include <assert.h> | ||||
| @@ -56,6 +59,7 @@ SERVER_EXPORT JackSynchro* GetSynchroTable() | |||||
| JackInternalClient::JackInternalClient(JackServer* server, JackSynchro* table): JackClient(table) | JackInternalClient::JackInternalClient(JackServer* server, JackSynchro* table): JackClient(table) | ||||
| { | { | ||||
| fChannel = new JackInternalClientChannel(server); | fChannel = new JackInternalClientChannel(server); | ||||
| //fChannel = new JackGenericClientChannel(); | |||||
| } | } | ||||
| JackInternalClient::~JackInternalClient() | JackInternalClient::~JackInternalClient() | ||||
| @@ -98,7 +102,6 @@ int JackInternalClient::Open(const char* server_name, const char* name, int uuid | |||||
| return 0; | return 0; | ||||
| error: | error: | ||||
| fChannel->Stop(); | |||||
| fChannel->Close(); | fChannel->Close(); | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| @@ -44,12 +44,6 @@ class JackInternalClientChannel : public detail::JackClientChannelInterface | |||||
| virtual ~JackInternalClientChannel() | virtual ~JackInternalClientChannel() | ||||
| {} | {} | ||||
| // Open the Server/Client connection | |||||
| virtual int Open(const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) | |||||
| { | |||||
| return 0; | |||||
| } | |||||
| void ClientCheck(const char* name, int uuid, char* name_res, int protocol, int options, int* status, int* result, int open) | void ClientCheck(const char* name, int uuid, char* name_res, int protocol, int options, int* status, int* result, int open) | ||||
| { | { | ||||
| *result = fEngine->ClientCheck(name, uuid, name_res, protocol, options, status); | *result = fEngine->ClientCheck(name, uuid, name_res, protocol, options, status); | ||||
| @@ -28,6 +28,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||||
| namespace Jack | namespace Jack | ||||
| { | { | ||||
| class JackClient; | |||||
| /*! | /*! | ||||
| \brief JackClientChannel using sockets. | \brief JackClientChannel using sockets. | ||||
| */ | */ | ||||
| @@ -40,6 +42,7 @@ class JackSocketClientChannel : public JackGenericClientChannel, public JackRunn | |||||
| JackServerSocket fNotificationListenSocket; // Socket listener for server notification | JackServerSocket fNotificationListenSocket; // Socket listener for server notification | ||||
| JackClientSocket* fNotificationSocket; // Socket for server notification | JackClientSocket* fNotificationSocket; // Socket for server notification | ||||
| JackThread fThread; // Thread to execute the event loop | JackThread fThread; // Thread to execute the event loop | ||||
| JackClient* fClient; | |||||
| public: | public: | ||||
| @@ -28,7 +28,7 @@ | |||||
| namespace Jack | namespace Jack | ||||
| { | { | ||||
| int JackWinNamedPipe::Read(void* data, int len) | |||||
| int JackWinNamedPipeAux::ReadAux(void* data, int len) | |||||
| { | { | ||||
| DWORD read; | DWORD read; | ||||
| BOOL res = ReadFile(fNamedPipe, data, len, &read, NULL); | BOOL res = ReadFile(fNamedPipe, data, len, &read, NULL); | ||||
| @@ -40,31 +40,7 @@ int JackWinNamedPipe::Read(void* data, int len) | |||||
| } | } | ||||
| } | } | ||||
| int JackWinNamedPipe::Write(void* data, int len) | |||||
| { | |||||
| DWORD written; | |||||
| BOOL res = WriteFile(fNamedPipe, data, len, &written, NULL); | |||||
| if (res && written == (DWORD)len) { | |||||
| return 0; | |||||
| } else { | |||||
| jack_error("Cannot write named pipe name = %s err = %ld", fName, GetLastError()); | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| int JackWinNamedPipeClient::Read(void* data, int len) | |||||
| { | |||||
| DWORD read; | |||||
| BOOL res = ReadFile(fNamedPipe, data, len, &read, NULL); | |||||
| if (res && read == (DWORD)len) { | |||||
| return 0; | |||||
| } else { | |||||
| jack_error("Cannot read named pipe name = %s err = %ld", fName, GetLastError()); | |||||
| return -1; | |||||
| } | |||||
| } | |||||
| int JackWinNamedPipeClient::Write(void* data, int len) | |||||
| int JackWinNamedPipeAux::WriteAux(void* data, int len) | |||||
| { | { | ||||
| DWORD written; | DWORD written; | ||||
| BOOL res = WriteFile(fNamedPipe, data, len, &written, NULL); | BOOL res = WriteFile(fNamedPipe, data, len, &written, NULL); | ||||
| @@ -28,7 +28,7 @@ | |||||
| namespace Jack | namespace Jack | ||||
| { | { | ||||
| class JackWinNamedPipe : public detail::JackChannelTransactionInterface | |||||
| class JackWinNamedPipeAux | |||||
| { | { | ||||
| protected: | protected: | ||||
| @@ -36,41 +36,61 @@ class JackWinNamedPipe : public detail::JackChannelTransactionInterface | |||||
| HANDLE fNamedPipe; | HANDLE fNamedPipe; | ||||
| char fName[256]; | char fName[256]; | ||||
| int ReadAux(void* data, int len); | |||||
| int WriteAux(void* data, int len); | |||||
| public: | public: | ||||
| JackWinNamedPipe(): fNamedPipe(INVALID_HANDLE_VALUE) | |||||
| JackWinNamedPipeAux(): fNamedPipe(INVALID_HANDLE_VALUE) | |||||
| {} | |||||
| JackWinNamedPipeAux(HANDLE pipe): fNamedPipe(pipe) | |||||
| {} | {} | ||||
| JackWinNamedPipe(HANDLE pipe): fNamedPipe(pipe) | |||||
| virtual ~JackWinNamedPipeAux() | |||||
| {} | |||||
| }; | |||||
| class JackWinNamedPipe : public JackWinNamedPipeAux, public detail::JackChannelTransactionInterface | |||||
| { | |||||
| public: | |||||
| JackWinNamedPipe():JackWinNamedPipeAux() | |||||
| {} | |||||
| JackWinNamedPipe(HANDLE pipe):JackWinNamedPipeAux(pipe) | |||||
| {} | {} | ||||
| virtual ~JackWinNamedPipe() | virtual ~JackWinNamedPipe() | ||||
| {} | {} | ||||
| virtual int Read(void* data, int len); | |||||
| virtual int Write(void* data, int len); | |||||
| virtual int Read(void* data, int len) | |||||
| { | |||||
| return ReadAux(data, len); | |||||
| } | |||||
| virtual int Write(void* data, int len) | |||||
| { | |||||
| return WriteAux(data, len); | |||||
| } | |||||
| }; | }; | ||||
| /*! | /*! | ||||
| \brief Client named pipe. | \brief Client named pipe. | ||||
| */ | */ | ||||
| class JackWinNamedPipeClient : public detail::JackClientRequestInterface | |||||
| class JackWinNamedPipeClient : public JackWinNamedPipeAux, public detail::JackClientRequestInterface | |||||
| { | { | ||||
| protected: | protected: | ||||
| int ConnectAux(); | int ConnectAux(); | ||||
| HANDLE fNamedPipe; | |||||
| char fName[256]; | |||||
| public: | public: | ||||
| JackWinNamedPipeClient() | |||||
| JackWinNamedPipeClient():JackWinNamedPipeAux() | |||||
| {} | {} | ||||
| JackWinNamedPipeClient(HANDLE pipe, const char* name) | |||||
| JackWinNamedPipeClient(HANDLE pipe, const char* name):JackWinNamedPipeAux(pipe) | |||||
| { | { | ||||
| strcpy(fName, name); | strcpy(fName, name); | ||||
| fNamedPipe = pipe; | |||||
| } | } | ||||
| virtual ~JackWinNamedPipeClient() | virtual ~JackWinNamedPipeClient() | ||||
| @@ -80,8 +100,14 @@ class JackWinNamedPipeClient : public detail::JackClientRequestInterface | |||||
| virtual int Connect(const char* dir, const char* name, int which); | virtual int Connect(const char* dir, const char* name, int which); | ||||
| virtual int Close(); | virtual int Close(); | ||||
| int Read(void* data, int len); | |||||
| int Write(void* data, int len); | |||||
| virtual int Read(void* data, int len) | |||||
| { | |||||
| return ReadAux(data, len); | |||||
| } | |||||
| virtual int Write(void* data, int len) | |||||
| { | |||||
| return WriteAux(data, len); | |||||
| } | |||||
| virtual void SetReadTimeOut(long sec); | virtual void SetReadTimeOut(long sec); | ||||
| virtual void SetWriteTimeOut(long sec); | virtual void SetWriteTimeOut(long sec); | ||||
| @@ -29,6 +29,8 @@ | |||||
| namespace Jack | namespace Jack | ||||
| { | { | ||||
| class JackClient; | |||||
| /*! | /*! | ||||
| \brief JackClientChannel using pipes. | \brief JackClientChannel using pipes. | ||||
| */ | */ | ||||
| @@ -40,6 +42,7 @@ class JackWinNamedPipeClientChannel : public JackGenericClientChannel, public Ja | |||||
| JackWinNamedPipeServer fNotificationListenPipe; // Pipe listener for server notification | JackWinNamedPipeServer fNotificationListenPipe; // Pipe listener for server notification | ||||
| JackThread fThread; // Thread to execute the event loop | JackThread fThread; // Thread to execute the event loop | ||||
| JackClient* fClient; | |||||
| public: | public: | ||||