Update default jack location on windows, per new installers
[jack2.git] / windows / JackWinNamedPipe.h
blob0e3510f75babda356dfb1cb71745167838fac0a5
1 /*
2 Copyright (C) 2004-2008 Grame
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published by
6 the Free Software Foundation; either version 2.1 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 #ifndef __JackWinNamedPipe__
22 #define __JackWinNamedPipe__
24 #ifdef __MINGW32__
25 #include <winsock2.h>
26 #endif
27 #include <windows.h>
29 #include "JackChannel.h"
31 namespace Jack
34 class JackWinNamedPipeAux
37 protected:
39 HANDLE fNamedPipe;
40 char fName[256];
42 int ReadAux(void* data, int len);
43 int WriteAux(void* data, int len);
45 public:
47 JackWinNamedPipeAux(): fNamedPipe(INVALID_HANDLE_VALUE)
49 JackWinNamedPipeAux(HANDLE pipe): fNamedPipe(pipe)
51 virtual ~JackWinNamedPipeAux()
57 class JackWinNamedPipe : public JackWinNamedPipeAux, public detail::JackChannelTransactionInterface
60 public:
62 JackWinNamedPipe():JackWinNamedPipeAux()
64 JackWinNamedPipe(HANDLE pipe):JackWinNamedPipeAux(pipe)
66 virtual ~JackWinNamedPipe()
69 virtual int Read(void* data, int len)
71 return ReadAux(data, len);
73 virtual int Write(void* data, int len)
75 return WriteAux(data, len);
79 /*!
80 \brief Client named pipe.
83 class JackWinNamedPipeClient : public JackWinNamedPipeAux, public detail::JackClientRequestInterface
86 protected:
88 int ConnectAux();
90 public:
92 JackWinNamedPipeClient():JackWinNamedPipeAux()
94 JackWinNamedPipeClient(HANDLE pipe, const char* name):JackWinNamedPipeAux(pipe)
96 strcpy(fName, name);
99 virtual ~JackWinNamedPipeClient()
102 virtual int Connect(const char* dir, int which);
103 virtual int Connect(const char* dir, const char* name, int which);
104 virtual int Close();
106 virtual int Read(void* data, int len)
108 return ReadAux(data, len);
110 virtual int Write(void* data, int len)
112 return WriteAux(data, len);
115 virtual void SetReadTimeOut(long sec);
116 virtual void SetWriteTimeOut(long sec);
118 virtual void SetNonBlocking(bool onoff);
121 class JackWinAsyncNamedPipeClient : public JackWinNamedPipeClient
123 enum kIOState {kIdle = 0, kConnecting, kReading, kWriting};
125 private:
127 bool fPendingIO;
128 kIOState fIOState;
129 OVERLAPPED fOverlap;
131 public:
133 JackWinAsyncNamedPipeClient();
134 JackWinAsyncNamedPipeClient(HANDLE pipe, const char* name, bool pending);
135 virtual ~JackWinAsyncNamedPipeClient();
137 virtual int Read(void* data, int len);
138 virtual int Write(void* data, int len);
140 HANDLE GetEvent()
142 return (HANDLE)fOverlap.hEvent;
145 kIOState GetIOState()
147 return fIOState;
150 bool GetPending()
152 return fPendingIO;
155 int FinishIO();
159 \brief Server named pipe.
162 class JackWinNamedPipeServer : public JackWinNamedPipe
164 private:
166 int BindAux();
168 public:
170 JackWinNamedPipeServer(): JackWinNamedPipe()
172 virtual ~JackWinNamedPipeServer()
175 virtual int Bind(const char* dir, int which);
176 virtual int Bind(const char* dir, const char* name, int which);
177 virtual bool Accept();
178 virtual JackWinNamedPipeClient* AcceptClient();
179 int Close();
183 \brief Server async named pipe.
186 class JackWinAsyncNamedPipeServer : public JackWinNamedPipeServer
189 private:
191 int BindAux();
193 public:
195 JackWinAsyncNamedPipeServer(): JackWinNamedPipeServer()
197 virtual ~JackWinAsyncNamedPipeServer()
200 int Bind(const char* dir, int which);
201 int Bind(const char* dir, const char* name, int which);
202 bool Accept();
203 JackWinNamedPipeClient* AcceptClient();
204 int Close();
207 } // end of namespace
210 #endif