1 #include <EventHandler.h>
4 #include <IEventOwner.h>
5 #include <ListenSocket.h>
8 class eHandler
: public EventHandler
11 eHandler() : EventHandler() {}
15 class eSocket
: public TcpSocket
, public IEventOwner
18 eSocket(ISocketHandler
& h
) : TcpSocket(h
), IEventOwner(static_cast<eHandler
&>(h
)), m_listen_socket(NULL
), m_server(false) {
22 bool OnConnectRetry() {
23 printf("Retrying connect\n");
24 if (GetConnectionRetries() == 5)
26 printf("Creating ListenSocket\n");
27 m_listen_socket
= new ListenSocket
<eSocket
>(Handler());
28 if (m_listen_socket
-> Bind(12345))
30 printf("Bind port 12345 failed\n");
32 m_listen_socket
-> SetDeleteByHandler();
33 Handler().Add( m_listen_socket
);
39 m_id_stop_socket
= AddEvent(5, 0);
40 printf("Stop socket id: %d\n", m_id_stop_socket
);
45 m_id_stop_listen
= AddEvent(10, 0);
46 printf("Stop listen id: %d\n", m_id_stop_listen
);
49 void OnEvent(int id
) {
50 printf("Event id: %d\n", id
);
51 if (id
== m_id_stop_socket
&& m_server
)
53 if (id
== m_id_stop_listen
&& !m_server
)
54 m_listen_socket
-> SetCloseAndDelete();
57 void OnLine(const std::string
& line
) {
58 printf("Incoming data: %s\n", line
.c_str());
62 printf("eSocket::OnDelete(), server: %s\n", m_server
? "true" : "false");
66 printf("Disconnect, server: %s\n", m_server
? "true" : "false");
70 ListenSocket
<eSocket
> *m_listen_socket
;
77 class Sender
: public IEventOwner
80 Sender(IEventHandler
& h
, TcpSocket
& ref
) : IEventOwner(h
), m_socket(ref
), m_count(1) {
84 void OnEvent(int id
) {
85 if (static_cast<eHandler
&>(EventHandler()).Valid(&m_socket
))
86 m_socket
.Send("Event#" + Utility::l2string(m_count
++) + "\n");
87 EventHandler().AddEvent(this, 1, 0);
96 int main(int argc
, char *argv
[])
100 sock
.SetConnectTimeout(3);
101 sock
.SetConnectionRetry(-1);
102 #ifdef ENABLE_RECONNECT
105 sock
.Open("localhost", 12345);
107 Sender
send(h
, sock
);
108 h
.AddEvent( &send
, 1, 0 );