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.NetServerSocket; 13 14 import netkit.net.NetSocket; 15 import netkit.net.ServerBootstrap; 16 import netkit.net.NetClientSocket; 17 import netkit.common.Common; 18 19 import kiss.aio.AsynchronousServerSocketChannel; 20 import kiss.aio.AsynchronousSocketChannel; 21 import kiss.aio.CompletionHandle; 22 import kiss.aio.ByteBuffer; 23 24 class AcceptHandler : AcceptCompletionHandle { 25 26 this(NetServerSocket master) 27 { 28 _master = master; 29 } 30 override void completed(void* attachment, AsynchronousSocketChannel result) 31 { 32 NetClientSocket client = new NetClientSocket(_master._boot, result); 33 _master._connectHandler(client); 34 } 35 override void failed(void* attachment) 36 { 37 _master._connectHandler(null); 38 } 39 private: 40 NetServerSocket _master; 41 } 42 43 44 class NetServerSocket : NetSocket { 45 46 this(ServerBootstrap boot) 47 { 48 _boot = boot; 49 _serverChannel = AsynchronousServerSocketChannel.open(boot.getGroup()); 50 _acceptHandler = new AcceptHandler(this); 51 52 } 53 public NetServerSocket setConnectHandler(connet_handler handler) 54 { 55 _connectHandler = handler; 56 return this; 57 } 58 public NetServerSocket bind(string ip, int port) 59 { 60 _ip = ip; 61 _port = port; 62 _serverChannel.bind(ip, cast(ushort)port); 63 _serverChannel.accept(null, _acceptHandler); 64 return this; 65 } 66 67 override public NetSocket handler(buffer_handler readHandler) { return this; } 68 override public NetSocket write(ByteBuffer data) { return this; } 69 override public NetSocket write(string data) { return this; } 70 override public NetSocket close() { return this; } 71 72 73 private: 74 AsynchronousServerSocketChannel _serverChannel; 75 AcceptHandler _acceptHandler; 76 77 78 }