public async Task SendMessage(WebSocketMessage msg) { string szMsg = msg.ToString(); var bMsg = Encoding.UTF8.GetBytes(szMsg); var compressedMsg = GZipHelper.Compress(bMsg); using (var cts = new CancellationTokenSource(ReadTimeout)) { await clientWebSocket.SendAsync(new ArraySegment <byte>(compressedMsg), WebSocketMessageType.Binary, true, cts.Token); } }
public async Task StartRecive() { var buffer = new byte[4096 * 2]; int startIndex = 0; if (clientWebSocket.State != WebSocketState.Open) { return; } await SendListPendingMessage(); while (clientWebSocket.State == WebSocketState.Open) { var rcvBuffer = new ArraySegment <byte>(buffer, startIndex, buffer.Length - startIndex); var response = await clientWebSocket.ReceiveAsync(rcvBuffer, CancellationToken.None); if (response.MessageType == WebSocketMessageType.Close) { await clientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Close response received", CancellationToken.None); onClosed?.Invoke(this, null); return; } if (response.MessageType == WebSocketMessageType.Binary) { if (response.EndOfMessage) { var js = GZipHelper.Decompress(buffer); var sjs = Encoding.ASCII.GetString(js); // Console.WriteLine("收到的报文为:" + sjs); onRecivedMessage?.Invoke(this, null, sjs); startIndex = 0; } else { startIndex += response.Count; } } } }