/* * TcpClient_test.cpp * * @build * make libhv && sudo make install * g++ -std=c++11 TcpClient_test.cpp -o TcpClient_test -I/usr/local/include/hv -lhv -lpthread * */ #include "TcpClient.h" #include "htime.h" using namespace hv; int main(int argc, char* argv[]) { if (argc < 2) { printf("Usage: %s port\n", argv[0]); return -10; } int port = atoi(argv[1]); TcpClient cli; int connfd = cli.createsocket(port); if (connfd < 0) { return -20; } printf("client connect to port %d, connfd=%d ...\n", port, connfd); cli.onConnection = [](const SocketChannelPtr& channel) { std::string peeraddr = channel->peeraddr(); if (channel->isConnected()) { printf("connected to %s! connfd=%d\n", peeraddr.c_str(), channel->fd()); // send(time) every 3s setInterval(3000, [channel](TimerID timerID){ if (channel->isConnected()) { char str[DATETIME_FMT_BUFLEN] = {0}; datetime_t dt = datetime_now(); datetime_fmt(&dt, str); channel->send(str); } else { killTimer(timerID); } }); } else { printf("disconnected to %s! connfd=%d\n", peeraddr.c_str(), channel->fd()); } }; cli.onMessage = [](const SocketChannelPtr& channel, Buffer* buf) { printf("< %.*s\n", (int)buf->size(), (char*)buf->data()); }; cli.onWriteComplete = [](const SocketChannelPtr& channel, Buffer* buf) { printf("> %.*s\n", (int)buf->size(), (char*)buf->data()); }; // reconnect: 1,2,4,8,10,10,10... ReconnectInfo reconn; reconn.min_delay = 1000; reconn.max_delay = 10000; reconn.delay_policy = 2; cli.setReconnect(&reconn); cli.start(); while (1) sleep(1); return 0; }