Jack2  1.9.9
JackWinNamedPipeServerChannel.h
1 /*
2  Copyright (C) 2004-2008 Grame
3 
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.
8 
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.
13 
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.
17 
18  */
19 
20 #ifndef __JackWinNamedPipeServerChannel__
21 #define __JackWinNamedPipeServerChannel__
22 
23 #include "JackWinNamedPipe.h"
24 #include "JackPlatformPlug.h"
25 #include "JackConstants.h"
26 #include "JackRequestDecoder.h"
27 #include <list>
28 
29 namespace Jack
30 {
31 
32 class JackServer;
33 
35 {
36 
37  private:
38 
40  JackRequestDecoder* fDecoder;
41  JackServer* fServer;
42  JackThread fThread;
43  int fRefNum;
44 
46  void ClientRemove(detail::JackChannelTransactionInterface* socket, int refnum);
47 
48  void ClientKill();
49 
50  static HANDLE fMutex;
51 
52  public:
53 
55  virtual ~JackClientPipeThread();
56 
57  int Open(JackServer* server); // Open the Server/Client connection
58  void Close(); // Close the Server/Client connection
59 
60  // JackRunnableInterface interface
61  bool Execute();
62 
63  // To be used for find out if the object can be deleted
64  bool IsRunning()
65  {
66  return (fRefNum >= 0);
67  }
68 
69 };
70 
76 {
77 
78  private:
79 
80  JackWinNamedPipeServer fRequestListenPipe; // Pipe to create request socket for the client
81  JackServer* fServer;
82  JackThread fThread; // Thread to execute the event loop
83  char fServerName[JACK_SERVER_CONTROL_NAME_SIZE];
84 
85  std::list<JackClientPipeThread*> fClientList;
86 
87  void ClientAdd(JackWinNamedPipeClient* pipe);
88 
89  bool ClientListen();
90  bool ClientAccept();
91 
92  public:
93 
96 
97  int Open(const char* server_name, JackServer* server); // Open the Server/Client connection
98  void Close(); // Close the Server/Client connection
99 
100  int Start();
101  void Stop();
102 
103  // JackRunnableInterface interface
104  bool Init();
105  bool Execute();
106 };
107 
108 
109 } // end of namespace
110 
111 #endif
112 
The base class for runnable objects, that have an Init and Execute method to be called in a threa...
Definition: JackThread.h:34
NewClient request.
Definition: JackRequest.h:238
NewClient result.
Definition: JackRequest.h:278
The Jack server.
Definition: JackServer.h:46
Darwin threads. Real-time threads are actually &quot;time constraint&quot; threads.