implemented cnm::close_connection() + general code cleaning + added TODOS
This commit is contained in:
parent
6f34d28458
commit
5cfef17cc2
@ -47,6 +47,18 @@ namespace chat
|
||||
});
|
||||
}
|
||||
|
||||
void close_connection()
|
||||
{
|
||||
_ios.post([this]
|
||||
{
|
||||
_os << chat_message(message::BYE);
|
||||
asio::write(_socket, _osb);
|
||||
// TODO: handle last server message
|
||||
_socket.close();
|
||||
_ios.stop();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/* internal methods */
|
||||
private:
|
||||
@ -71,53 +83,57 @@ namespace chat
|
||||
{
|
||||
throw_if_error(ec);
|
||||
|
||||
std::cout << receive_message_sync() << '\n';
|
||||
|
||||
_os << chat_message(message::HELLO);
|
||||
_os << chat_message(message::NEPTUN, _login);
|
||||
std::reverse(_login.begin(), _login.end());
|
||||
_os << chat_message(message::PASSW, _login);
|
||||
asio::write(_socket, _osb);
|
||||
asio::write(_socket, _osb); // handshake is handled synchronously
|
||||
|
||||
// TODO: do something with these couts (decide whether to display this or not)
|
||||
std::cout << receive_message_sync() << '\n';
|
||||
std::cout << receive_message_sync() << '\n';
|
||||
std::cout << receive_message_sync() << '\n';
|
||||
std::cout << receive_message_sync() << '\n';
|
||||
|
||||
receive();
|
||||
receive(); // then flow goes to receive-loop
|
||||
}
|
||||
|
||||
std::string receive_message_sync()
|
||||
{
|
||||
boost::system::error_code ec;
|
||||
|
||||
std::string data;
|
||||
asio::read_until(_socket, _isb, byte(message::TERM));
|
||||
asio::read_until(_socket, _isb, byte(message::TERM), ec);
|
||||
std::getline(_is, data, byte(message::TERM));
|
||||
|
||||
throw_if_error(ec);
|
||||
return data;
|
||||
}
|
||||
|
||||
void receive()
|
||||
{
|
||||
asio::async_read_until(_socket, _isb, byte(message::TERM),
|
||||
[this](boost::system::error_code ec, size_t)
|
||||
{
|
||||
throw_if_error(ec);
|
||||
asio::async_read_until
|
||||
(_socket, _isb, byte(message::TERM),
|
||||
[this](boost::system::error_code ec, size_t)
|
||||
{
|
||||
throw_if_error(ec);
|
||||
|
||||
std::string data;
|
||||
std::getline(_is, data, byte(message::TERM));
|
||||
std::string data;
|
||||
std::getline(_is, data, byte(message::TERM));
|
||||
|
||||
switch (data[0])
|
||||
{
|
||||
// TODO: handle stuff
|
||||
case byte(message::LOGIN):
|
||||
std::cout << "login\n";
|
||||
break;
|
||||
case byte(message::PING):
|
||||
std::cout << "ping\n";
|
||||
break;
|
||||
}
|
||||
switch (data[0])
|
||||
{
|
||||
// TODO: handle stuff
|
||||
case byte(message::PING):
|
||||
send(chat_message(message::PONG));
|
||||
break;
|
||||
case byte(message::MESSAGE):
|
||||
std::cout << data << '\n';
|
||||
break;
|
||||
}
|
||||
|
||||
receive();
|
||||
});
|
||||
receive();
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user