diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a65d4dd..665fba2a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,10 @@ include(cotire) set(DEPS_DIR ${DEPS_DIR} "${CMAKE_SOURCE_DIR}/ref") project("eu07") +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") + set(CMAKE_CXX_STANDARD 17) include_directories("." "Console" @@ -258,7 +262,3 @@ 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 7593374f..3c00875c 100644 --- a/network/backend/asio.cpp +++ b/network/backend/asio.cpp @@ -169,7 +169,6 @@ void network::tcp::server::handle_accept(std::shared_ptr conn, const 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() @@ -178,24 +177,20 @@ void network::tcp::client::connect() return; 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)); + std::shared_ptr conn = std::make_shared(io_ctx, true, resume_frame_counter); + conn->set_handler(std::bind(&client::handle_message, this, conn, std::placeholders::_1)); asio::ip::tcp::endpoint endpoint( asio::ip::address::from_string(host), port); - sock->m_socket.open(endpoint.protocol()); - sock->m_socket.set_option(asio::ip::tcp::no_delay(true)); - sock->m_socket.async_connect(endpoint, + conn->m_socket.open(endpoint.protocol()); + conn->m_socket.set_option(asio::ip::tcp::no_delay(true)); + conn->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) diff --git a/network/backend/asio.h b/network/backend/asio.h index 5d67ec58..c9ea54e9 100644 --- a/network/backend/asio.h +++ b/network/backend/asio.h @@ -1,6 +1,4 @@ #include "network/network.h" -//#define ASIO_ENABLE_HANDLER_TRACKING -#define ASIO_DISABLE_THREADS #include diff --git a/network/manager.cpp b/network/manager.cpp index 43d9518f..298497df 100644 --- a/network/manager.cpp +++ b/network/manager.cpp @@ -44,6 +44,7 @@ network::manager::manager() void network::manager::poll() { + io_context.restart(); io_context.poll(); } diff --git a/network/network.cpp b/network/network.cpp index 988dc7f4..5cb1b4a1 100644 --- a/network/network.cpp +++ b/network/network.cpp @@ -70,48 +70,6 @@ void network::connection::send_complete(std::shared_ptr buf) } } - /* - if (msg->type == message::TYPE_MAX) - { - disconnect(); - return; - } - - if (is_client) { - if (msg->type == message::SERVER_HELLO) { - auto cmd = std::dynamic_pointer_cast(msg); - - state = ACTIVE; - Global.random_seed = cmd->seed; - Global.random_engine.seed(Global.random_seed); - - WriteLog("net: accept received", logtype::net); - } - else if (msg->type == message::FRAME_INFO) { - auto delta = std::dynamic_pointer_cast(msg); - auto now = std::chrono::high_resolution_clock::now(); - delta_queue.push(std::make_pair(now, delta)); - } - - } else { - if (msg->type == message::CLIENT_HELLO) { - server_hello reply; - reply.seed = Global.random_seed; - state = ACTIVE; - - send_message(reply); - - WriteLog("net: client accepted", logtype::net); - } - else if (msg->type == message::REQUEST_COMMAND) { - auto cmd = std::dynamic_pointer_cast(msg); - - for (auto const &kv : cmd->commands) - client_commands_queue.emplace(kv); - } - } - */ - // -------------- /* @@ -141,12 +99,6 @@ std::tuple network::connection::get //} } -command_queue::commands_map network::connection::pop_commands() -{ - command_queue::commands_map map(client_commands_queue); - client_commands_queue.clear(); - return map; -} */ // server @@ -216,14 +168,12 @@ void network::server::handle_message(std::shared_ptr conn, const mes // ------------ // client -int zzz = 10; +int zzz = 20; std::tuple network::client::get_next_delta() { - /* if (conn && conn->state == connection::DEAD) { - conn = nullptr; + conn.reset(); } - */ if (!conn) { zzz--; @@ -272,7 +222,7 @@ 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++; + resume_frame_counter++; auto delta = dynamic_cast(msg); auto now = std::chrono::high_resolution_clock::now(); diff --git a/network/network.h b/network/network.h index 3d77c3fd..73f6409f 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 delta_count = 0; + size_t resume_frame_counter = 0; std::queue< std::pair