@Override protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception { String json = gson.toJson(msg); return new TextWebSocketFrame(json); }
@Override public String toString() { return getClass().getSimpleName() + "(text: " + getText() + ')'; } }
/** * Creates a new text frame with the specified binary data. The final fragment flag is set to true. * * @param finalFragment * flag indicating if this frame is the final fragment * @param rsv * reserved bits used for protocol extensions * @param binaryData * the content of the frame. Must be UTF-8 encoded */ public TextWebSocketFrame(boolean finalFragment, int rsv, ChannelBuffer binaryData) { setFinalFragment(finalFragment); setRsv(rsv); setBinaryData(binaryData); }
@Override public WebSocket stream(String fragment, boolean last) { TextWebSocketFrame frame = new TextWebSocketFrame(fragment); frame.setFinalFragment(last); channel.write(frame); return this; }
/** * Returns the text data in this frame */ public String getText() { if (getBinaryData() == null) { return null; } return getBinaryData().toString(CharsetUtil.UTF_8); }
@Override public WebSocket stream(String fragment, boolean last) { TextWebSocketFrame frame = new TextWebSocketFrame(fragment); frame.setFinalFragment(last); channel.write(frame); return this; }
private void text(TextWebSocketFrame frame, Channel channel) { Map<String, Object> map = parse(frame.getBinaryData().toString(Charset.forName("UTF-8"))); if (map == null) { error("invalid request", channel); return; } String type = (String) map.get("type"); if (type == null) { error("no type found", channel); return; } if (!handlers.containsKey(type)) { error("missing handler for type: " + type, channel); return; } Map<String, Object> data = (Map<String, Object>) map.get("data"); handlers.get(type).handleRequest(new NettyInteractiveRequest(data), new NettyInteractiveChannel(channel)); }
protected TextWebSocketFrame eventToFrame(byte opcode, Object payload) { Event event = Events.event(payload, opcode); return new TextWebSocketFrame(gson.toJson(event)); }
@Override public WebSocket streamText(String fragment, boolean last) { TextWebSocketFrame frame = new TextWebSocketFrame(fragment); frame.setFinalFragment(last); channel.write(frame); return this; }
@Override protected Object decode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception { Event event = null; try { TextWebSocketFrame frame = (TextWebSocketFrame) msg; event = gson.fromJson(frame.getText(), DefaultEvent.class); if (event.getType() == Events.NETWORK_MESSAGE) { event.setType(Events.SESSION_MESSAGE); } } catch (Exception e) { LOG.error("Exception occurred while decoding json: ", e); } return event; }
/** * Creates a new text frame with the specified text string. The final fragment flag is set to true. * * @param finalFragment * flag indicating if this frame is the final fragment * @param rsv * reserved bits used for protocol extensions * @param text * String to put in the frame */ public TextWebSocketFrame(boolean finalFragment, int rsv, String text) { setFinalFragment(finalFragment); setRsv(rsv); if (text == null || text.length() == 0) { setBinaryData(ChannelBuffers.EMPTY_BUFFER); } else { setBinaryData(ChannelBuffers.copiedBuffer(text, CharsetUtil.UTF_8)); } }
return new TextWebSocketFrame(binaryData);
@Override public WebSocket stream(String fragment, boolean last) { TextWebSocketFrame frame = new TextWebSocketFrame(fragment); frame.setFinalFragment(last); channel.write(frame); return this; }
String data = frame.getText(); LOG.trace("From websocket: " + data); Event event = gson.fromJson(data, DefaultEvent.class);
@Override public WebSocket sendMessage(String message) { channel.write(new TextWebSocketFrame(message)); return this; }
private Object getData(WebSocketFrame frame) { if (frame instanceof TextWebSocketFrame) { return ((TextWebSocketFrame) frame).getText(); } else { return frame.getBinaryData(); } } }
currentFrame = new TextWebSocketFrame(true, msg.getRsv(), buf); } else if (msg instanceof BinaryWebSocketFrame) { currentFrame = new BinaryWebSocketFrame(true, msg.getRsv(), buf);
String frame = wf.getText(); char frameType = frame.charAt(0);
return new TextWebSocketFrame(frameFinalFlag, frameRsv, framePayload); } else if (frameOpcode == OPCODE_BINARY) { return new BinaryWebSocketFrame(frameFinalFlag, frameRsv, framePayload);
private void handleWebSocketFrame(ChannelHandlerContext ctx, Channel channel, WebSocketFrame frame) throws IOException { // Check for closing frame if (frame instanceof CloseWebSocketFrame) { handshaker.close(ctx.getChannel(), (CloseWebSocketFrame) frame); return; } else if (frame instanceof PingWebSocketFrame) { ctx.getChannel().write(new PongWebSocketFrame(frame.getBinaryData())); return; } else if (!(frame instanceof TextWebSocketFrame)) { throw new UnsupportedOperationException(String.format("%s frame types not supported", frame.getClass().getName())); } String request = ((TextWebSocketFrame) frame).getText(); logger.debug(String.format("Channel %s received '%s'", ctx.getChannel().getId(), request)); SockJsMessage jsMessage = new SockJsMessage(request); ctx.sendUpstream(new UpstreamMessageEvent(channel, jsMessage, channel.getRemoteAddress())); }