override protected void HandleReceivedMessage(Message message) { base.HandleReceivedMessage(message); Message response = null; switch (message.Type) { case MessageType.TRACE: _tracing2Client = true; HandleMessage?.Invoke(this, message); break; case MessageType.PING: response = CreatePingResponse(message); SendMessage(response); break; case MessageType.STATUS_REQUEST: response = CreateStatusResponse(message); SendMessage(response); break; case MessageType.SUBSCRIBE: if (message.HasValue("Subscriber")) { try { AddSubscriber(ConnectionManager.Subscriber.Parse(message.GetString("Subscriber"))); } catch (Exception e) { Tracing?.TraceEvent(TraceEventType.Error, 2000, e.Message); } } break; case MessageType.UNSUBSCRIBE: if (message.HasValue("Subscriber")) { RemoveSubscriber(message.GetString("Subscriber")); } break; default: int priorSize = ThreadExecutionManager.MaxQueueSize; ThreadExecutionManager.MaxQueueSize = 256; ThreadExecutionManager.Execute <Message>("HandleMessage-" + ID, HandleMessageDelegateWrapper, message); ThreadExecutionManager.MaxQueueSize = priorSize; break; } }
public void HandleClientMessage(Connection cnn, Chetch.Messaging.Message message) { //record this LogMessage(CMDataSource.MessageDirection.INBOUND, message); switch (message.Type) { case MessageType.SHUTDOWN: break; case MessageType.STATUS_RESPONSE: if (message.HasValue("ServerID")) { //send status request to all connected clients var clients = message.GetList <String>("Connections"); System.Diagnostics.Trace.WriteLine(String.Format("Server status response shows {0} client connections ...", clients.Count)); foreach (var cs in clients) { var data = cs.Split(' '); var clientName = data[1]; if (clientName != null && clientName != String.Empty) { CurrentClient.RequestClientConnectionStatus(clientName); System.Diagnostics.Trace.WriteLine("Requesting status of " + clientName); //System.Threading.Thread.Sleep(100); } } } break; default: break; } //ehd switch }
virtual protected bool Matches(Message message) { bool matched = true; if (Sender != null && message.Sender != null) { matched = Sender.Equals(message.Sender); if (!matched) { return(false); } } if (_types != null && _types.Count > 0) { matched = _types.Contains(message.Type); if (!matched) { return(false); } } if (_requiredKeys.Count > 0) { foreach (String k in _requiredKeys) { if (!message.HasValue(k)) { return(false); } } } if (_requiredVals.Count == _requiredKeys.Count) { for (int i = 0; i < _requiredVals.Count; i++) { String k = _requiredKeys[i]; Object rv = _requiredVals[i]; Object v = message.GetValue(k); if ((v == null && rv != null) || (v != null && !v.Equals(rv))) { return(false); } } } return(matched); }