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