Inheritance: MessageInfo
示例#1
0
        internal void SendMessage(Message message)
        {
            if (connectionState == ConnectionState.Disconnected)
            {
                throw new InvalidOperationException("Not connected");
            }

            // XXX: Clean up this validation
            if (message.From == transport.Network.LocalNode.NodeID && message.To != String.Empty &&
                Network.InsecureMessageTypes.IndexOf(message.Type) == -1)
            {
                if (!transport.Network.TrustedNodes.ContainsKey(message.To))
                {
                    throw new Exception("You cannot send messages to untrusted nodes." +
                                        Environment.NewLine + "   Type: " + message.Type +
                                        Environment.NewLine + "   From: " + message.From +
                                        Environment.NewLine + "   To: " + message.To +
                                        Environment.NewLine + "   MessageID: " + message.MessageID);
                }
            }

            AsyncCallback messageSentCallback = new AsyncCallback(MessageSent);

            SentMessageInfo info = new SentMessageInfo();

            byte[] messageBytes = message.GetAssembledData();
            transport.BeginSendMessage(messageBytes, messageSentCallback, info);

            info.Connection = this;
            info.Message    = message;
            Core.RaiseMessageSent(info);
        }
示例#2
0
        private void MessageSent(IAsyncResult asyncResult)
        {
            try {
                transport.EndSendMessage(asyncResult);

                SentMessageInfo info = (SentMessageInfo)asyncResult.AsyncState;
                info.Sent = true;
            } catch (Exception ex) {
                if (connectionState != ConnectionState.Disconnected)
                {
                    Disconnect(ex);
                }
                else
                {
                    Core.LoggingService.LogWarning("Tried to send a message after being disconnected");
                }
            }
        }
        internal void SendMessage(Message message)
        {
            if (connectionState == ConnectionState.Disconnected) {
                throw new InvalidOperationException("Not connected");
            }

            // XXX: Clean up this validation
            if (message.From == transport.Network.LocalNode.NodeID && message.To != String.Empty
                && Network.InsecureMessageTypes.IndexOf(message.Type) == -1) {
                if (!transport.Network.TrustedNodes.ContainsKey(message.To)) {
                    throw new Exception("You cannot send messages to untrusted nodes." +
                            Environment.NewLine + "   Type: " + message.Type +
                            Environment.NewLine + "   From: " + message.From +
                            Environment.NewLine + "   To: " + message.To +
                            Environment.NewLine + "   MessageID: " + message.MessageID);
                }
            }

            AsyncCallback messageSentCallback = new AsyncCallback(MessageSent);

            SentMessageInfo info = new SentMessageInfo ();

            byte[] messageBytes = message.GetAssembledData();
            transport.BeginSendMessage(messageBytes, messageSentCallback, info);

            info.Connection = this;
            info.Message = message;
            Core.RaiseMessageSent(info);
        }