public Task <Message> DigestAsync(PeerAddress remotePeer, DigestBuilder digestBuilder, ChannelCreator channelCreator) { sbyte command; if (digestBuilder.IsReturnBloomFilter) { command = Rpc.Commands.DigestBloomfilter.GetNr(); } else if (digestBuilder.IsReturnMetaValues) { command = Rpc.Commands.DigestMetaValues.GetNr(); } else if (digestBuilder.IsReturnAllBloomFilter) { command = Rpc.Commands.DigestAllBloomfilter.GetNr(); } else { command = Rpc.Commands.Digest.GetNr(); } Message.MessageType type; if (digestBuilder.IsAscending && digestBuilder.IsBloomFilterAnd) { type = Message.MessageType.Request1; } else if (!digestBuilder.IsAscending && digestBuilder.IsBloomFilterAnd) { type = Message.MessageType.Request2; } else if (!digestBuilder.IsAscending && !digestBuilder.IsBloomFilterAnd) { type = Message.MessageType.Request3; } else { type = Message.MessageType.Request4; } var message = CreateRequestMessage(remotePeer, command, type); if (digestBuilder.IsSign) { message.SetPublicKeyAndSign(digestBuilder.KeyPair); } if (digestBuilder.IsRange) { var keys = new List <Number640>(2); keys.Add(digestBuilder.From); keys.Add(digestBuilder.To); message.SetIntValue(digestBuilder.ReturnNr); message.SetKeyCollection(new KeyCollection(keys)); } else if (digestBuilder.Keys == null) { if (digestBuilder.LocationKey == null || digestBuilder.DomainKey == null) { throw new ArgumentException("Null not allowed in location or domain."); } message.SetKey(digestBuilder.LocationKey); message.SetKey(digestBuilder.DomainKey); if (digestBuilder.ContentKeys != null) { message.SetKeyCollection(new KeyCollection(digestBuilder.LocationKey, digestBuilder.DomainKey, digestBuilder.VersionKey, digestBuilder.ContentKeys)); } else { message.SetIntValue(digestBuilder.ReturnNr); if (digestBuilder.KeyBloomFilter != null || digestBuilder.ContentBloomFilter != null) { if (digestBuilder.KeyBloomFilter != null) { message.SetBloomFilter(digestBuilder.KeyBloomFilter); } if (digestBuilder.ContentBloomFilter != null) { message.SetBloomFilter(digestBuilder.ContentBloomFilter); } } } } else { message.SetKeyCollection(new KeyCollection(digestBuilder.Keys)); } var tcsResponse = new TaskCompletionSource <Message>(message); var requestHandler = new RequestHandler(tcsResponse, PeerBean, ConnectionBean, digestBuilder); if (!digestBuilder.IsForceUdp) { return(requestHandler.SendTcpAsync(channelCreator)); } return(requestHandler.SendUdpAsync(channelCreator)); }
public TcsDigest Digest(DigestBuilder builder) { throw new NotImplementedException(); }