1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.commandexec.server;
21
22 import io.netty.channel.Channel;
23 import io.netty.channel.ChannelInitializer;
24 import io.netty.channel.ChannelPipeline;
25 import io.netty.channel.group.ChannelGroup;
26 import io.netty.channel.group.DefaultChannelGroup;
27 import io.netty.channel.socket.SocketChannel;
28 import io.netty.handler.codec.DelimiterBasedFrameDecoder;
29 import io.netty.handler.codec.Delimiters;
30 import io.netty.handler.codec.string.StringDecoder;
31 import io.netty.handler.codec.string.StringEncoder;
32 import io.netty.util.concurrent.EventExecutorGroup;
33 import org.waarp.commandexec.utils.LocalExecDefaultResult;
34
35
36
37
38
39 public class LocalExecServerInitializer
40 extends ChannelInitializer<SocketChannel> {
41
42 private long delay = LocalExecDefaultResult.MAXWAITPROCESS;
43 protected final EventExecutorGroup eventExecutorGroup;
44 private final ChannelGroup channelGroup;
45
46
47
48
49
50
51 public LocalExecServerInitializer(
52 final EventExecutorGroup eventExecutorGroup) {
53 this.eventExecutorGroup = eventExecutorGroup;
54 channelGroup =
55 new DefaultChannelGroup("LocalExecServer", eventExecutorGroup.next());
56 }
57
58
59
60
61
62
63
64 public LocalExecServerInitializer(final long newdelay,
65 final EventExecutorGroup eventExecutorGroup) {
66 delay = newdelay;
67 this.eventExecutorGroup = eventExecutorGroup;
68 channelGroup =
69 new DefaultChannelGroup("LocalExecServer", eventExecutorGroup.next());
70 }
71
72 @Override
73 public void initChannel(final SocketChannel ch) {
74
75 final ChannelPipeline pipeline = ch.pipeline();
76
77
78 pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192,
79 Delimiters.lineDelimiter()));
80 pipeline.addLast(eventExecutorGroup, "decoder", new StringDecoder());
81 pipeline.addLast(eventExecutorGroup, "encoder", new StringEncoder());
82
83
84
85 pipeline.addLast(eventExecutorGroup, "handler",
86 new LocalExecServerHandler(this, delay));
87 }
88
89
90
91
92
93
94 public final void addChannel(final Channel channel) {
95 channelGroup.add(channel);
96 }
97
98
99
100
101 public final void releaseResources() {
102 channelGroup.close();
103 }
104 }