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 }