mirror of
https://github.com/edubart/otclient.git
synced 2025-12-16 13:49:47 +01:00
login/logout/ctrl+g working correctly
This commit is contained in:
@@ -34,6 +34,7 @@ Connection::Connection() :
|
||||
m_socket(g_ioService)
|
||||
{
|
||||
m_connected = false;
|
||||
m_connecting = false;
|
||||
}
|
||||
|
||||
void Connection::poll()
|
||||
@@ -50,6 +51,7 @@ void Connection::terminate()
|
||||
void Connection::connect(const std::string& host, uint16 port, const SimpleCallback& connectCallback)
|
||||
{
|
||||
m_connected = false;
|
||||
m_connecting = true;
|
||||
m_connectCallback = connectCallback;
|
||||
|
||||
asio::ip::tcp::resolver::query query(host, Fw::unsafeCast<std::string>(port));
|
||||
@@ -61,22 +63,23 @@ void Connection::connect(const std::string& host, uint16 port, const SimpleCallb
|
||||
|
||||
void Connection::close()
|
||||
{
|
||||
if(!m_connected)
|
||||
if(!m_connected && !m_connecting)
|
||||
return;
|
||||
|
||||
m_connecting = false;
|
||||
m_connected = false;
|
||||
m_connectCallback = nullptr;
|
||||
m_errorCallback = nullptr;
|
||||
m_recvCallback = nullptr;
|
||||
|
||||
m_readTimer.cancel();
|
||||
m_writeTimer.cancel();
|
||||
|
||||
if(m_socket.is_open()) {
|
||||
m_socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both);
|
||||
boost::system::error_code ec;
|
||||
m_socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
|
||||
m_socket.close();
|
||||
}
|
||||
|
||||
m_connectCallback = nullptr;
|
||||
m_errorCallback = nullptr;
|
||||
m_recvCallback = nullptr;
|
||||
}
|
||||
|
||||
void Connection::write(uint8* buffer, uint16 size)
|
||||
@@ -129,9 +132,10 @@ void Connection::onConnect(const boost::system::error_code& error)
|
||||
{
|
||||
m_readTimer.cancel();
|
||||
|
||||
m_connected = true;
|
||||
m_connecting = false;
|
||||
|
||||
if(!error) {
|
||||
m_connected = true;
|
||||
if(m_connectCallback)
|
||||
g_dispatcher.addEvent(m_connectCallback);
|
||||
} else
|
||||
@@ -174,7 +178,7 @@ void Connection::handleError(const boost::system::error_code& error)
|
||||
if(error != asio::error::operation_aborted) {
|
||||
if(m_errorCallback)
|
||||
g_dispatcher.addEvent(std::bind(m_errorCallback, error));
|
||||
if(m_connected)
|
||||
if(m_connected || m_connecting)
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@ public:
|
||||
|
||||
void setErrorCallback(const ErrorCallback& errorCallback) { m_errorCallback = errorCallback; }
|
||||
|
||||
bool isConnecting() const { return m_connecting; }
|
||||
bool isConnected() const { return m_connected; }
|
||||
|
||||
private:
|
||||
@@ -73,6 +74,7 @@ private:
|
||||
uint8 m_recvBuffer[65538];
|
||||
uint16 m_recvSize;
|
||||
bool m_connected;
|
||||
bool m_connecting;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -44,6 +44,20 @@ void Protocol::disconnect()
|
||||
}
|
||||
}
|
||||
|
||||
bool Protocol::isConnected()
|
||||
{
|
||||
if(m_connection && m_connection->isConnected())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Protocol::isConnecting()
|
||||
{
|
||||
if(m_connection && m_connection->isConnecting())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void Protocol::send(OutputMessage& outputMessage)
|
||||
{
|
||||
// encrypt
|
||||
|
||||
@@ -37,6 +37,9 @@ public:
|
||||
void connect(const std::string& host, uint16 port);
|
||||
void disconnect();
|
||||
|
||||
bool isConnected();
|
||||
bool isConnecting();
|
||||
|
||||
void send(OutputMessage& outputMessage);
|
||||
void recv();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user