Пример #1
0
        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();
        }
Пример #2
0
        public void AddReceiver(MsmqConnectedClient client)
        {
            MsmqConnectedClient existing = _clients.Single(client.Id);

            if (existing != null)
            {
                _clients.Remove(existing.Id);
            }

            _clients.Add(client);
        }
Пример #3
0
        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();
            }
        }