#pragma once #include #include #include #include #include #include "network/message.h" #include "command.h" namespace network { class connection { private: /* std::queue< std::pair>> delta_queue; command_queue::commands_map client_commands_queue; bool is_client; //std::chrono::high_resolution_clock::time_point last_time; //double accum = -1.0; */ bool is_client; protected: public: std::function message_handler; virtual void connected() = 0; virtual void send_message(const message &msg) = 0; connection(bool client = false); void set_handler(std::function handler); virtual void disconnect() = 0; virtual void send_data(std::shared_ptr buffer) = 0; enum peer_state { AWAITING_HELLO, CATCHING_UP, ACTIVE, DEAD }; peer_state state; }; class server { protected: void handle_message(connection &conn, const message &msg); std::vector> clients; command_queue::commands_map client_commands_queue; public: void push_delta(double dt, double sync, const command_queue::commands_map &commands); command_queue::commands_map pop_commands(); }; class client { protected: void handle_message(connection &conn, const message &msg); std::shared_ptr conn; std::queue< std::pair> delta_queue; public: std::tuple get_next_delta(); void send_commands(command_queue::commands_map commands); }; }