Place new send code in a separate class, and use it also for the chat cleaner communication. Data class "encoded packet" is no longer used, it was overhead.

This commit is contained in:
lotodore
2011-02-18 19:22:44 +00:00
parent 46a136bc8b
commit db3fa66ec5
9 changed files with 194 additions and 236 deletions
+5 -25
View File
@@ -18,7 +18,7 @@
***************************************************************************/
#include <net/chatcleanermanager.h>
#include <net/encodedpacket.h>
#include <net/senddatamanager.h>
#include <boost/bind.hpp>
#include <core/loghelper.h>
#include <third_party/asn1/ChatCleanerMessage.h>
@@ -36,6 +36,8 @@ ChatCleanerManager::ChatCleanerManager(ChatCleanerCallback &cb, boost::shared_pt
m_recvBuf[0] = 0;
m_resolver.reset(
new boost::asio::ip::tcp::resolver(*m_ioService));
m_sendManager.reset(
new SendDataManager);
}
ChatCleanerManager::~ChatCleanerManager()
@@ -159,18 +161,6 @@ ChatCleanerManager::HandleConnect(const boost::system::error_code& ec,
}
}
void
ChatCleanerManager::HandleWrite(const boost::system::error_code &ec,
boost::shared_ptr<EncodedPacket> /*tmpPacket*/)
{
if (ec && ec != boost::asio::error::operation_aborted) {
LOG_ERROR("Error sending message to chat cleaner.");
boost::system::error_code ec;
m_socket->close(ec);
m_connected = false;
}
}
void
ChatCleanerManager::HandleRead(const boost::system::error_code &ec, size_t bytesRead)
{
@@ -258,22 +248,12 @@ ChatCleanerManager::HandleMessage(InternalChatCleanerPacket &msg)
void
ChatCleanerManager::SendMessageToServer(InternalChatCleanerPacket &msg)
{
unsigned char buf[MAX_CLEANER_PACKET_SIZE];
asn_enc_rval_t e = der_encode_to_buffer(&asn_DEF_ChatCleanerMessage, msg.GetMsg(), buf, MAX_CLEANER_PACKET_SIZE);
asn_enc_rval_t e = der_encode(&asn_DEF_ChatCleanerMessage, msg.GetMsg(), &SendDataManager::EncodeToBuf, &m_sendManager);
if (e.encoded == -1)
LOG_ERROR("Failed to encode chat cleaner packet: " << msg.GetMsg()->present);
else {
boost::shared_ptr<EncodedPacket> tmpPacket(new EncodedPacket(buf, e.encoded));
// Actually, this should not be done (parallel async_write calls might break data).
// But we do not want to create additional buffers here.
boost::asio::async_write(
*m_socket,
boost::asio::buffer(tmpPacket->GetData(), tmpPacket->GetSize()),
boost::bind(&ChatCleanerManager::HandleWrite,
shared_from_this(),
boost::asio::placeholders::error,
tmpPacket));
m_sendManager->AsyncSendNextPacket(m_socket);
}
}