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 } } }
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); } }