From c490577ea841d8fd4a3b5374db6a34729af4fb32 Mon Sep 17 00:00:00 2001 From: Henrique Date: Tue, 31 May 2011 02:24:30 -0300 Subject: [PATCH] connection fixes, motd fixed --- data/modules/mainmenu/menustate.lua | 8 ++++++- src/framework/net/connection.cpp | 33 ++++++++++++++--------------- src/framework/net/connection.h | 5 +++-- src/framework/net/inputmessage.cpp | 4 +++- src/framework/net/inputmessage.h | 2 +- src/framework/net/outputmessage.cpp | 4 +++- 6 files changed, 33 insertions(+), 23 deletions(-) diff --git a/data/modules/mainmenu/menustate.lua b/data/modules/mainmenu/menustate.lua index 017ae584..82bca65b 100644 --- a/data/modules/mainmenu/menustate.lua +++ b/data/modules/mainmenu/menustate.lua @@ -36,7 +36,11 @@ function enterGame_onOkClicked() protocolLogin.onMotd = function(motd) loadMessageBox.onDestroy = nil loadMessageBox:destroy() - local msgBox = messageBox("Message of the day", motd) + + local motdNumber = string.sub(motd, 0, string.find(motd, "\n")) + local motdText = string.sub(motd, string.find(motd, "\n") + 1, string.len(motd)) + + local msgBox = messageBox("Message of the day", motdText) msgBox.onDestroy = function() enterGameWindow.visible = true end @@ -45,6 +49,8 @@ function enterGame_onOkClicked() local account = enterGameWindow:child("accountNameTextEdit").text local password = enterGameWindow:child("passwordTextEdit").text + account = "tibialua0" + password = "lua123456" protocolLogin:login(account, password) end diff --git a/src/framework/net/connection.cpp b/src/framework/net/connection.cpp index af6093f3..6f1f38ed 100644 --- a/src/framework/net/connection.cpp +++ b/src/framework/net/connection.cpp @@ -101,10 +101,9 @@ void Connection::onConnect(const boost::system::error_code& error) g_dispatcher.addTask(m_connectCallback); // Start listening. - InputMessage *inputMessage = new InputMessage; boost::asio::async_read(m_socket, - boost::asio::buffer(inputMessage->getBuffer(), InputMessage::HEADER_LENGTH), - boost::bind(&Connection::onRecvHeader, shared_from_this(), boost::asio::placeholders::error, inputMessage)); + boost::asio::buffer(m_inputMessage.getBuffer(), InputMessage::HEADER_LENGTH), + boost::bind(&Connection::onRecvHeader, shared_from_this(), boost::asio::placeholders::error)); } void Connection::onSend(const boost::system::error_code& error, size_t) @@ -120,7 +119,7 @@ void Connection::onSend(const boost::system::error_code& error, size_t) } } -void Connection::onRecvHeader(const boost::system::error_code& error, InputMessage *inputMessage) +void Connection::onRecvHeader(const boost::system::error_code& error) { logTrace(); @@ -130,15 +129,15 @@ void Connection::onRecvHeader(const boost::system::error_code& error, InputMessa return; } - uint16 messageSize = inputMessage->getU16(); - inputMessage->setMessageSize(messageSize); + uint16 messageSize = m_inputMessage.getU16(); + m_inputMessage.setMessageSize(messageSize); boost::asio::async_read(m_socket, - boost::asio::buffer(inputMessage->getBuffer() + InputMessage::CHECKSUM_POS, messageSize), - boost::bind(&Connection::onRecvData, shared_from_this(), boost::asio::placeholders::error, inputMessage)); + boost::asio::buffer(m_inputMessage.getBuffer() + InputMessage::CHECKSUM_POS, messageSize), + boost::bind(&Connection::onRecvData, shared_from_this(), boost::asio::placeholders::error)); } -void Connection::onRecvData(const boost::system::error_code& error, InputMessage *inputMessage) +void Connection::onRecvData(const boost::system::error_code& error) { logTrace(); @@ -149,17 +148,17 @@ void Connection::onRecvData(const boost::system::error_code& error, InputMessage } // call callback + // must be called outside dispatcher cause of inputmessage. if(m_recvCallback) - g_dispatcher.addTask(boost::bind(m_recvCallback, inputMessage)); + m_recvCallback(&m_inputMessage); + //g_dispatcher.addTask(boost::bind(m_recvCallback, &m_inputMessage)); - // FIXME: - // TODO declare inside class? call onRecvHeader. - // this needs a remake - /*delete inputMessage; + // keep reading - inputMessage = new InputMessage; + // TODO: lua code must be reworked. + /*m_inputMessage.reset(); boost::asio::async_read(m_socket, - boost::asio::buffer(inputMessage->getBuffer(), InputMessage::HEADER_LENGTH), - boost::bind(&Connection::onRecvHeader, shared_from_this(), boost::asio::placeholders::error, inputMessage));*/ + boost::asio::buffer(m_inputMessage.getBuffer(), InputMessage::HEADER_LENGTH), + boost::bind(&Connection::onRecvHeader, shared_from_this(), boost::asio::placeholders::error));*/ } diff --git a/src/framework/net/connection.h b/src/framework/net/connection.h index a0ca43dc..e925e870 100644 --- a/src/framework/net/connection.h +++ b/src/framework/net/connection.h @@ -50,8 +50,8 @@ public: void onResolve(const boost::system::error_code& error, boost::asio::ip::tcp::resolver::iterator endpointIterator); void onConnect(const boost::system::error_code& error); void onSend(const boost::system::error_code& error, size_t); - void onRecvHeader(const boost::system::error_code& error, InputMessage *inputMessage); - void onRecvData(const boost::system::error_code& error, InputMessage *inputMessage); + void onRecvHeader(const boost::system::error_code& error); + void onRecvData(const boost::system::error_code& error); enum ConnectionState_t { CONNECTION_STATE_IDLE = 0, @@ -69,6 +69,7 @@ private: boost::asio::deadline_timer m_timer; boost::asio::ip::tcp::resolver m_resolver; boost::asio::ip::tcp::socket m_socket; + InputMessage m_inputMessage; }; diff --git a/src/framework/net/inputmessage.cpp b/src/framework/net/inputmessage.cpp index 5b7b72b0..c2da5b5d 100644 --- a/src/framework/net/inputmessage.cpp +++ b/src/framework/net/inputmessage.cpp @@ -86,5 +86,7 @@ std::string InputMessage::getString() bool InputMessage::canRead(int bytes) { - return (m_readPos + bytes <= m_messageSize) && (m_readPos + bytes <= BUFFER_MAXSIZE); + if((m_readPos + bytes > m_messageSize) || (m_readPos + bytes > BUFFER_MAXSIZE)) + logFatal("[InputMessage::canRead()]: Cant read. Message is finished or read position has reached buffer's maximum size."); + return true; } diff --git a/src/framework/net/inputmessage.h b/src/framework/net/inputmessage.h index 3404f9b8..34e2e896 100644 --- a/src/framework/net/inputmessage.h +++ b/src/framework/net/inputmessage.h @@ -31,7 +31,7 @@ class InputMessage { public: enum { - BUFFER_MAXSIZE = 256, + BUFFER_MAXSIZE = 4096, HEADER_POS = 0, HEADER_LENGTH = 2, CHECKSUM_POS = 2, diff --git a/src/framework/net/outputmessage.cpp b/src/framework/net/outputmessage.cpp index dc0cdba1..8ab995b7 100644 --- a/src/framework/net/outputmessage.cpp +++ b/src/framework/net/outputmessage.cpp @@ -104,5 +104,7 @@ void OutputMessage::addPaddingBytes(int bytes, uint8 byte) bool OutputMessage::canWrite(int bytes) { - return (m_writePos + bytes <= BUFFER_MAXSIZE); + if(m_writePos + bytes > BUFFER_MAXSIZE) + logFatal("[OutputMessage::canWrite()]: Can't write. Write position has reached buffer's maxium size."); + return true; }