Ejemplo n.º 1
0
        protected void ChannelRead0(IChannelHandlerContext ctx, Object msg)
        {
            IChannel ch = ctx.Channel;

            if (!handshaker.IsHandshakeComplete)
            {
                handshaker.FinishHandshake(ch, (IFullHttpResponse)msg);
                return;
            }

            if (msg is IFullHttpResponse)
            {
                IFullHttpResponse response = (IFullHttpResponse)msg;
                throw new Exception("Unexpected FullHttpResponse (content=" + response.Content.ToString(Encoding.UTF8) + ')');
            }

            WebSocketFrame frame = (WebSocketFrame)msg;

            if (frame is TextWebSocketFrame || frame is BinaryWebSocketFrame)
            {
                MQJsonParser parser = client.GetParser();
                try
                {
                    byte[] content = new byte[frame.Content.ReadableBytes];
                    frame.Content.ReadBytes(content);
                    MQMessage message = parser.Decode(content);
                    this.listener.PacketReceived(message);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    client.ReleaseParser(parser);
                }
            }
            else if (frame is CloseWebSocketFrame)
            {
                ch.CloseAsync();
            }
        }
        public void Send(MQMessage message)
        {
            if (channel != null && channel.Open)
            {
                String       value  = null;
                MQJsonParser parser = GetParser();
                try
                {
                    value = parser.JsonString(message);
                }
                catch (Exception)
                {
                    Close();
                }

                ReleaseParser(parser);
                if (value != null)
                {
                    channel.WriteAndFlushAsync(new TextWebSocketFrame(value));
                }
            }
        }
 public void ReleaseParser(MQJsonParser parser)
 {
     queue.Enqueue(parser);
 }