示例#1
0
        private IEnumerable <Combinator> Exchange(Combinator combinator)
        {
            _session.Salt = _settings.NonceNewNonceXor;
            var oc = new SessionContainer(_session.SessionId, combinator);

            EncryptedMessage encMessage = _session.PrepareRpcCall(oc);
            var call = new TcpTransport(_connection.PacketNumber++, encMessage.Serialize());

            _connection.Write(call.Serialize());
            Trace.TraceInformation("#Send: {0}", combinator);

            var buffer = _connection.Read();

            if (buffer.Length == 0)
            {
                throw new DecodeException("Response is empty");
            }

            var result = new List <Combinator>();// ReSharper disable once LoopCanBeConvertedToQuery

            foreach (SessionContainer container in ProcessInputBuffer(buffer))
            {
                Combinator c = Unwrap(container.Combinator, container.SessionId, _session.SessionId, combinator.Descriptor.type);
                if (c != null)
                {
                    result.Add(c);
                }
            }
            return(result);
        }