private static void StartListening(Socket server)
        {
            EndPoint remoteEp = new IPEndPoint(IPAddress.Any, 0);

            while (true)
            {
                try
                {
                    var recv = 0;
                    var data = new byte[1024];
                    recv = server.ReceiveFrom(data, ref remoteEp);
                    var deserializedMessage = JsonConvert.DeserializeObject <Message>(Encoding.ASCII.GetString(data, 0, recv));

                    if (deserializedMessage.Header.Command != Command.Publish)
                    {
                        continue;
                    }
                    if (string.IsNullOrEmpty(deserializedMessage.Header.Topic))
                    {
                        continue;
                    }

                    var subscriberListForThisTopic = Subscribers.GetSubscribers(deserializedMessage.Header.Topic);

                    if (subscriberListForThisTopic == null)
                    {
                        return;
                    }

                    if (deserializedMessage.Content.SubscriptionId != null &&
                        deserializedMessage.Header.PublishToSubscriptionId)
                    {
                        var subscriber =
                            subscriberListForThisTopic.Single(
                                x => x.SubscriptionId == deserializedMessage.Content.SubscriptionId);
                        PublishMessage(deserializedMessage, subscriber);
                    }
                    else
                    {
                        foreach (var subscriber in subscriberListForThisTopic)
                        {
                            PublishMessage(deserializedMessage, subscriber);
                        }
                    }
                }
                catch
                {
                    // ignored
                }
            }
        }
Пример #2
0
        private static void StartListening(Socket server)
        {
            EndPoint remoteEp = new IPEndPoint(IPAddress.Any, 0);

            while (true)
            {
                var recv = 0;
                var data = new byte[1024];
                recv = server.ReceiveFrom(data, ref remoteEp);
                var message = JsonConvert.DeserializeObject <Message>(Encoding.ASCII.GetString(data, 0, recv));

                switch (message.Header.Command)
                {
                case Command.Subscribe:
                    Subscribers.AddSubscriber(message.Header.Topic, message.Content.SubscriptionId.Value, remoteEp);
                    break;

                case Command.Unsubscribe:
                    Subscribers.RemoveSubscriber(message.Header.Topic, message.Content.SubscriptionId.Value);
                    break;
                }
            }
        }
        private void MessageQeueConsumer()
        {
            while (true)
            {
                MessageServiceItem item;
                if (!MessageList.TryGetNextItem(out item))
                {
                    continue;
                }

                if (item.Message.Header.Timeout.HasValue && item.Message.Header.Timeout <= DateTime.Now)
                {
                    if (item.Message.Header.PublishToSubscriptionId && item.Message.Content.SubscriptionId.HasValue)
                    {
                        MessageList.RemoveItem(item.Message.Header.MessageNumber);
                        Subscribers.RemoveSubscriber(item.Message.Header.Topic, item.Message.Content.SubscriptionId.Value);
                    }
                    continue;
                }

                TryPublish(item);
            }
        }