internal static async Task <WebSocketApiResult> ReceiveApiMessage(this WebSocket socket, byte[] buffer, CancellationToken?cancellationToken = null) { if (cancellationToken == null) { cancellationToken = CancellationToken.None; } WebSocketStringResult res = await socket.ReceiveString(buffer, cancellationToken); var result = new WebSocketApiResult { SocketResult = res.SocketResult }; if (res.SocketResult.MessageType != WebSocketMessageType.Text) { result.JsonException = new JsonException("Can't read binary messages as JSON."); } else if (string.IsNullOrEmpty(res.Message)) { result.JsonException = new JsonException("The message was empty."); } else { try { result.Obj = JsonApiObject.Deserialize(res.Message); } catch (JsonException ex) { result.JsonException = ex; } } return(result); }