bool NetResMgr::TcpSend(TcpHandle handle, const char* packet, int size) { if (!packet || size <= 0 || size > MAX_TCP_PACKET_SIZE) { LOG(kError, "TcpSend failed: invalid parameter of handle %u.", handle); return false; } auto socket = GetTcpSocket(handle); if (!socket) { return false; } auto send_buffer = std::make_unique<tcp::SendBuffer>(); if (!send_buffer) { LOG(kError, "TcpSend failed: can not new send buffer.", handle); return false; } send_buffer->set_buffer(packet, size); send_buffer->set_handle(handle); if (!socket->AsyncSend(send_buffer->buffer(), send_buffer->buffer_size(), send_buffer->ovlp())) { return false; } send_buffer.release(); return true; }
void OnSent(StreamBuffer::Node* node, const error_code& error) { m_RequestSendRequestCount--; if (error.value() != 0) { m_Wrapper->m_OStream.DeallocNode(node); if (m_PendingRecvRequestCount == 0 && m_RequestSendRequestCount == 0) { if (!(error.value() == 104 || error.value() == 54)) { m_Wrapper->Close(); } if (!m_Wrapper->m_OnConnectBroken.Empty()) { m_Wrapper->m_OnConnectBroken(m_Wrapper, m_Wrapper->m_IStream, m_Wrapper->m_OStream); } } } else { if (!m_Wrapper->m_OnSent.Empty()) { m_Wrapper->m_OnSent(m_Wrapper, (const void *)((char *)node + sizeof(StreamBuffer::Node)), node->m_Len); } m_Wrapper->m_OStream.DeallocNode(node); AsyncSend(); } }
void OnConnected(IGame::TcpConnection*, IGame::StreamBuffer& istream, IGame::StreamBuffer& ostream) { std::cout << "Connect to server success" << std::endl; std::cout << "Remote Ip: " << GetFromIp().c_str() << " Remote Port: " << GetFromPort() << std::endl; ostream << m_EchoSeq; ostream << "tcp echo test"; AsyncSend(); }
void OnReceived(IGame::TcpConnection*, IGame::StreamBuffer& istream, IGame::StreamBuffer& ostream) { unsigned int id; std::string str; istream >> id; istream >> str; std::cout << id << " " << str.c_str() << std::endl; IGame::Time::Sleep(1000); m_EchoSeq++; ostream << m_EchoSeq; ostream << "tcp echo test"; AsyncSend(); }
bool SessionUDP::AsyncSend(const char* data,size_t size,IPAddress& addr) { if(size>4096) { System::LogTrace("size>4096 in %s",__FUNCTION__); return false; } TempPtrT<MyOverLappedEx> q=lkfq_free.getq(); if(!q) { q.reset(new MyOverLappedEx); } q->size=size; q->peer=addr; memcpy(q->buffer,data,size); return AsyncSend(q); }
void AsyncSend(StreamBuffer& buffer, _UInt32 len) { buffer.Read(m_Wrapper->m_OStream, len); AsyncSend(); }
void AsyncSend(const void* data, _UInt32 len) { m_Wrapper->m_OStream.Write((const _Int8 *)data, len); AsyncSend(); }
bool SessionUDP::AsyncSend(const char* data,size_t size) { return AsyncSend(data,size,sk_local.peer); }
bool IOSocket::AsyncSend(SendIOServerData *data) { return AsyncSend(data, nullptr); }