From 672e3e022ad34592acfd8614e97aa4daef8ed376 Mon Sep 17 00:00:00 2001 From: milek7 Date: Mon, 28 Jan 2019 23:19:41 +0100 Subject: [PATCH] work --- CMakeLists.txt | 4 ++++ network/backend/asio.cpp | 29 ++++++++++++++++++++--------- network/backend/asio.h | 3 +++ network/network.cpp | 12 ++++++++---- network/network.h | 2 +- 5 files changed, 36 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 15cb97ce..5a65d4dd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -258,3 +258,7 @@ target_link_libraries(${PROJECT_NAME} ASIO::ASIO) if (WIN32) target_link_libraries(${PROJECT_NAME} ws2_32) endif() + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize=undefined") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize=undefined") +set(CMAKE_LD_FLAGS "${CMAKE_LD_FLAGS} -fsanitize=address -fsanitize=undefined") diff --git a/network/backend/asio.cpp b/network/backend/asio.cpp index 99f270df..7593374f 100644 --- a/network/backend/asio.cpp +++ b/network/backend/asio.cpp @@ -3,7 +3,8 @@ #include "Logs.h" network::tcp::connection::connection(asio::io_context &io_ctx, bool client, size_t counter) - : network::connection(client, counter), m_socket(io_ctx) + : network::connection(client, counter), + m_socket(io_ctx) { m_header_buffer.resize(8); } @@ -165,9 +166,10 @@ void network::tcp::server::handle_accept(std::shared_ptr conn, const // ------------------ -network::tcp::client::client(asio::io_context &io_ctx, const std::string &host, uint32_t port) - : host(host), port(port), io_ctx(io_ctx) +network::tcp::client::client(asio::io_context &io_ctxx, const std::string &hostarg, uint32_t portarg) + : host(hostarg), port(portarg), io_ctx(io_ctxx) { + connect(); } void network::tcp::client::connect() @@ -175,21 +177,30 @@ void network::tcp::client::connect() if (this->conn) return; - std::shared_ptr conn = std::make_shared(io_ctx, true, messages_counter); - conn->set_handler(std::bind(&client::handle_message, this, conn, std::placeholders::_1)); + std::cout << "create sock" << std::endl; + connection *sockr = new connection(io_ctx, false, 0); + //std::cout << "sock crt" << std::endl; + //std::unique_ptr sock(sockr); + //this->conn = sock; + //connection *sockr = new connection(io_ctx, true, delta_count); + + std::shared_ptr sock(sockr); + this->conn = sock; + sock->set_handler(std::bind(&client::handle_message, this, sock, std::placeholders::_1)); asio::ip::tcp::endpoint endpoint( asio::ip::address::from_string(host), port); - conn->m_socket.open(endpoint.protocol()); - conn->m_socket.set_option(asio::ip::tcp::no_delay(true)); - conn->m_socket.async_connect(endpoint, + sock->m_socket.open(endpoint.protocol()); + sock->m_socket.set_option(asio::ip::tcp::no_delay(true)); + sock->m_socket.async_connect(endpoint, std::bind(&client::handle_accept, this, std::placeholders::_1)); + std::cout << "connect start" <conn = conn; } void network::tcp::client::handle_accept(const asio::error_code &err) { + std::cout << "connect handl" <connected(); diff --git a/network/backend/asio.h b/network/backend/asio.h index 7bc7a891..5d67ec58 100644 --- a/network/backend/asio.h +++ b/network/backend/asio.h @@ -1,4 +1,7 @@ #include "network/network.h" +//#define ASIO_ENABLE_HANDLER_TRACKING +#define ASIO_DISABLE_THREADS + #include namespace network::tcp diff --git a/network/network.cpp b/network/network.cpp index 35c004ec..988dc7f4 100644 --- a/network/network.cpp +++ b/network/network.cpp @@ -216,15 +216,19 @@ void network::server::handle_message(std::shared_ptr conn, const mes // ------------ // client - +int zzz = 10; std::tuple network::client::get_next_delta() { + /* if (conn && conn->state == connection::DEAD) { conn = nullptr; } + */ if (!conn) { - connect(); + zzz--; + if (zzz < 0) + connect(); } if (delta_queue.empty()) { @@ -258,8 +262,6 @@ void network::client::handle_message(std::shared_ptr conn, const mes return; } - messages_counter++; - if (msg.type == message::SERVER_HELLO) { auto cmd = dynamic_cast(msg); conn->state = connection::ACTIVE; @@ -270,6 +272,8 @@ void network::client::handle_message(std::shared_ptr conn, const mes WriteLog("net: accept received", logtype::net); } else if (msg.type == message::FRAME_INFO) { + delta_count++; + auto delta = dynamic_cast(msg); auto now = std::chrono::high_resolution_clock::now(); delta_queue.push(std::make_pair(now, delta)); diff --git a/network/network.h b/network/network.h index 584e0440..3d77c3fd 100644 --- a/network/network.h +++ b/network/network.h @@ -84,7 +84,7 @@ namespace network virtual void connect() = 0; void handle_message(std::shared_ptr conn, const message &msg); std::shared_ptr conn; - size_t messages_counter = 0; + size_t delta_count = 0; std::queue< std::pair