示例#1
0
        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);
        }
示例#2
0
        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");
            }
        }
示例#3
0
        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);
                        }
                    }
                }
            }
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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");
        }
示例#6
0
        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);
        }