diff --git a/examples/proto_debuger/tcp_server_libevent.cpp b/examples/proto_debuger/tcp_server_libevent.cpp index e9ba1c86..9875843c 100644 --- a/examples/proto_debuger/tcp_server_libevent.cpp +++ b/examples/proto_debuger/tcp_server_libevent.cpp @@ -33,15 +33,24 @@ ConnectionLibevent::ConnectionLibevent(struct bufferevent* ev, uint32_t fd, stru m_fd(-1), m_addr(nullptr) { + m_event = ev; m_fd = fd; m_addr = p1; + std::cout << "\r\n " << m_addr << " ConnectionLibevent " << inet_ntoa(m_addr->sin_addr) << std::endl; } ConnectionLibevent* defaultConnAccept(struct bufferevent* ev, uint32_t fd, struct sockaddr_in* p1) { + std::cout << "defaultConnAccept " << inet_ntoa(p1->sin_addr); return new ConnectionLibevent(ev, fd, p1); } +void defaultConnClose(ConnectionLibevent*p) { + std::cout << "defaultConnClose close connection " << p->IpAddress() << p->SocketFd()<sin_addr)); - } - return ""; + + std::cout<< m_addr << " IpAddress: " << inet_ntoa(m_addr->sin_addr)<<"port " << htons(m_addr->sin_port) << std::endl; + return string(inet_ntoa(this->m_addr->sin_addr)); } TcpServerLibevent* ConnectionLibevent::Server() { return m_parent_server; @@ -96,19 +104,19 @@ TcpServerLibevent* ConnectionLibevent::Server() { void read_cb(struct bufferevent* bev, void* arg) { char buf[1024] = { 0 }; - ConnectionLibevent* conn = (ConnectionLibevent*)arg; + ConnectionLibevent* conn = static_cast (arg); bufferevent_read(bev, buf, sizeof(buf)); - cout << "client " << conn->IpAddress() << " say:" << buf << endl; + cout << "client " << conn->IpAddress().c_str() << " say:" << buf << endl; conn->OnRecv(buf, sizeof(buf)); } void write_cb(struct bufferevent* bev, void* arg) { ConnectionLibevent* conn = (ConnectionLibevent*)arg; - std::cout << "connection " << conn->IpAddress() << " sended data success" << std::endl; + std::cout << "connection " << conn->IpAddress() << " sended data " << std::endl; } -void event_cb(struct bufferevent* bev, short events, void* arg) +void event_cb(struct bufferevent* bev, short events, void* arg) { ConnectionLibevent* conn = (ConnectionLibevent*)(arg); TcpServerLibevent* server = conn->Server(); @@ -131,11 +139,14 @@ void event_cb(struct bufferevent* bev, short events, void* arg) //delete conn; } -void ServerCallbacks::cb_listener(struct evconnlistener* listener, evutil_socket_t fd, struct sockaddr* addr, int len, void* ptr) +void ServerCallbacks::cb_listener(struct evconnlistener* listener, evutil_socket_t fd, + struct sockaddr* addr, int len, void* ptr) { - struct sockaddr_in* client = (sockaddr_in*)addr; + struct sockaddr_in* client = new(struct sockaddr_in); + memcpy(client, addr, sizeof(struct sockaddr)); + cout << "connect new client: " << inet_ntoa(client->sin_addr) - << " " << fd << " ::" << ntohs(client->sin_port) << endl; + << " port: " << " ::" << ntohs(client->sin_port) << endl; TcpServerLibevent* server = (TcpServerLibevent*)ptr; if (server != nullptr) { std::cout << "null 2" << std::endl; @@ -232,6 +243,7 @@ int TcpServerLibevent::AddConnection(uint32_t fd, ConnectionLibevent* p) { int TcpServerLibevent::RemoveConnection(uint32_t fd) { if (m_map_client.find(fd) != m_map_client.end()) { auto pClient = m_map_client[fd]; + this->m_handle_disconnect(pClient); m_map_client.erase(fd); delete pClient; return 0; @@ -264,6 +276,7 @@ TcpServerLibevent::TcpServerLibevent(int port, string bindip) : m_event_listener(nullptr) { m_handle_accept = defaultConnAccept; + m_handle_disconnect = defaultConnClose; m_backlog = 10000; this->m_bind_ip = bindip; this->m_port = port; @@ -294,6 +307,7 @@ TcpServerLibevent::TcpServerLibevent(int port, string bindip) : m_status = STOP; std::cout << "3" << std::endl; } + /** * @description: start server synchronous * @param {*}