1 module hunt.imf.io.clientext; 2 3 import hunt.logging; 4 5 import hunt.imf.io.client; 6 import hunt.imf.core.dispatcher; 7 import hunt.imf.protocol.parser; 8 import hunt.imf.protocol.packet; 9 import hunt.imf.io.context; 10 11 import hunt.event.timer; 12 import hunt.util.Timer; 13 import hunt.net.NetUtil; 14 15 import core.time; 16 17 /// 18 class ClientExt : Client 19 { 20 OpenHandler _openHandler; 21 CloseHandler _closeHandler; 22 Timer _timer; 23 string _host; 24 int _port; 25 26 /// 27 this(Dispatcher dispatcher , string ns = "") 28 { 29 super(dispatcher , ns); 30 } 31 32 /// 33 override void connect(int port , string host = "127.0.0.1") 34 { 35 _host = host; 36 _port = port; 37 38 super.connect(port , host); 39 super.setOpenHandler(&openHandler); 40 super.setCloseHandler(&closeHandler); 41 } 42 43 override void setOpenHandler(OpenHandler handler) 44 { 45 _openHandler = handler; 46 } 47 48 override void setCloseHandler(CloseHandler handler){ 49 _closeHandler = handler; 50 } 51 52 private void onTick(Object sender) 53 { 54 logWarning("reconnecting " , _host , " " , _port); 55 connect(_port , _host); 56 } 57 58 private void openHandler(Context context) 59 { 60 if(_openHandler !is null) 61 { 62 _openHandler(context); 63 } 64 65 //remove timer 66 if(_timer !is null) 67 { 68 _timer.stop(); 69 _timer = null; 70 } 71 } 72 73 private void closeHandler(Context context) 74 { 75 if(_closeHandler !is null) 76 { 77 _closeHandler(context); 78 } 79 if(_timer is null) 80 { 81 _timer = new Timer(NetUtil.defaultEventLoopGroup().nextLoop(), 3.seconds); 82 _timer.onTick(&onTick); 83 _timer.start(); 84 } 85 86 } 87 88 89 90 }