1 module hunt.net.NetUtil;
2 
3 import hunt.net.EventLoopPool;
4 import hunt.net.NetClient;
5 import hunt.net.NetServer;
6 import hunt.net.NetClientImpl;
7 import hunt.net.NetClientOptions;
8 import hunt.net.NetServerImpl;
9 import hunt.net.NetServerOptions;
10 
11 import hunt.event.EventLoop;
12 import hunt.util.pool;
13 import hunt.logging.ConsoleLogger;
14 
15 import std.concurrency : initOnce;
16 
17 
18 /**
19  * 
20  */
21 struct NetUtil {
22 
23     static EventLoop eventLoop() {
24         __gshared EventLoop inst;
25         return initOnce!inst(buildEventLoop());
26     }
27 
28     static private EventLoop buildEventLoop() {
29         EventLoop el = new EventLoop();
30         el.runAsync(-1);
31         import core.thread;
32         import core.time;
33         while(!el.isReady()) {
34             version(HUNT_IO_DEBUG) warning("Waiting for the eventloop got ready...");
35         }
36         return el;
37     }
38 
39     static NetServer createNetServer(ThreadMode threadModel = ThreadMode.Single)() {
40         return new NetServerImpl!(threadModel)();
41     }
42 
43     static NetServer createNetServer(ThreadMode threadModel = ThreadMode.Single)(NetServerOptions options) {
44         return new NetServerImpl!(threadModel)(options);
45     }
46 
47     static NetClient createNetClient() {
48         return new NetClientImpl(eventLoopPool());
49     }
50 
51     static NetClient createNetClient(NetClientOptions options) {
52         return new NetClientImpl(eventLoopPool(), options);
53     }
54 }
55