Loading net/include/net/socket/isocket.hpp +10 −4 Original line number Diff line number Diff line Loading @@ -27,13 +27,19 @@ namespace net virtual NetworkMessage* receive() = 0; std::function<void()> on_connected; std::function<void()> on_disconnected; std::function<void(ConnectionId)> on_peer_connected; std::function<void(ConnectionId)> on_peer_disconnected; void register_on_connected(std::function<void()> callback) { on_connected.push_back(std::move(callback)); } void register_on_disconnected(std::function<void()> callback) { on_disconnected.push_back(std::move(callback)); } void register_on_peer_connected(std::function<void(ConnectionId)> callback) { on_peer_connected.push_back(std::move(callback)); } void register_on_peer_disconnected(std::function<void(ConnectionId)> callback) { on_peer_disconnected.push_back(std::move(callback)); } // Update the socket, process incoming, call at least once per frame virtual void update() = 0; virtual int get_max_message_size() = 0; protected: std::vector<std::function<void()>> on_connected; std::vector<std::function<void()>> on_disconnected; std::vector<std::function<void(ConnectionId)>> on_peer_connected; std::vector<std::function<void(ConnectionId)>> on_peer_disconnected; }; } net/src/socket/gns_socket.cpp +33 −11 Original line number Diff line number Diff line Loading @@ -90,9 +90,12 @@ bool GNSSocket::start_server(int port, int max_connections) } m_status = ConnectionStatus::CONNECTED; if (on_connected) if (!on_connected.empty()) { on_connected(); for (const auto& callback : on_connected) { callback(); } } return true; Loading Loading @@ -235,9 +238,12 @@ void GNSSocket::shutdown() m_port = 0; m_max_connections = 0; if (old_status == ConnectionStatus::CONNECTED && on_disconnected) if (old_status == ConnectionStatus::CONNECTED && !on_disconnected.empty()) { on_disconnected(); for (const auto& callback : on_disconnected) { callback(); } } } Loading Loading @@ -388,9 +394,12 @@ void GNSSocket::handle_connection_established(HSteamNetConnection connection) void GNSSocket::handle_client_connected() { m_status = ConnectionStatus::CONNECTED; if (on_connected) if (!on_connected.empty()) { on_connected(); for (const auto& callback : on_connected) { callback(); } } } Loading Loading @@ -419,7 +428,14 @@ void GNSSocket::handle_new_peer_connection(HSteamNetConnection connection) ConnectionId peer_id = generate_peer_id(); m_peer_to_connection[peer_id] = connection; m_connection_to_peer[connection] = peer_id; on_peer_connected(peer_id); if (!on_peer_connected.empty()) { for (const auto& callback: on_peer_connected) { callback(peer_id); } } } void GNSSocket::handle_connection_closed(HSteamNetConnection connection) Loading @@ -439,13 +455,19 @@ void GNSSocket::handle_connection_closed(HSteamNetConnection connection) if (m_mode == SocketMode::CLIENT && peer_id == SERVER_PEER_ID) { m_status = ConnectionStatus::DISCONNECTED; if (on_disconnected) if (!on_disconnected.empty()) { for (const auto& callback : on_disconnected) { on_disconnected(); callback(); } } else if (on_peer_disconnected) } } else if (!on_peer_disconnected.empty()) { for (const auto& callback : on_peer_disconnected) { on_peer_disconnected(peer_id); callback(peer_id); } } } Loading Loading
net/include/net/socket/isocket.hpp +10 −4 Original line number Diff line number Diff line Loading @@ -27,13 +27,19 @@ namespace net virtual NetworkMessage* receive() = 0; std::function<void()> on_connected; std::function<void()> on_disconnected; std::function<void(ConnectionId)> on_peer_connected; std::function<void(ConnectionId)> on_peer_disconnected; void register_on_connected(std::function<void()> callback) { on_connected.push_back(std::move(callback)); } void register_on_disconnected(std::function<void()> callback) { on_disconnected.push_back(std::move(callback)); } void register_on_peer_connected(std::function<void(ConnectionId)> callback) { on_peer_connected.push_back(std::move(callback)); } void register_on_peer_disconnected(std::function<void(ConnectionId)> callback) { on_peer_disconnected.push_back(std::move(callback)); } // Update the socket, process incoming, call at least once per frame virtual void update() = 0; virtual int get_max_message_size() = 0; protected: std::vector<std::function<void()>> on_connected; std::vector<std::function<void()>> on_disconnected; std::vector<std::function<void(ConnectionId)>> on_peer_connected; std::vector<std::function<void(ConnectionId)>> on_peer_disconnected; }; }
net/src/socket/gns_socket.cpp +33 −11 Original line number Diff line number Diff line Loading @@ -90,9 +90,12 @@ bool GNSSocket::start_server(int port, int max_connections) } m_status = ConnectionStatus::CONNECTED; if (on_connected) if (!on_connected.empty()) { on_connected(); for (const auto& callback : on_connected) { callback(); } } return true; Loading Loading @@ -235,9 +238,12 @@ void GNSSocket::shutdown() m_port = 0; m_max_connections = 0; if (old_status == ConnectionStatus::CONNECTED && on_disconnected) if (old_status == ConnectionStatus::CONNECTED && !on_disconnected.empty()) { on_disconnected(); for (const auto& callback : on_disconnected) { callback(); } } } Loading Loading @@ -388,9 +394,12 @@ void GNSSocket::handle_connection_established(HSteamNetConnection connection) void GNSSocket::handle_client_connected() { m_status = ConnectionStatus::CONNECTED; if (on_connected) if (!on_connected.empty()) { on_connected(); for (const auto& callback : on_connected) { callback(); } } } Loading Loading @@ -419,7 +428,14 @@ void GNSSocket::handle_new_peer_connection(HSteamNetConnection connection) ConnectionId peer_id = generate_peer_id(); m_peer_to_connection[peer_id] = connection; m_connection_to_peer[connection] = peer_id; on_peer_connected(peer_id); if (!on_peer_connected.empty()) { for (const auto& callback: on_peer_connected) { callback(peer_id); } } } void GNSSocket::handle_connection_closed(HSteamNetConnection connection) Loading @@ -439,13 +455,19 @@ void GNSSocket::handle_connection_closed(HSteamNetConnection connection) if (m_mode == SocketMode::CLIENT && peer_id == SERVER_PEER_ID) { m_status = ConnectionStatus::DISCONNECTED; if (on_disconnected) if (!on_disconnected.empty()) { for (const auto& callback : on_disconnected) { on_disconnected(); callback(); } } else if (on_peer_disconnected) } } else if (!on_peer_disconnected.empty()) { for (const auto& callback : on_peer_disconnected) { on_peer_disconnected(peer_id); callback(peer_id); } } } Loading