Beispiel #1
0
        /// <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));
        }