void TCPClient::AfterRecv(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) { TcpClientCtx* theclass = (TcpClientCtx*)handle->data; assert(theclass); TCPClient* parent = (TCPClient*)theclass->parent_server; if (nread < 0) { if (parent->reconnectcb_) { parent->reconnectcb_(NET_EVENT_TYPE_DISCONNECT, parent->reconnect_userdata_); } if (!parent->StartReconnect()) { fprintf(stdout, "Start Reconnect Failure.\n"); return; } if (nread == UV_EOF) { fprintf(stdout, "Server close(EOF), Client %p\n", handle); LOG(INFO) << ("Server close(EOF)"); } else if (nread == UV_ECONNRESET) { fprintf(stdout, "Server close(conn reset),Client %p\n", handle); LOG(INFO) << ("Server close(conn reset)"); } else { fprintf(stdout, "Server close,Client %p:%s\n", handle, GetUVError(nread).c_str()); LOG(INFO) << "Server close" << GetUVError(nread); } uv_close((uv_handle_t*)handle, AfterClientClose);//close before reconnect return; } parent->send_inl(NULL); if (nread > 0) { theclass->packet_->recvdata((const unsigned char*)buf->base, nread); } }
void TCPClient::AsyncCB(uv_async_t* handle) { TCPClient* theclass = (TCPClient*)handle->data; if (theclass->isuseraskforclosed_) { theclass->closeinl(); return; } //check data to send theclass->send_inl(NULL); }
void TCPClient::AfterSend(uv_write_t* req, int status) { TCPClient* theclass = (TCPClient*)req->data; if (status < 0) { if (theclass->writeparam_list_.size() > MAXLISTSIZE) { FreeWriteParam((write_param*)req); } else { theclass->writeparam_list_.push_back((write_param*)req); } LOG(ERROR)<<"send error:" << GetUVError(status); fprintf(stderr, "send error %s\n", GetUVError(status).c_str()); return; } theclass->send_inl(req); }