1 /* 2 * NetKit - This library contains tcp / http / http2 / websocket servers and clients. 3 * 4 * Copyright (C) 2015-2017 Shanghai Putao Technology Co., Ltd 5 * 6 * Developer: HuntLabs 7 * 8 * Licensed under the Apache-2.0 License. 9 * 10 */ 11 12 module netkit.net.NetServer; 13 14 import netkit.Netkit; 15 16 import netkit.net.NetServerOptions; 17 import netkit.net.NetSocket; 18 import netkit.net.NetServerSocket; 19 import netkit.net.ServerBootstrap; 20 import netkit.common.Common; 21 import netkit.utils.NetkitException; 22 23 import std.stdio; 24 25 class NetServer { 26 27 public this(Netkit netkit, NetServerOptions options) 28 { 29 30 } 31 public NetServer connectHandler(connet_handler handler) 32 { 33 if (_listening) 34 throw new NetkitException("Cannot set connectHandler when server is listening"); 35 _connectHandler = handler; 36 return this; 37 } 38 public NetServer listen(string ip, int port, linsten_handler listenHandler) 39 { 40 return listen(_connectHandler, ip, port, listenHandler, false); 41 } 42 public NetServer listen(string ip, int port) 43 { 44 return listen(_connectHandler, ip, port, null, true); 45 } 46 47 48 49 private NetServer listen(connet_handler connectHandler, string ip, int port, linsten_handler listenHandler, bool blockMode) 50 { 51 if (connectHandler is null) 52 throw new NetkitException("Set connect handler first"); 53 if (_listening) 54 throw new NetkitException("Listen already called"); 55 _listening = true; 56 _blockMode = blockMode; 57 _connectHandler = connectHandler; 58 _bootStrap = new ServerBootstrap(); 59 _serverSocket = new NetServerSocket(_bootStrap); 60 _serverSocket.setConnectHandler(_connectHandler); 61 _serverSocket.bind(ip, port); 62 _bootStrap.start(); 63 64 if (listenHandler) 65 { 66 listenHandler(true, this); 67 } 68 return this; 69 } 70 71 public void close() 72 { 73 _serverSocket.close(); 74 } 75 76 77 protected: 78 connet_handler _connectHandler; 79 ServerBootstrap _bootStrap; 80 81 private: 82 bool _listening; 83 //block mode 84 bool _blockMode; 85 NetServerSocket _serverSocket; 86 87 88 89 90 91 92 }