1
1
package de .datasec .hydra .server ;
2
2
3
+ import de .datasec .hydra .shared .handler .HydraSession ;
3
4
import de .datasec .hydra .shared .handler .Session ;
4
5
import de .datasec .hydra .shared .initializer .HydraChannelInitializer ;
5
6
import de .datasec .hydra .shared .protocol .HydraProtocol ;
6
7
import io .netty .bootstrap .ServerBootstrap ;
8
+ import io .netty .channel .Channel ;
7
9
import io .netty .channel .ChannelOption ;
8
10
import io .netty .channel .nio .NioEventLoopGroup ;
9
11
import io .netty .channel .socket .nio .NioServerSocketChannel ;
@@ -68,23 +70,26 @@ public Session build() {
68
70
}
69
71
70
72
private Session setUpClient () {
71
- HydraChannelInitializer initializer = new HydraChannelInitializer (protocol , new NioEventLoopGroup []{bossGroup = new NioEventLoopGroup (bossThreads ), workerGroup = new NioEventLoopGroup (workerThreads )});
73
+ NioEventLoopGroup [] loopGroups = new NioEventLoopGroup []{bossGroup = new NioEventLoopGroup (bossThreads ), workerGroup = new NioEventLoopGroup (workerThreads )};
74
+ Channel channel = null ;
72
75
73
- try {
74
- ServerBootstrap serverBootstrap = new ServerBootstrap ()
75
- .group (bossGroup , workerGroup )
76
- .channel (NioServerSocketChannel .class )
77
- .childHandler (initializer );
76
+ ServerBootstrap serverBootstrap = new ServerBootstrap ()
77
+ .group (bossGroup , workerGroup )
78
+ .channel (NioServerSocketChannel .class )
79
+ .childHandler (new HydraChannelInitializer (protocol , loopGroups ));
78
80
79
- options .forEach ((option , value ) -> serverBootstrap .option (ChannelOption .valueOf (option .name ()), value ));
80
- childOptions .forEach ((option , value ) -> serverBootstrap .childOption (ChannelOption .valueOf (option .name ()), value ));
81
+ options .forEach ((option , value ) -> serverBootstrap .option (ChannelOption .valueOf (option .name ()), value ));
82
+ childOptions .forEach ((option , value ) -> serverBootstrap .childOption (ChannelOption .valueOf (option .name ()), value ));
81
83
82
- serverBootstrap .bind (host , port ).sync ().channel ().closeFuture ().sync ();
83
- } catch (Exception e ) {
84
+ try {
85
+ channel = serverBootstrap .bind (host , port ).sync ().channel ();
86
+ } catch (InterruptedException e ) {
84
87
e .printStackTrace ();
85
88
}
86
89
87
- return initializer .getSession ();
90
+ // Needs to be created here already and overridden in the channel initializer,
91
+ // as the channel is not immediately initialized
92
+ return new HydraSession (channel , protocol , loopGroups );
88
93
}
89
94
}
90
95
}
0 commit comments