1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jboss.netty.handler.codec.oneone;
17
18 import static org.jboss.netty.channel.Channels.*;
19
20 import org.jboss.netty.buffer.ChannelBuffers;
21 import org.jboss.netty.channel.Channel;
22 import org.jboss.netty.channel.ChannelDownstreamHandler;
23 import org.jboss.netty.channel.ChannelEvent;
24 import org.jboss.netty.channel.ChannelHandlerContext;
25 import org.jboss.netty.channel.ChannelPipeline;
26 import org.jboss.netty.channel.MessageEvent;
27 import org.jboss.netty.handler.codec.frame.DelimiterBasedFrameDecoder;
28 import org.jboss.netty.handler.codec.frame.Delimiters;
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 public abstract class OneToOneEncoder implements ChannelDownstreamHandler {
47
48 protected OneToOneEncoder() {
49 super();
50 }
51
52 public void handleDownstream(
53 ChannelHandlerContext ctx, ChannelEvent evt) throws Exception {
54 if (!(evt instanceof MessageEvent)) {
55 ctx.sendDownstream(evt);
56 return;
57 }
58
59 MessageEvent e = (MessageEvent) evt;
60 Object originalMessage = e.getMessage();
61 Object encodedMessage = encode(ctx, e.getChannel(), originalMessage);
62 if (originalMessage == encodedMessage) {
63 ctx.sendDownstream(evt);
64 } else if (encodedMessage != null) {
65 write(ctx, e.getFuture(), encodedMessage, e.getRemoteAddress());
66 }
67 }
68
69
70
71
72
73
74
75 protected abstract Object encode(
76 ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception;
77 }