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); }
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()); }
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); }
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); }
public void Decode_RpcResult_Success() { var actual = RpcMessage.FromData(testResultSuccessBytes).DecodeRpcResult(); Assert.AreEqual(testResultSuccess, actual); }