1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 package org.jboss.netty.example.http.websocketx.client;
39
40 import org.jboss.netty.channel.Channel;
41 import org.jboss.netty.channel.ChannelHandlerContext;
42 import org.jboss.netty.channel.ChannelStateEvent;
43 import org.jboss.netty.channel.ExceptionEvent;
44 import org.jboss.netty.channel.MessageEvent;
45 import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
46 import org.jboss.netty.handler.codec.http.HttpResponse;
47 import org.jboss.netty.handler.codec.http.websocketx.CloseWebSocketFrame;
48 import org.jboss.netty.handler.codec.http.websocketx.PongWebSocketFrame;
49 import org.jboss.netty.handler.codec.http.websocketx.TextWebSocketFrame;
50 import org.jboss.netty.handler.codec.http.websocketx.WebSocketClientHandshaker;
51 import org.jboss.netty.handler.codec.http.websocketx.WebSocketFrame;
52 import org.jboss.netty.util.CharsetUtil;
53
54 public class WebSocketClientHandler extends SimpleChannelUpstreamHandler {
55
56 private final WebSocketClientHandshaker handshaker;
57
58 public WebSocketClientHandler(WebSocketClientHandshaker handshaker) {
59 this.handshaker = handshaker;
60 }
61
62 @Override
63 public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
64 System.out.println("WebSocket Client disconnected!");
65 }
66
67 @Override
68 public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
69 Channel ch = ctx.getChannel();
70 if (!handshaker.isHandshakeComplete()) {
71 handshaker.finishHandshake(ch, (HttpResponse) e.getMessage());
72 System.out.println("WebSocket Client connected!");
73 return;
74 }
75
76 if (e.getMessage() instanceof HttpResponse) {
77 HttpResponse response = (HttpResponse) e.getMessage();
78 throw new Exception("Unexpected HttpResponse (status=" + response.getStatus() + ", content="
79 + response.getContent().toString(CharsetUtil.UTF_8) + ')');
80 }
81
82 WebSocketFrame frame = (WebSocketFrame) e.getMessage();
83 if (frame instanceof TextWebSocketFrame) {
84 TextWebSocketFrame textFrame = (TextWebSocketFrame) frame;
85 System.out.println("WebSocket Client received message: " + textFrame.getText());
86 } else if (frame instanceof PongWebSocketFrame) {
87 System.out.println("WebSocket Client received pong");
88 } else if (frame instanceof CloseWebSocketFrame) {
89 System.out.println("WebSocket Client received closing");
90 ch.close();
91 }
92 }
93
94 @Override
95 public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
96 final Throwable t = e.getCause();
97 t.printStackTrace();
98 e.getChannel().close();
99 }
100 }