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