private void SendConnectMessage() { MsmqConnectedClient client = new MsmqConnectedClient { Id = this.Id, QueuePath = $"FormatName:DIRECT=OS:{Environment.MachineName}\\private$\\{_localQueueName}", PublicKey = this.PublicKey }; MessageEnvelope env = new MessageEnvelope(); env.SenderId = Id; env.ServiceOp = HubServiceOperation.AddReceiver; env.Contents = client; Message msg = new Message(env); msg.Formatter = new XmlMessageFormatter(new Type[1] { typeof(MessageEnvelope) }); _remoteQueue.Send(msg); msg.Dispose(); }
public void AddReceiver(MsmqConnectedClient client) { MsmqConnectedClient existing = _clients.Single(client.Id); if (existing != null) { _clients.Remove(existing.Id); } _clients.Add(client); }
private void OnReceiveCompleted(object sender, ReceiveCompletedEventArgs e) { MessageQueue mq = (MessageQueue)sender; Message msg = mq.EndReceive(e.AsyncResult); try { MessageEnvelope env = (MessageEnvelope)msg.Body; switch (env.ServiceOp) { case HubServiceOperation.Send: if (env.IsSecure) { SecureMessageContainer container = (SecureMessageContainer)env.Contents; SendSecure(env.SenderId, container); } else { MessageHub.Message hubMsg = (MessageHub.Message)env.Contents; Send(env.SenderId, hubMsg); } break; case HubServiceOperation.AddReceiver: MsmqConnectedClient client = (MsmqConnectedClient)env.Contents; AddReceiver(client); break; case HubServiceOperation.RemoveReceiver: Guid clientId = (Guid)env.Contents; RemoveReceiver(clientId); break; } } finally { msg.Dispose(); mq.BeginReceive(); } }