big svn cleanup
[anytun.git] / src / Sockets / tests / resume.cpp
blobe518109ac0019474ed3bb5a10dfeb173be3a5f5d
1 #include <EventHandler.h>
2 #include <TcpSocket.h>
3 #include <Utility.h>
4 #include <IEventOwner.h>
5 #include <ListenSocket.h>
8 class eHandler : public EventHandler
10 public:
11 eHandler() : EventHandler() {}
15 class eSocket : public TcpSocket, public IEventOwner
17 public:
18 eSocket(ISocketHandler& h) : TcpSocket(h), IEventOwner(static_cast<eHandler&>(h)), m_listen_socket(NULL), m_server(false) {
19 SetLineProtocol();
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 );
35 return true;
38 void OnAccept() {
39 m_id_stop_socket = AddEvent(5, 0);
40 printf("Stop socket id: %d\n", m_id_stop_socket);
41 m_server = true;
44 void OnConnect() {
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)
52 SetCloseAndDelete();
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());
61 void OnDelete() {
62 printf("eSocket::OnDelete(), server: %s\n", m_server ? "true" : "false");
65 void OnDisconnect() {
66 printf("Disconnect, server: %s\n", m_server ? "true" : "false");
69 private:
70 ListenSocket<eSocket> *m_listen_socket;
71 int m_id_stop_socket;
72 int m_id_stop_listen;
73 bool m_server;
77 class Sender : public IEventOwner
79 public:
80 Sender(IEventHandler& h, TcpSocket& ref) : IEventOwner(h), m_socket(ref), m_count(1) {
81 AddEvent(1, 0);
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);
90 private:
91 TcpSocket& m_socket;
92 int m_count;
96 int main(int argc, char *argv[])
98 eHandler h;
99 eSocket sock(h);
100 sock.SetConnectTimeout(3);
101 sock.SetConnectionRetry(-1);
102 #ifdef ENABLE_RECONNECT
103 sock.SetReconnect();
104 #endif
105 sock.Open("localhost", 12345);
106 h.Add( &sock );
107 Sender send(h, sock);
108 h.AddEvent( &send, 1, 0 );
109 h.EventLoop();