private void OnStompCommand_Subscribe(StompServerClient client, StompMessage message) { StompPath path = null; String destination = message["destination"]; if (StompLogger.CanLogDebug) { StompLogger.LogDebug(client.ToString() + " subscribes to " + destination); } lock (this) { if (_paths.ContainsKey(destination)) { path = _paths[destination]; } else { path = new StompPath(destination); path.OnLastClientRemoved += new StompPath.OnLastClientRemovedDelegate(path_OnLastClientRemoved); _paths[destination] = path; } } path.AddClient(client); }
void path_OnLastClientRemoved(StompPath path) { lock (this) { if (_paths.ContainsKey(path.Name)) { _paths.Remove(path.Name); } } if (StompLogger.CanLogDebug) { StompLogger.LogDebug("Path " + path.Name + " destroyed"); } }
private void OnStompCommand_Send(StompServerClient client, StompMessage message) { StompPath path = null; String destination = message["destination"]; if (StompLogger.CanLogDebug) { StompLogger.LogDebug(client.ToString() + " sent data to " + destination); } lock (this) { if (_paths.ContainsKey(destination)) { path = _paths[destination]; } } if (path != null) { List <StompServerClient> pathClients = path.Clients; message["message-id"] = Guid.NewGuid().ToString(); message.Command = "MESSAGE"; foreach (StompServerClient pathClient in pathClients) { try { if (StompLogger.CanLogDebug) { StompLogger.LogDebug("Sending " + message.Command + " to " + pathClient.ToString()); } pathClient.Send(message); } catch (Exception ex) { if (StompLogger.CanLogException) { StompLogger.LogException(pathClient.ToString() + " has thrown an exception while sending data", ex); } } } } }
private void OnStompCommand_Unsubscribe(StompServerClient client, StompMessage message) { StompPath path = null; String destination = message["destination"]; if (StompLogger.CanLogDebug) { StompLogger.LogDebug(client.ToString() + " unsubscribes from " + destination); } lock (this) { if (_paths.ContainsKey(destination)) { path = _paths[destination]; } } if (path != null) { path.RemoveClient(client); } }
void path_OnLastClientRemoved(StompPath path) { lock (this) { if (_paths.ContainsKey(path.Name)) _paths.Remove(path.Name); } if (StompLogger.CanLogDebug) StompLogger.LogDebug("Path " + path.Name + " destroyed"); }
private void OnStompCommand_Subscribe(StompServerClient client, StompMessage message) { StompPath path = null; String destination = message["destination"]; if (StompLogger.CanLogDebug) StompLogger.LogDebug(client.ToString() + " subscribes to " + destination); lock (this) { if (_paths.ContainsKey(destination)) path = _paths[destination]; else { path = new StompPath(destination); path.OnLastClientRemoved += new StompPath.OnLastClientRemovedDelegate(path_OnLastClientRemoved); _paths[destination] = path; } } path.AddClient(client); }