コード例 #1
0
        public Task SendFrameAsync(IWebSocketFrame frame, CancellationToken cancellationToken)
        {
            if (frame == null)
            {
                throw new ArgumentNullException("frame");
            }

            return(frame.WriteToAsync(_tcp, cancellationToken));
        }
コード例 #2
0
 public WebSocketPayload(IWebSocketFrame frame, byte[] data = null)
 {
     if (frame == null)
         throw new ArgumentNullException("frame");
     _frame = frame;
     _data = data;
     if (_data != null)
         _length = _data.Length;
 }
コード例 #3
0
 public WebSocketPayload(IWebSocketFrame frame, byte[] data, int offset, int length)
 {
     if (frame == null)
         throw new ArgumentNullException("frame");
     _frame = frame;
     _data = data;
     _offset = offset;
     _length = length;
 }
コード例 #4
0
        protected virtual void OnFrameReceived(IWebSocketFrame frame)
        {
            var handler = this.FrameReceived;

            if (handler != null)
            {
                handler(frame);
            }
        }
コード例 #5
0
 public WebSocketPayload(IWebSocketFrame frame, byte[] data, int offset, int length)
 {
     if (frame == null)
     {
         throw new ArgumentNullException("frame");
     }
     _frame  = frame;
     _data   = data;
     _offset = offset;
     _length = length;
 }
コード例 #6
0
 public WebSocketPayload(IWebSocketFrame frame, byte[] data = null)
 {
     if (frame == null)
     {
         throw new ArgumentNullException("frame");
     }
     _frame = frame;
     _data  = data;
     if (_data != null)
     {
         _length = _data.Length;
     }
 }
コード例 #7
0
        public void AddFrame(IWebSocketFrame frame)
        {
            if (frame == null)
            {
                throw new ArgumentNullException("frame");
            }

            if (this.IsComplete)
            {
                throw new InvalidOperationException("Message already complete.");
            }

            _frames.Add(frame);
        }
コード例 #8
0
        public Task SendFrameAsync(IWebSocketFrame frame, CancellationToken cancellationToken)
        {
            if (frame == null)
                throw new ArgumentNullException("frame");

            return frame.WriteToAsync(_tcp, cancellationToken);
        }
コード例 #9
0
 public Task SendFrameAsync(IWebSocketFrame frame)
 {
     return this.SendFrameAsync(frame, CancellationToken.None);
 }
コード例 #10
0
 public Task SendFrameAsync(IWebSocketFrame frame)
 {
     return(this.SendFrameAsync(frame, CancellationToken.None));
 }
コード例 #11
0
 public WebSocketPayload(IWebSocketFrame frame, string data)
     : this(frame, Encoding.UTF8.GetBytes(data ?? string.Empty))
 {
 }
コード例 #12
0
 public WebSocketPayload(IWebSocketFrame frame, string data)
     : this(frame, Encoding.UTF8.GetBytes(data ?? string.Empty)) { }
コード例 #13
0
 private Task SendAsync(IWebSocketFrame frame, CancellationToken cancellationToken)
 {
     return(_webSocket.SendFrameAsync(frame, cancellationToken));
 }
コード例 #14
0
        /// <summary>
        /// Handles the frame.
        /// </summary>
        /// <param name="handler">The handler.</param>
        private void HandleFrame(IWebSocketDataHandler handler)
        {
            IWebSocketFrame frame = _frameReader.Read(_client);

            if (frame == null || !frame.IsValid)
            {
                return;
            }

            if (frame.OpCode == WebSocketOpCode.ContinuationFrame)
            {
                switch (_multiFrameOpCode)
                {
                case WebSocketOpCode.TextFrame:
                    string message = Encoding.UTF8.GetString(frame.DecodedPayload, 0, frame.DecodedPayload.Length);

                    handler.OnTextPart(this, new TextMultiFrameEventArgs(message, frame.IsEntirePayload));
                    return;

                case WebSocketOpCode.BinaryFrame:
                    handler.OnBinaryPart(this, new BinaryMultiFrameEventArgs(frame.DecodedPayload, frame.IsEntirePayload));
                    return;
                }
            }
            else
            {
                switch (frame.OpCode)
                {
                case WebSocketOpCode.ConnectionClose:
                    handler.OnClose(this, GetConnectionCloseEventArgsFromPayload(frame.DecodedPayload));

                    KillConnection(string.Empty);
                    return;

                case WebSocketOpCode.Ping:
                    handler.OnPing(this, new PingEventArgs(frame.DecodedPayload));
                    return;

                case WebSocketOpCode.Pong:
                    handler.OnPong(this, new PingEventArgs(frame.DecodedPayload));
                    return;

                case WebSocketOpCode.TextFrame:
                    string message = Encoding.UTF8.GetString(frame.DecodedPayload, 0, frame.DecodedPayload.Length);

                    if (frame.IsEntirePayload)
                    {
                        handler.OnText(this, new TextFrameEventArgs(message));
                    }
                    else
                    {
                        _multiFrameOpCode = frame.OpCode;
                        handler.OnTextPart(this, new TextMultiFrameEventArgs(message, frame.IsEntirePayload));
                    }
                    return;

                case WebSocketOpCode.BinaryFrame:
                    if (frame.IsEntirePayload)
                    {
                        handler.OnBinary(this, new BinaryFrameEventArgs(frame.DecodedPayload));
                    }
                    else
                    {
                        _multiFrameOpCode = frame.OpCode;
                        handler.OnBinaryPart(this, new BinaryMultiFrameEventArgs(frame.DecodedPayload, frame.IsEntirePayload));
                    }
                    return;
                }
            }
        }