summaryrefslogtreecommitdiff
path: root/src/blu_cat/net/client/client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/blu_cat/net/client/client.cpp')
-rw-r--r--src/blu_cat/net/client/client.cpp43
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;
}
}