CPN
Computational Process Networks
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
CPN::RemoteContextServer Class Referenceabstract

the server for the remote context. More...

#include <RemoteContextServer.h>

+ Inheritance diagram for CPN::RemoteContextServer:
+ Collaboration diagram for CPN::RemoteContextServer:

Public Member Functions

 RemoteContextServer ()
 
virtual ~RemoteContextServer ()
 
virtual void Terminate ()
 
bool IsTerminated () const
 
int DebugLevel () const
 
int DebugLevel (int level)
 

Protected Member Functions

void DispatchMessage (const std::string &sender, const Variant &msg)
 Process the given message. More...
 
virtual void SendMessage (const std::string &recipient, const Variant &msg)=0
 Send the given message to the given client. More...
 
virtual void BroadcastMessage (const Variant &msg)=0
 Broadcast a message to all clients. More...
 
virtual void LogMessage (const std::string &msg)=0
 Log a message. More...
 
void dbprintf (int level, const char *fmt,...)
 

Private Types

typedef std::map< Key_t, Variant > DataMap
 
typedef std::map< std::string,
Key_t
NameKeyMap
 

Private Member Functions

void SetupKernel (const std::string &sender, const Variant &msg)
 
void SignalKernelStart (const Variant &msg)
 
void SignalKernelEnd (const Variant &msg)
 
void GetKernelInfo (const std::string &sender, const Variant &msg)
 
void CreateNodeKey (const std::string &sender, const Variant &msg)
 
void SignalNodeStart (const Variant &msg)
 
void SignalNodeEnd (const Variant &msg)
 
void GetNodeInfo (const std::string &sender, const Variant &msg)
 
void GetNumNodeLive (const std::string &sender, const Variant &msg)
 
void GetCreateEndpointKey (const std::string &sender, const Variant &msg)
 
void GetEndpointInfo (const std::string &sender, const Variant &msg)
 
void ConnectEndpoints (const Variant &msg)
 
Key_t NewKey ()
 
void RouteKernelMessage (const Variant &msg)
 
Variant NewBroadcastMessage ()
 

Private Attributes

DataMap datamap
 
NameKeyMap kernelmap
 
NameKeyMap nodemap
 
int debuglevel
 
bool shutdown
 
unsigned numlivenodes
 
Key_t keycount
 

Detailed Description

the server for the remote context.

Implementors only need to override SendMessage, BroadcastMessage, and LogMessage. then call DispatchMessage for all messages from the clients.

Definition at line 114 of file RemoteContextServer.h.

Member Typedef Documentation

typedef std::map<Key_t, Variant> CPN::RemoteContextServer::DataMap
private

Definition at line 170 of file RemoteContextServer.h.

typedef std::map<std::string, Key_t> CPN::RemoteContextServer::NameKeyMap
private

Definition at line 172 of file RemoteContextServer.h.

Constructor & Destructor Documentation

CPN::RemoteContextServer::RemoteContextServer ( )
CPN::RemoteContextServer::~RemoteContextServer ( )
virtual

Definition at line 37 of file RemoteContextServer.cc.

37  {
38  }

Member Function Documentation

virtual void CPN::RemoteContextServer::BroadcastMessage ( const Variant &  msg)
protectedpure virtual

Broadcast a message to all clients.

Parameters
msgthe message to send to all clients

Implemented in CPN::RemoteContextDaemon.

Referenced by SignalKernelEnd(), SignalKernelStart(), SignalNodeEnd(), SignalNodeStart(), and Terminate().

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::ConnectEndpoints ( const Variant &  msg)
private

Definition at line 331 of file RemoteContextServer.cc.

References datamap.

Referenced by DispatchMessage().

331  {
332  Key_t wkey = msg["writerkey"].AsNumber<Key_t>();
333  Key_t rkey = msg["readerkey"].AsNumber<Key_t>();
334  std::string qname = msg["qname"].AsString();
335  datamap[wkey]["readerkey"] = rkey;
336  datamap[rkey]["writerkey"] = wkey;
337  datamap[rkey]["qname"] = qname;
338  datamap[wkey]["qname"] = qname;
339  }
uint64_t Key_t
Definition: common.h:79

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::CreateNodeKey ( const std::string &  sender,
const Variant &  msg 
)
private

Definition at line 197 of file RemoteContextServer.cc.

References datamap, dbprintf(), NewKey(), nodemap, and SendMessage().

Referenced by DispatchMessage().

197  {
198  std::string nodename = msg["name"].AsString();
199  Variant reply(Variant::MapType);
200  reply["msgid"] = msg["msgid"];
201  reply["msgtype"] = "reply";
202  if (nodemap.find(nodename) != nodemap.end()) {
203  reply["success"] = false;
204  } else {
205  Key_t nodekey = NewKey();
206  Variant nodeinfo(Variant::MapType);
207  nodeinfo["name"] = nodename;
208  nodeinfo["key"] = nodekey;
209  nodeinfo["kernelkey"] = msg["kernelkey"];
210  nodeinfo["started"] = false;
211  nodeinfo["dead"] = false;
212  nodeinfo["type"] = "nodeinfo";
213  nodeinfo["endpoints"] = Variant::MapType;
214  dbprintf(2, "Node %s created\n", nodename.c_str());
215  nodemap[nodename] = nodekey;
216  datamap[nodekey] = nodeinfo;
217  reply["success"] = true;
218  reply["nodeinfo"] = nodeinfo.Copy();
219  }
220  SendMessage(sender, reply);
221  }
virtual void SendMessage(const std::string &recipient, const Variant &msg)=0
Send the given message to the given client.
uint64_t Key_t
Definition: common.h:79
void dbprintf(int level, const char *fmt,...)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::dbprintf ( int  level,
const char *  fmt,
  ... 
)
protected
int CPN::RemoteContextServer::DebugLevel ( ) const
inline

Definition at line 126 of file RemoteContextServer.h.

References debuglevel.

int CPN::RemoteContextServer::DebugLevel ( int  level)
inline

Definition at line 127 of file RemoteContextServer.h.

References debuglevel.

127 { return debuglevel = level; }
void CPN::RemoteContextServer::DispatchMessage ( const std::string &  sender,
const Variant &  msg 
)
protected

Process the given message.

Parameters
sendera string id for the client
msgthe message that the client sent

Definition at line 49 of file RemoteContextServer.cc.

References ASSERT, ConnectEndpoints(), CreateNodeKey(), dbprintf(), GetCreateEndpointKey(), GetEndpointInfo(), GetKernelInfo(), GetNodeInfo(), GetNumNodeLive(), IsTerminated(), LogMessage(), CPN::RCTXMT_CONNECT_ENDPOINTS, CPN::RCTXMT_CREATE_NODE, CPN::RCTXMT_CREATE_NODE_KEY, CPN::RCTXMT_CREATE_QUEUE, CPN::RCTXMT_CREATE_READER, CPN::RCTXMT_CREATE_WRITER, CPN::RCTXMT_GET_CREATE_READER_KEY, CPN::RCTXMT_GET_CREATE_WRITER_KEY, CPN::RCTXMT_GET_KERNEL_INFO, CPN::RCTXMT_GET_NODE_INFO, CPN::RCTXMT_GET_NUM_NODE_LIVE, CPN::RCTXMT_GET_READER_INFO, CPN::RCTXMT_GET_WRITER_INFO, CPN::RCTXMT_LOG, CPN::RCTXMT_SETUP_KERNEL, CPN::RCTXMT_SIGNAL_KERNEL_END, CPN::RCTXMT_SIGNAL_KERNEL_START, CPN::RCTXMT_SIGNAL_NODE_END, CPN::RCTXMT_SIGNAL_NODE_START, CPN::RCTXMT_TERMINATE, RouteKernelMessage(), SetupKernel(), SignalKernelEnd(), SignalKernelStart(), SignalNodeEnd(), SignalNodeStart(), and Terminate().

49  {
50  dbprintf(4, "msg:%s:%s\n", sender.c_str(), libvariant::SerializeJSON(msg).c_str());
51  if (!msg.IsMap()) { return; }
52  if (IsTerminated()) {
53  return;
54  }
55  RCTXMT_t type = msg["type"].AsNumber<RCTXMT_t>();
56  switch (type) {
58  SetupKernel(sender, msg);
59  break;
61  SignalKernelStart(msg);
62  break;
64  SignalKernelEnd(msg);
65  break;
67  GetKernelInfo(sender, msg);
68  break;
72  case RCTXMT_CREATE_NODE:
73  RouteKernelMessage(msg);
74  break;
76  CreateNodeKey(sender, msg);
77  break;
79  SignalNodeStart(msg);
80  break;
82  SignalNodeEnd(msg);
83  break;
85  GetNodeInfo(sender, msg);
86  break;
88  GetNumNodeLive(sender, msg);
89  break;
91  GetCreateEndpointKey(sender, msg);
92  break;
94  GetEndpointInfo(sender, msg);
95  break;
97  GetCreateEndpointKey(sender, msg);
98  break;
100  GetEndpointInfo(sender, msg);
101  break;
103  ConnectEndpoints(msg);
104  break;
105  case RCTXMT_TERMINATE:
106  Terminate();
107  break;
108  case RCTXMT_LOG:
109  LogMessage(sender + ":" + msg["msg"].AsString());
110  break;
111  default:
112  ASSERT(false);
113  }
114  }
RCTXMT_t
RCTXMT Remote Context Message Type These are the message types that the remote context uses to send i...
Definition: RCTXMT.h:33
void GetNodeInfo(const std::string &sender, const Variant &msg)
void ConnectEndpoints(const Variant &msg)
void GetKernelInfo(const std::string &sender, const Variant &msg)
virtual void LogMessage(const std::string &msg)=0
Log a message.
void GetNumNodeLive(const std::string &sender, const Variant &msg)
void dbprintf(int level, const char *fmt,...)
void SignalKernelStart(const Variant &msg)
void GetEndpointInfo(const std::string &sender, const Variant &msg)
void SignalNodeEnd(const Variant &msg)
void RouteKernelMessage(const Variant &msg)
void SignalNodeStart(const Variant &msg)
void CreateNodeKey(const std::string &sender, const Variant &msg)
void SetupKernel(const std::string &sender, const Variant &msg)
void SignalKernelEnd(const Variant &msg)
void GetCreateEndpointKey(const std::string &sender, const Variant &msg)
#define ASSERT(exp,...)

+ Here is the call graph for this function:

void CPN::RemoteContextServer::GetCreateEndpointKey ( const std::string &  sender,
const Variant &  msg 
)
private

Definition at line 281 of file RemoteContextServer.cc.

References ASSERT, datamap, NewKey(), and SendMessage().

Referenced by DispatchMessage().

281  {
282  std::string name = msg["name"].AsString();
283  Variant reply;
284  reply["msgid"] = msg["msgid"];
285  reply["msgtype"] = "reply";
286  reply["success"] = false;
287  Key_t nodekey = msg["nodekey"].AsNumber<Key_t>();
288  DataMap::iterator nodeentry = datamap.find(nodekey);
289  if (nodeentry != datamap.end()) {
290  Variant nodeinfo = nodeentry->second;
291  Variant epinfo;
292  Key_t epkey;
293  if (nodeinfo["endpoints"].Contains(name)) {
294  epkey = nodeinfo["endpoints"][name].AsNumber<Key_t>();
295  epinfo = datamap[epkey];
296  ASSERT(epinfo["type"].AsString() == "endpointinfo");
297  } else {
298  epkey = NewKey();
299  nodeinfo["endpoints"][name] = epkey;
300  epinfo = Variant(Variant::MapType);
301  epinfo["key"] = epkey;
302  epinfo["name"] = name;
303  epinfo["nodekey"] = nodekey;
304  epinfo["kernelkey"] = nodeinfo["kernelkey"];
305  epinfo["live"] = true;
306  epinfo["type"] = "endpointinfo";
307  datamap[epkey] = epinfo;
308  }
309  reply["endpointinfo"] = epinfo.Copy();
310  reply["success"] = true;
311  }
312  SendMessage(sender, reply);
313  }
virtual void SendMessage(const std::string &recipient, const Variant &msg)=0
Send the given message to the given client.
uint64_t Key_t
Definition: common.h:79
#define ASSERT(exp,...)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::GetEndpointInfo ( const std::string &  sender,
const Variant &  msg 
)
private

Definition at line 315 of file RemoteContextServer.cc.

References ASSERT, datamap, and SendMessage().

Referenced by DispatchMessage().

315  {
316  Key_t epkey = msg["key"].AsNumber<Key_t>();
317  Variant reply;
318  reply["msgid"] = msg["msgid"];
319  reply["msgtype"] = "reply";
320  reply["success"] = false;
321  DataMap::iterator entry = datamap.find(epkey);
322  if (entry != datamap.end()) {
323  reply["success"] = true;
324  reply["endpointinfo"] = entry->second.Copy();
325  ASSERT(reply["endpointinfo"]["type"].AsString() == "endpointinfo");
326  }
327  SendMessage(sender, reply);
328 
329  }
virtual void SendMessage(const std::string &recipient, const Variant &msg)=0
Send the given message to the given client.
uint64_t Key_t
Definition: common.h:79
#define ASSERT(exp,...)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::GetKernelInfo ( const std::string &  sender,
const Variant &  msg 
)
private

Definition at line 172 of file RemoteContextServer.cc.

References ASSERT, datamap, kernelmap, and SendMessage().

Referenced by DispatchMessage().

172  {
173  Key_t kernelkey;
174  Variant reply(Variant::MapType);
175  reply["msgtype"] = "reply";
176  reply["msgid"] = msg["msgid"];
177  reply["success"] = false;
178  if (msg.Contains("name")) {
179  NameKeyMap::iterator entry = kernelmap.find(msg["name"].AsString());
180  if (entry == kernelmap.end()) {
181  SendMessage(sender, reply);
182  return;
183  }
184  kernelkey = entry->second;
185  } else {
186  kernelkey = msg["key"].AsNumber<Key_t>();
187  }
188  DataMap::iterator entry = datamap.find(kernelkey);
189  if (entry != datamap.end()) {
190  ASSERT(entry->second["type"].AsString() == "kernelinfo");
191  reply["success"] = true;
192  reply["kernelinfo"] = entry->second.Copy();
193  }
194  SendMessage(sender, reply);
195  }
virtual void SendMessage(const std::string &recipient, const Variant &msg)=0
Send the given message to the given client.
uint64_t Key_t
Definition: common.h:79
#define ASSERT(exp,...)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::GetNodeInfo ( const std::string &  sender,
const Variant &  msg 
)
private

Definition at line 247 of file RemoteContextServer.cc.

References ASSERT, datamap, nodemap, and SendMessage().

Referenced by DispatchMessage().

247  {
248  Key_t nodekey;
249  Variant reply(Variant::MapType);
250  reply["msgtype"] = "reply";
251  reply["msgid"] = msg["msgid"];
252  reply["success"] = false;
253  if (msg.Contains("name")) {
254  NameKeyMap::iterator entry = nodemap.find(msg["name"].AsString());
255  if (entry == nodemap.end()) {
256  SendMessage(sender, reply);
257  return;
258  }
259  nodekey = entry->second;
260  } else {
261  nodekey = msg["key"].AsNumber<Key_t>();
262  }
263  DataMap::iterator entry = datamap.find(nodekey);
264  if (entry != datamap.end()) {
265  reply["nodeinfo"] = entry->second.Copy();
266  ASSERT(reply["nodeinfo"]["type"].AsString() == "nodeinfo");
267  reply["success"] = true;
268  }
269  SendMessage(sender, reply);
270  }
virtual void SendMessage(const std::string &recipient, const Variant &msg)=0
Send the given message to the given client.
uint64_t Key_t
Definition: common.h:79
#define ASSERT(exp,...)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::GetNumNodeLive ( const std::string &  sender,
const Variant &  msg 
)
private

Definition at line 272 of file RemoteContextServer.cc.

References numlivenodes, and SendMessage().

Referenced by DispatchMessage().

272  {
273  Variant reply(Variant::MapType);
274  reply["msgid"] = msg["msgid"];
275  reply["msgtype"] = "reply";
276  reply["numlivenodes"] = numlivenodes;
277  reply["success"] = true;
278  SendMessage(sender, reply);
279  }
virtual void SendMessage(const std::string &recipient, const Variant &msg)=0
Send the given message to the given client.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool CPN::RemoteContextServer::IsTerminated ( ) const
inline
Returns
whether or not the context is in the shutdown state.

Definition at line 125 of file RemoteContextServer.h.

References shutdown.

Referenced by CPN::RemoteContextDaemon::BroadcastMessage(), DispatchMessage(), CPN::RemoteContextDaemon::Run(), CPN::RemoteContextDaemon::SendMessage(), and CPN::RemoteContextDaemon::Terminate().

125 { return shutdown; }

+ Here is the caller graph for this function:

virtual void CPN::RemoteContextServer::LogMessage ( const std::string &  msg)
protectedpure virtual

Log a message.

Parameters
msgthe message to be logged

Implemented in CPN::RemoteContextDaemon.

Referenced by DispatchMessage().

+ Here is the caller graph for this function:

Variant CPN::RemoteContextServer::NewBroadcastMessage ( )
private

Definition at line 352 of file RemoteContextServer.cc.

References numlivenodes.

Referenced by SignalKernelEnd(), SignalKernelStart(), SignalNodeEnd(), and SignalNodeStart().

352  {
353  Variant msg;
354  msg["msgtype"] = "broadcast";
355  msg["numlivenodes"] = numlivenodes;
356  return msg;
357  }

+ Here is the caller graph for this function:

Key_t CPN::RemoteContextServer::NewKey ( )
private

Definition at line 341 of file RemoteContextServer.cc.

References keycount.

Referenced by CreateNodeKey(), GetCreateEndpointKey(), and SetupKernel().

341  {
342  // 0 is reserved
343  return ++keycount;
344  }

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::RouteKernelMessage ( const Variant &  msg)
private

Definition at line 346 of file RemoteContextServer.cc.

References datamap, and SendMessage().

Referenced by DispatchMessage().

346  {
347  Key_t kernelkey = msg["kernelkey"].AsNumber<Key_t>();
348  Variant kernelinfo = datamap[kernelkey];
349  SendMessage(kernelinfo["client"].AsString(), msg);
350  }
virtual void SendMessage(const std::string &recipient, const Variant &msg)=0
Send the given message to the given client.
uint64_t Key_t
Definition: common.h:79

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

virtual void CPN::RemoteContextServer::SendMessage ( const std::string &  recipient,
const Variant &  msg 
)
protectedpure virtual

Send the given message to the given client.

Parameters
recipientthe id (previously used in DispatchMessage sender)
msgthe message to be sent to the client

Implemented in CPN::RemoteContextDaemon.

Referenced by CreateNodeKey(), GetCreateEndpointKey(), GetEndpointInfo(), GetKernelInfo(), GetNodeInfo(), GetNumNodeLive(), RouteKernelMessage(), and SetupKernel().

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::SetupKernel ( const std::string &  sender,
const Variant &  msg 
)
private

Definition at line 123 of file RemoteContextServer.cc.

References datamap, dbprintf(), kernelmap, NewKey(), and SendMessage().

Referenced by DispatchMessage().

123  {
124  std::string name = msg["name"].AsString();
125  Variant reply(Variant::MapType);
126  reply["msgid"] = msg["msgid"];
127  reply["msgtype"] = "reply";
128  if (kernelmap.find(name) != kernelmap.end()) {
129  reply["success"] = false;
130  return;
131  } else {
132  Variant kernelinfo(Variant::MapType);
133  Key_t kernelkey = NewKey();
134  kernelinfo["key"] = kernelkey;
135  kernelinfo["name"] = name;
136  kernelinfo["hostname"] = msg["hostname"];
137  kernelinfo["servname"] = msg["servname"];
138  kernelinfo["live"] = false;
139  kernelinfo["type"] = "kernelinfo";
140  kernelinfo["client"] = sender;
141  datamap.insert(std::make_pair(kernelkey, kernelinfo));
142  kernelmap.insert(std::make_pair(name, kernelkey));
143  dbprintf(2, "Kernel %s created\n", name.c_str());
144  reply["success"] = true;
145  reply["kernelinfo"] = kernelinfo.Copy();
146  }
147  SendMessage(sender, reply);
148  }
virtual void SendMessage(const std::string &recipient, const Variant &msg)=0
Send the given message to the given client.
uint64_t Key_t
Definition: common.h:79
void dbprintf(int level, const char *fmt,...)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::SignalKernelEnd ( const Variant &  msg)
private

Definition at line 161 of file RemoteContextServer.cc.

References ASSERT, BroadcastMessage(), datamap, dbprintf(), and NewBroadcastMessage().

Referenced by DispatchMessage().

161  {
162  Key_t kernelkey = msg["key"].AsNumber<Key_t>();
163  Variant kernelinfo = datamap[kernelkey];
164  ASSERT(kernelinfo["type"].AsString() == "kernelinfo");
165  kernelinfo["live"] = false;
166  dbprintf(2, "Kernel %s stopped\n", kernelinfo["name"].AsString().c_str());
167  Variant notice = NewBroadcastMessage();
168  notice["kernelinfo"] = kernelinfo.Copy();
169  BroadcastMessage(notice);
170  }
uint64_t Key_t
Definition: common.h:79
void dbprintf(int level, const char *fmt,...)
virtual void BroadcastMessage(const Variant &msg)=0
Broadcast a message to all clients.
#define ASSERT(exp,...)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::SignalKernelStart ( const Variant &  msg)
private

Definition at line 150 of file RemoteContextServer.cc.

References ASSERT, BroadcastMessage(), datamap, dbprintf(), and NewBroadcastMessage().

Referenced by DispatchMessage().

150  {
151  Key_t kernelkey = msg["key"].AsNumber<Key_t>();
152  Variant kernelinfo = datamap[kernelkey];
153  ASSERT(kernelinfo["type"].AsString() == "kernelinfo");
154  kernelinfo["live"] = true;
155  dbprintf(2, "Kernel %s started\n", kernelinfo["name"].AsString().c_str());
156  Variant notice = NewBroadcastMessage();
157  notice["kernelinfo"] = kernelinfo.Copy();
158  BroadcastMessage(notice);
159  }
uint64_t Key_t
Definition: common.h:79
void dbprintf(int level, const char *fmt,...)
virtual void BroadcastMessage(const Variant &msg)=0
Broadcast a message to all clients.
#define ASSERT(exp,...)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::SignalNodeEnd ( const Variant &  msg)
private

Definition at line 235 of file RemoteContextServer.cc.

References ASSERT, BroadcastMessage(), datamap, dbprintf(), NewBroadcastMessage(), and numlivenodes.

Referenced by DispatchMessage().

235  {
236  --numlivenodes;
237  Key_t nodekey = msg["key"].AsNumber<Key_t>();
238  Variant nodeinfo = datamap[nodekey];
239  ASSERT(nodeinfo["type"].AsString() == "nodeinfo");
240  nodeinfo["dead"] = true;
241  dbprintf(2, "Node %s stopped\n", nodeinfo["name"].AsString().c_str());
242  Variant notice = NewBroadcastMessage();
243  notice["nodeinfo"] = nodeinfo.Copy();
244  BroadcastMessage(notice);
245  }
uint64_t Key_t
Definition: common.h:79
void dbprintf(int level, const char *fmt,...)
virtual void BroadcastMessage(const Variant &msg)=0
Broadcast a message to all clients.
#define ASSERT(exp,...)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::SignalNodeStart ( const Variant &  msg)
private

Definition at line 223 of file RemoteContextServer.cc.

References ASSERT, BroadcastMessage(), datamap, dbprintf(), NewBroadcastMessage(), and numlivenodes.

Referenced by DispatchMessage().

223  {
224  ++numlivenodes;
225  Key_t nodekey = msg["key"].AsNumber<Key_t>();
226  Variant nodeinfo = datamap[nodekey];
227  ASSERT(nodeinfo["type"].AsString() == "nodeinfo");
228  nodeinfo["started"] = true;
229  dbprintf(2, "Node %s started\n", nodeinfo["name"].AsString().c_str());
230  Variant notice = NewBroadcastMessage();
231  notice["nodeinfo"] = nodeinfo.Copy();
232  BroadcastMessage(notice);
233  }
uint64_t Key_t
Definition: common.h:79
void dbprintf(int level, const char *fmt,...)
virtual void BroadcastMessage(const Variant &msg)=0
Broadcast a message to all clients.
#define ASSERT(exp,...)

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void CPN::RemoteContextServer::Terminate ( )
virtual

Cause the context to go into the shutdown state.

Reimplemented in CPN::RemoteContextDaemon.

Definition at line 116 of file RemoteContextServer.cc.

References BroadcastMessage(), CPN::RCTXMT_TERMINATE, and shutdown.

Referenced by DispatchMessage(), and CPN::RemoteContextDaemon::Terminate().

116  {
117  Variant msg(Variant::MapType);
118  msg["type"] = RCTXMT_TERMINATE;
119  BroadcastMessage(msg);
120  shutdown = true;
121  }
virtual void BroadcastMessage(const Variant &msg)=0
Broadcast a message to all clients.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Member Data Documentation

DataMap CPN::RemoteContextServer::datamap
private
int CPN::RemoteContextServer::debuglevel
private

Definition at line 176 of file RemoteContextServer.h.

Referenced by dbprintf(), and DebugLevel().

NameKeyMap CPN::RemoteContextServer::kernelmap
private

Definition at line 173 of file RemoteContextServer.h.

Referenced by GetKernelInfo(), and SetupKernel().

Key_t CPN::RemoteContextServer::keycount
private

Definition at line 180 of file RemoteContextServer.h.

Referenced by NewKey().

NameKeyMap CPN::RemoteContextServer::nodemap
private

Definition at line 174 of file RemoteContextServer.h.

Referenced by CreateNodeKey(), and GetNodeInfo().

unsigned CPN::RemoteContextServer::numlivenodes
private
bool CPN::RemoteContextServer::shutdown
private

Definition at line 177 of file RemoteContextServer.h.

Referenced by IsTerminated(), and Terminate().


The documentation for this class was generated from the following files: