Esempio n. 1
0
        public async Task <RpcMessage?> Receive(CancellationToken cancellationToken)
        {
            var messagePart = new MemoryStream();

            while (IsOpen())
            {
                // Receive message from remote side
                var received = await webSocket.ReceiveAsync(buffer, cancellationToken);

                if (received.MessageType == WebSocketMessageType.Close)
                {
                    // Closed by remote peer
                    Log.Debug($"Connection closed by {remoteInfo}");
                    await webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "closed", CancellationToken.None);
                }
                else if (received.MessageType == WebSocketMessageType.Binary)
                {
                    // Received message
                    messagePart.Write(buffer.Array !, 0, received.Count);
                    if (received.EndOfMessage)
                    {
                        // Message is finished now
                        // Log.Trace($"Message completely received from {remoteInfo}, {buffer.Count} bytes");
                        var message = RpcMessage.FromData(messagePart.ToArray());
                        return(message);
                    }
                    else
                    {
                        // Wait for more data
                        Log.Trace($"Message part received from {remoteInfo}, {buffer.Count} bytes");
                    }
                }
            }
            return(null);
        }
Esempio n. 2
0
 public void IsRpcResult_Test()
 {
     Assert.IsFalse(RpcMessage.FromData(testMethodBytes).IsRpcResult());
     Assert.IsFalse(RpcMessage.FromData(testMethodBytes_NoParams).IsRpcResult());
     Assert.IsTrue(RpcMessage.FromData(testResultSuccessBytes).IsRpcResult());
     Assert.IsTrue(RpcMessage.FromData(testResultFailureBytes).IsRpcResult());
     Assert.IsTrue(RpcMessage.FromData(testResultFailureBytes_NoMessage).IsRpcResult());
 }
Esempio n. 3
0
        public void Decode_RpcMethod_Failure()
        {
            // With message
            var actual = RpcMessage.FromData(testResultFailureBytes).DecodeRpcResult();

            Assert.AreEqual(testResultFailure, actual);
            // Without message
            actual = RpcMessage.FromData(testResultFailureBytes_NoMessage).DecodeRpcResult();
            Assert.AreEqual(testResultFailure_NoMessage, actual);
        }
Esempio n. 4
0
        public void Decode_RpcMethod()
        {
            // With parameters
            var actual = RpcMessage.FromData(testMethodBytes).DecodeRpcMethod();

            Assert.AreEqual(testMethod, actual);
            // Without parameters
            actual = RpcMessage.FromData(testMethodBytes_NoParams).DecodeRpcMethod();
            Assert.AreEqual(testMethod_NoParams, actual);
        }
Esempio n. 5
0
        public void Decode_RpcResult_Success()
        {
            var actual = RpcMessage.FromData(testResultSuccessBytes).DecodeRpcResult();

            Assert.AreEqual(testResultSuccess, actual);
        }