private static void FireAndForget(GenericRequestor proxy, GenericRecord genericRecord)
        {
            var request = new GenericRecord(MailResponder.Protocol.Messages["fireandforget"].Request);

            request.Add("message", genericRecord);

            proxy.Request("fireandforget", request);
        }
        public void Init()
        {
            mailResponder = new MailResponder();

            server = new SocketServer("localhost", 0, mailResponder);
            server.Start();

            transceiver = new SocketTransceiver("localhost", server.Port);
            proxy       = new GenericRequestor(transceiver, MailResponder.Protocol);
        }
        public void TestMultipleConnectionsCount()
        {
            Reset();

            var transceiver2 = new SocketTransceiver("localhost", server.Port);

            var proxy2 = new GenericRequestor(transceiver2, MailResponder.Protocol);

            FireAndForget(proxy, CreateMessage());
            FireAndForget(proxy2, CreateMessage());
            transceiver2.Disconnect();
        }
        //[TestInitialize]
        public void Init()
        {
            mailResponder = new MailResponder();

            server = new HttpListenerServer(new string[] { URL }, mailResponder);
            server.Start();

            HttpWebRequest requestTemplate = (HttpWebRequest)HttpWebRequest.Create(URL);

            requestTemplate.Timeout = 6000;
            requestTemplate.Proxy   = null;
            transceiver             = new HttpTransceiver(requestTemplate);
            proxy = new GenericRequestor(transceiver, MailResponder.Protocol);
        }
        public void TestSingleRpc()
        {
            Transceiver t = new LocalTransceiver(new TestResponder(protocol));
            var         p = new GenericRecord(protocol.Messages["m"].Request);

            p.Add("x", "hello");
            var r = new GenericRequestor(t, protocol);

            for (int x = 0; x < 5; x++)
            {
                object request = r.Request("m", p);
                Assert.AreEqual("there", request);
            }
        }
        // AVRO-625 [Test]
        // Currently, SocketTransceiver does not permit out-of-order requests on a stateful connection.
        public void Test()
        {
            var waitLatch       = new CountdownLatch(1);
            var simpleResponder = new SimpleResponder(waitLatch);

            server = new SocketServer("localhost", 0, simpleResponder);

            server.Start();

            int port = server.Port;

            transceiver = new SocketTransceiver("localhost", port);
            proxy       = new GenericRequestor(transceiver, SimpleResponder.Protocol);

            // Step 1:
            proxy.GetRemote(); // force handshake

            new Thread(x =>
            {
                // Step 2a:
                waitLatch.Wait();

                var ack = new GenericRecord(SimpleResponder.Protocol.Messages["ack"].Request);
                // Step 2b:
                proxy.Request("ack", ack);
            }).Start();


            /*
             * 3. Execute the Client.hello("wait") RPC, which will block until the
             *    Client.ack() call has completed in the background thread.
             */

            var request = new GenericRecord(SimpleResponder.Protocol.Messages["hello"].Request);

            request.Add("greeting", "wait");

            var response = (string)proxy.Request("hello", request);

            // 4. If control reaches here, both RPCs have executed concurrently
            Assert.AreEqual("wait", response);
        }
        private async Task <GenericContext> Request(GenericContext rpcContext, CancellationToken token)
        {
            using (var requestData = new FrameStream())
                using (var encoder = new BinaryEncoder(requestData))
                {
                    if (DoHandshake())
                    {
                        if (rpcContext.HandshakeRequest == null)
                        {
                            rpcContext.HandshakeRequest = NewHandshakeRequest((MD5)Protocol.MD5, (MD5)RemoteProtocol.MD5);
                        }
                        HANDSHAKE_REQUEST_WRITER.Write(encoder, rpcContext.HandshakeRequest);
                    }

                    META_WRITER.Write(encoder, EMPTY_META);
                    encoder.WriteString(rpcContext.MessageName);
                    _protocol.WriteRequest(encoder, rpcContext.MessageName, rpcContext.RequestParameters);
                    encoder.WriteBytes(END_OF_FRAME);
                    requestData.Seek(0, SeekOrigin.Begin);

                    using (var responseData = await _tranceiver.RequestAsync(rpcContext.MessageName, requestData, token))
                        using (var decode = new BinaryDecoder(responseData))
                        {
                            responseData.Seek(0, SeekOrigin.Begin);

                            if (DoHandshake())
                            {
                                rpcContext.HandshakeResponse = HANDSHAKE_RESPONSE_READER.Read(decode);
                                _handshakePending            = rpcContext.HandshakeResponse.match == HandshakeMatch.NONE;

                                var remoteProtocol = default(AvroProtocol);
                                if (rpcContext.HandshakeResponse.match == HandshakeMatch.CLIENT || rpcContext.HandshakeResponse.match == HandshakeMatch.NONE)
                                {
                                    remoteProtocol = AvroParser.ReadProtocol(rpcContext.HandshakeResponse.serverProtocol);
                                    _protocol      = new GenericRequestor(Protocol, remoteProtocol);
                                }

                                if (rpcContext.HandshakeResponse.match == HandshakeMatch.NONE)
                                {
                                    rpcContext.HandshakeRequest.serverHash     = (MD5)remoteProtocol.MD5;
                                    rpcContext.HandshakeRequest.clientProtocol = Protocol.ToAvroCanonical();
                                    _protocol  = new GenericRequestor(Protocol, remoteProtocol);
                                    rpcContext = await Request(rpcContext, token);
                                }
                            }

                            rpcContext.Metadata = META_READER.Read(decode);
                            rpcContext.IsError  = decode.ReadBoolean();
                            if (rpcContext.IsError)
                            {
                                rpcContext.Error = _protocol.ReadError <object>(decode, rpcContext.MessageName);
                            }
                            else
                            {
                                rpcContext.Response = _protocol.ReadResponse <object>(decode, rpcContext.MessageName);
                            }


                            return(rpcContext);
                        }
                }
        }
 public GenericClient(AvroProtocol protocol, ITranceiver tranceiver)
     : base(protocol, tranceiver)
 {
     RemoteProtocol = protocol;
     _protocol      = new GenericRequestor(Protocol, RemoteProtocol);
 }