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); }