diff options
Diffstat (limited to 'src/blu_cat/net/client/client.cpp')
-rw-r--r-- | src/blu_cat/net/client/client.cpp | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/src/blu_cat/net/client/client.cpp b/src/blu_cat/net/client/client.cpp index 13601e5..6ee6046 100644 --- a/src/blu_cat/net/client/client.cpp +++ b/src/blu_cat/net/client/client.cpp @@ -20,44 +20,45 @@ namespace BluCat::NET { void -Client::read_messages() +Client::connect(const char *host, const UI16 port) { - std::scoped_lock lock(this->mut); - if(this->connection) this->connection->read_messages(); + if(this->connection) return; + + asio::error_code error; + asio::ip::tcp::endpoint endpoint{asio::ip::make_address(host, error), port}; + + asio::ip::tcp::socket socket(this->io_context); + socket.connect(endpoint); + + this->connection = new Connection( + this, this->io_context, std::move(socket), 0); + + this->thread_context = std::thread([this](){this->io_context.run();}); } void -Client::end_connection(unsigned long index) +Client::disconnect(unsigned long index) { - std::scoped_lock lock(this->mut); + if(!this->connection) return; + this->io_context.stop(); delete this->connection; this->connection = nullptr; } -Client::Client( - MessageCallback *(*callback_instantiator)(), const char *host, - const uint16_t port): - callback_instantiator{callback_instantiator} +Client::Client(const char *host, const UI16 port) { - asio::error_code error; - asio::ip::tcp::endpoint endpoint{asio::ip::make_address(host, error), port}; - - asio::ip::tcp::socket socket(this->io_context); - socket.connect(endpoint); - - this->connection = new Connection( - this->callback_instantiator(), this, this->io_context, std::move(socket), - 0); + this->connect(host, port); +} - this->thread_context = std::thread([this](){this->io_context.run();}); +Client::Client() +{ } Client::~Client() { - this->io_context.stop(); + this->disconnect(0); if(this->thread_context.joinable()) this->thread_context.join(); - if(this->connection) delete this->connection; } } |