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