示例#1
0
        /// <summary>
        /// Sends data directly to a peer. Make sure you have set up a reply handler.
        /// This is an RPC.
        /// </summary>
        /// <param name="remotePeer">The remote peer to store the data.</param>
        /// <param name="sendDirectBuilder"></param>
        /// <returns></returns>
        public RequestHandler SendInternal(PeerAddress remotePeer, ISendDirectBuilder sendDirectBuilder)
        {
            var message = CreateRequestMessage(remotePeer, Rpc.Commands.DirectData.GetNr(),
                sendDirectBuilder.IsRaw ? Message.Message.MessageType.Request1 : Message.Message.MessageType.Request2);

            var tcsResponse = new TaskCompletionSource<Message.Message>(message);

            if (sendDirectBuilder.IsSign)
            {
                message.SetPublicKeyAndSign(sendDirectBuilder.KeyPair);
            }
            message.SetStreaming(sendDirectBuilder.IsStreaming);

            if (sendDirectBuilder.IsRaw)
            {
                message.SetBuffer(sendDirectBuilder.Buffer);
            }
            else
            {
                try
                {
                    sbyte[] me = Utils.Utils.EncodeObject(sendDirectBuilder.Object);
                    message.SetBuffer(new Message.Buffer(Unpooled.WrappedBuffer(me)));
                }
                catch (Exception ex)
                {
                    tcsResponse.SetException(ex);
                }
            }

            return new RequestHandler(tcsResponse, PeerBean, ConnectionBean, sendDirectBuilder);
        }
示例#2
0
        /// <summary>
        /// Sends data directly to a peer. Make sure you have set up a reply handler.
        /// This is an RPC.
        /// </summary>
        /// <param name="remotePeer">The remote peer to store the data.</param>
        /// <param name="sendDirectBuilder"></param>
        /// <returns></returns>
        public RequestHandler SendInternal(PeerAddress remotePeer, ISendDirectBuilder sendDirectBuilder)
        {
            var message = CreateRequestMessage(remotePeer, Rpc.Commands.DirectData.GetNr(),
                                               sendDirectBuilder.IsRaw ? Message.Message.MessageType.Request1 : Message.Message.MessageType.Request2);

            var tcsResponse = new TaskCompletionSource <Message.Message>(message);

            if (sendDirectBuilder.IsSign)
            {
                message.SetPublicKeyAndSign(sendDirectBuilder.KeyPair);
            }
            message.SetStreaming(sendDirectBuilder.IsStreaming);

            if (sendDirectBuilder.IsRaw)
            {
                message.SetBuffer(sendDirectBuilder.Buffer);
            }
            else
            {
                try
                {
                    sbyte[] me = Utils.Utils.EncodeObject(sendDirectBuilder.Object);
                    message.SetBuffer(new Message.Buffer(Unpooled.WrappedBuffer(me)));
                }
                catch (Exception ex)
                {
                    tcsResponse.SetException(ex);
                }
            }

            return(new RequestHandler(tcsResponse, PeerBean, ConnectionBean, sendDirectBuilder));
        }
示例#3
0
        public Task<Message.Message> SendAsync(PeerAddress remotePeer, ISendDirectBuilder sendDirectBuilder,
            ChannelCreator channelCreator)
        {
            var requestHandler = SendInternal(remotePeer, sendDirectBuilder);

            if (!sendDirectBuilder.IsForceUdp)
            {
                return requestHandler.SendTcpAsync(channelCreator);
            }
            return requestHandler.SendUdpAsync(channelCreator);
        }
示例#4
0
        public Task <Message.Message> SendAsync(PeerAddress remotePeer, ISendDirectBuilder sendDirectBuilder,
                                                ChannelCreator channelCreator)
        {
            var requestHandler = SendInternal(remotePeer, sendDirectBuilder);

            if (!sendDirectBuilder.IsForceUdp)
            {
                return(requestHandler.SendTcpAsync(channelCreator));
            }
            return(requestHandler.SendUdpAsync(channelCreator));
        }