/// <summary> /// 收到到数据帧请求 /// </summary> /// <param name="context">会话对象</param> /// <param name="frameRequest">数据帧</param> /// <returns></returns> private async Task OnWebSocketRequestAsync(IContenxt context, FrameRequest frameRequest) { switch (frameRequest.Frame) { case FrameCodes.Close: var frame = new CloseRequest(frameRequest); this.OnClose(context, frame.StatusCode, frame.CloseReason); context.Session.Close(); break; case FrameCodes.Binary: await this.OnBinaryAsync(context, frameRequest.Content); break; case FrameCodes.Text: var content = Encoding.UTF8.GetString(frameRequest.Content); await this.OnTextAsync(context, content); break; case FrameCodes.Ping: try { var pong = new FrameResponse(FrameCodes.Pong, frameRequest.Content); var pongContent = pong.ToArraySegment(mask: false); context.Session.Send(pongContent); } catch (Exception) { } finally { this.OnPing(context, frameRequest.Content); } break; case FrameCodes.Pong: context.Session.Publish("Pong", frameRequest.Content); this.OnPong(context, frameRequest.Content); break; default: break; } }
/// <summary> /// 发送数据 /// </summary> /// <param name="frame"></param> /// <returns></returns> private int Send(FrameResponse frame) { var buffer = frame.ToArraySegment(mask: true); return(base.Send(buffer)); }