diff --git a/windows/JackWinNamedPipe.cpp b/windows/JackWinNamedPipe.cpp index c0ed1447..b823c255 100644 --- a/windows/JackWinNamedPipe.cpp +++ b/windows/JackWinNamedPipe.cpp @@ -52,6 +52,30 @@ int JackWinNamedPipe::Write(void* data, int len) } } +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) +{ + 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; + } +} + /* See : http://answers.google.com/answers/threadview?id=430173 diff --git a/windows/JackWinNamedPipe.h b/windows/JackWinNamedPipe.h index 2b093b60..feb649f6 100644 --- a/windows/JackWinNamedPipe.h +++ b/windows/JackWinNamedPipe.h @@ -28,7 +28,7 @@ namespace Jack { -class JackWinNamedPipe : public JackChannelTransactionInterface +class JackWinNamedPipe : public detail::JackChannelTransactionInterface { protected: @@ -53,20 +53,24 @@ class JackWinNamedPipe : public JackChannelTransactionInterface \brief Client named pipe. */ -class JackWinNamedPipeClient : public JackWinNamedPipe, public JackRequestInterface +class JackWinNamedPipeClient : public detail::JackClientRequestInterface { private: int ConnectAux(); + HANDLE fNamedPipe; + char fName[256]; + public: - JackWinNamedPipeClient(): JackWinNamedPipe() + JackWinNamedPipeClient() {} - JackWinNamedPipeClient(HANDLE pipe, const char* name): JackWinNamedPipe(pipe) + JackWinNamedPipeClient(HANDLE pipe, const char* name) { strcpy(fName, name); + fNamedPipe = pipe; } virtual ~JackWinNamedPipeClient() @@ -75,6 +79,10 @@ class JackWinNamedPipeClient : public JackWinNamedPipe, public JackRequestInterf virtual int Connect(const char* dir, int which); virtual int Connect(const char* dir, const char* name, int which); virtual int Close(); + + int Read(void* data, int len); + int Write(void* data, int len); + virtual void SetReadTimeOut(long sec); virtual void SetWriteTimeOut(long sec); };