cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
mtsSocketProxyServer.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5 
6  Author(s): Peter Kazanzides
7  Created on: 2013-08-06
8 
9  (C) Copyright 2013-2014 Johns Hopkins University (JHU), All Rights Reserved.
10 
11 --- begin cisst license - do not edit ---
12 
13 This software is provided "as is" under an open source license, with
14 no warranty. The complete license can be found in license.txt and
15 http://www.cisst.org/cisst/license.txt.
16 
17 --- end cisst license ---
18 */
19 
20 
27 #ifndef _mtsSocketProxyServer_h
28 #define _mtsSocketProxyServer_h
29 
32 
34 
35 class FunctionVoidProxy;
36 class FunctionReadProxy;
37 class FunctionWriteProxy;
38 class FunctionQualifiedReadProxy;
39 class FunctionVoidReturnProxy;
40 class FunctionWriteReturnProxy;
41 class mtsEventSenderVoid;
42 class mtsEventSenderWrite;
43 class mtsProxySerializer;
44 class FinishedEventList;
45 
47 
49 {
51 public:
52  std::string Name;
53  std::string ComponentName;
54  std::string ProvidedInterfaceName;
55  unsigned short Port;
56 
58  mtsSocketProxyServerConstructorArg(const std::string &name, const std::string &componentName,
59  const std::string &providedInterfaceName, unsigned short port) :
60  mtsGenericObject(), Name(name), ComponentName(componentName), ProvidedInterfaceName(providedInterfaceName), Port(port) {}
62  Name(other.Name), ComponentName(other.ComponentName), ProvidedInterfaceName(other.ProvidedInterfaceName), Port(other.Port) {}
64 
65  void SerializeRaw(std::ostream & outputStream) const;
66  void DeSerializeRaw(std::istream & inputStream);
67 
68  void ToStream(std::ostream & outputStream) const;
69 
71  virtual void ToStreamRaw(std::ostream & outputStream, const char delimiter = ' ',
72  bool headerOnly = false, const std::string & headerPrefix = "") const;
73 
76  virtual bool FromStreamRaw(std::istream & inputStream, const char delimiter = ' ');
77 };
78 
80 
82 {
84 
85  protected:
86 
89 
93  typedef std::map<osaIPandPort, mtsProxySerializer *> ClientMapType;
94 
102 
106 
115 
116  // List of connected clients
118 
119  FinishedEventList *FinishedEvents;
120 
121  // For memory cleanup
122  std::vector<mtsCommandBase *> SpecialCommands;
123 
124  bool Init(const std::string &componentName, const std::string &providedInterfaceName);
125 
128  bool CreateServerProxy(const std::string & requiredInterfaceName, size_t providedMailboxSize);
129 
130  bool GetInterfaceDescription(mtsInterfaceProvidedDescription &desc) const;
131  bool GetHandleVoid(const std::string &commandName, std::string &handleString) const;
132  bool GetHandleRead(const std::string &commandName, std::string &handleString) const;
133  bool GetHandleWrite(const std::string &commandName, std::string &handleString) const;
134  bool GetHandleQualifiedRead(const std::string &commandName, std::string &handleString) const;
135  bool GetHandleVoidReturn(const std::string &commandName, std::string &handleString) const;
136  bool GetHandleWriteReturn(const std::string &commandName, std::string &handleString) const;
137  void EventEnable(const std::string &eventHandleAndName);
138  void EventDisable(const std::string &eventHandleAndName);
139 
140  void AddSpecialCommands(void);
141  mtsExecutionResult GetInitData(std::string &outputArgSerialized, mtsProxySerializer *serializer) const;
142 
143  public:
150  mtsSocketProxyServer(const std::string & name, const std::string & componentName,
151  const std::string & providedInterfaceName, unsigned short port);
152 
154 
156  virtual ~mtsSocketProxyServer();
157 
158  void Configure(const std::string &) {}
159 
160  void Startup(void);
161 
162  void Run(void);
163 
164  void Cleanup(void);
165 
170  mtsProxySerializer *GetSerializerForClient(const osaIPandPort &ip_port) const;
171 
175  mtsProxySerializer *GetSerializerForCurrentClient(void) const;
176 
177  mtsCommandWriteBase *AllocateFinishedEvent(const std::string &eventHandle);
178 
179 };
180 
182 
183 #endif // _mtsSocketProxyServer_h
FunctionReadProxyMapType FunctionReadProxyMap
Definition: mtsSocketProxyServer.h:109
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
~mtsSocketProxyServerConstructorArg()
Definition: mtsSocketProxyServer.h:63
std::string ComponentName
Definition: mtsSocketProxyServer.h:53
std::string ProvidedInterfaceName
Definition: mtsSocketProxyServer.h:54
mtsSocketProxyServerConstructorArg()
Definition: mtsSocketProxyServer.h:57
ClientMapType ClientMap
Definition: mtsSocketProxyServer.h:117
EventGeneratorWriteProxyMapType EventGeneratorWriteProxyMap
Definition: mtsSocketProxyServer.h:114
cmnNamedMap< FunctionVoidProxy > FunctionVoidProxyMapType
Definition: mtsSocketProxyServer.h:96
virtual void SerializeRaw(std::ostream &outputStream) const
mtsSocketProxyServerConstructorArg(const mtsSocketProxyServerConstructorArg &other)
Definition: mtsSocketProxyServer.h:61
virtual void DeSerializeRaw(std::istream &inputStream)
cmnNamedMap< FunctionQualifiedReadProxy > FunctionQualifiedReadProxyMapType
Definition: mtsSocketProxyServer.h:99
virtual void ToStream(std::ostream &outputStream) const
CMN_DECLARE_SERVICES_INSTANTIATION(mtsSocketProxyServerConstructorArg)
cmnNamedMap< FunctionReadProxy > FunctionReadProxyMapType
Definition: mtsSocketProxyServer.h:98
Base class for data object in cisstMultiTask.
Definition: mtsGenericObject.h:56
const int CMN_DYNAMIC_CREATION_ONEARG
Definition: cmnClassRegisterMacros.h:333
virtual bool FromStreamRaw(std::istream &inputStream, const char delimiter= ' ')
Defines a continuously executing task.
virtual void Startup(void)
Definition: mtsComponent.h:262
Definition: mtsSocketProxyServer.h:48
cmnNamedMap< FunctionWriteReturnProxy > FunctionWriteReturnProxyMapType
Definition: mtsSocketProxyServer.h:101
std::map< osaIPandPort, mtsProxySerializer * > ClientMapType
Definition: mtsSocketProxyServer.h:93
FunctionVoidProxyMapType FunctionVoidProxyMap
Definition: mtsSocketProxyServer.h:107
cmnNamedMap< mtsEventSenderVoid > EventGeneratorVoidProxyMapType
Definition: mtsSocketProxyServer.h:104
mtsSocketProxyServerConstructorArg(const std::string &name, const std::string &componentName, const std::string &providedInterfaceName, unsigned short port)
Definition: mtsSocketProxyServer.h:58
cmnNamedMap< FunctionWriteProxy > FunctionWriteProxyMapType
Definition: mtsSocketProxyServer.h:97
Definition: mtsCommandWriteBase.h:40
Definition: mtsInterfaceCommon.h:928
std::string Name
Definition: mtsSocketProxyServer.h:52
FinishedEventList * FinishedEvents
Definition: mtsSocketProxyServer.h:119
cmnNamedMap< FunctionVoidReturnProxy > FunctionVoidReturnProxyMapType
Definition: mtsSocketProxyServer.h:100
FunctionWriteProxyMapType FunctionWriteProxyMap
Definition: mtsSocketProxyServer.h:108
Forward declarations and #define for cisstMultiTask.
std::vector< mtsCommandBase * > SpecialCommands
Definition: mtsSocketProxyServer.h:122
#define CMN_DECLARE_SERVICES(hasDynamicCreation, lod)
Definition: cmnClassRegisterMacros.h:116
FunctionWriteReturnProxyMapType FunctionWriteReturnProxyMap
Definition: mtsSocketProxyServer.h:112
unsigned short Port
Definition: mtsSocketProxyServer.h:55
Definition: mtsExecutionResult.h:34
virtual void Run(void)=0
FunctionQualifiedReadProxyMapType FunctionQualifiedReadProxyMap
Definition: mtsSocketProxyServer.h:110
EventGeneratorVoidProxyMapType EventGeneratorVoidProxyMap
Definition: mtsSocketProxyServer.h:113
Declaration of osaSocketThis is a cross-platform socket library with basic support for UDP (datagram)...
Definition: osaSocket.h:156
Definition: osaSocket.h:171
osaSocket Socket
Definition: mtsSocketProxyServer.h:87
void Configure(const std::string &)
Definition: mtsSocketProxyServer.h:158
Rules of exporting.
Definition: mtsTaskContinuous.h:77
mtsInterfaceProvidedDescription InterfaceDescription
Definition: mtsSocketProxyServer.h:88
const int CMN_DYNAMIC_CREATION
Definition: cmnClassRegisterMacros.h:331
cmnNamedMap< mtsEventSenderWrite > EventGeneratorWriteProxyMapType
Definition: mtsSocketProxyServer.h:105
virtual void ToStreamRaw(std::ostream &outputStream, const char delimiter= ' ', bool headerOnly=false, const std::string &headerPrefix="") const
virtual void Cleanup(void)
Definition: mtsComponent.h:267
#define CMN_LOG_ALLOW_DEFAULT
Definition: cmnLogLoD.h:76
FunctionVoidReturnProxyMapType FunctionVoidReturnProxyMap
Definition: mtsSocketProxyServer.h:111
Definition: mtsSocketProxyServer.h:81