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 }