From e7f899309cbb73a98356dd7b797ecc46735c0460 Mon Sep 17 00:00:00 2001 From: Damian Korczowski Date: Fri, 16 Apr 2021 22:08:59 +0200 Subject: [PATCH] Add simple SendMessage with single target --- Source/Engine/Networking/Drivers/ENetDriver.cpp | 15 +++++++++++++-- Source/Engine/Networking/Drivers/ENetDriver.h | 1 + Source/Engine/Networking/INetworkDriver.h | 1 + Source/Engine/Networking/NetworkManager.cpp | 12 ++++++++++++ Source/Engine/Networking/NetworkManager.h | 1 + 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/Source/Engine/Networking/Drivers/ENetDriver.cpp b/Source/Engine/Networking/Drivers/ENetDriver.cpp index 029226d36..ac53d0f9e 100644 --- a/Source/Engine/Networking/Drivers/ENetDriver.cpp +++ b/Source/Engine/Networking/Drivers/ENetDriver.cpp @@ -205,13 +205,24 @@ void ENetDriver::SendMessage(const NetworkChannelType channelType, const Network SendPacketToPeer((ENetPeer*)_peer, channelType, message); } +void ENetDriver::SendMessage(NetworkChannelType channelType, const NetworkMessage& message, NetworkConnection target) +{ + ASSERT(IsServer()); + + ENetPeer* peer = *(ENetPeer**)_peerMap.TryGet(target.ConnectionId); + ASSERT(peer != nullptr); + ASSERT(peer->state == ENET_PEER_STATE_CONNECTED); + + SendPacketToPeer(peer, channelType, message); +} + void ENetDriver::SendMessage(const NetworkChannelType channelType, const NetworkMessage& message, Array targets) { ASSERT(IsServer()); - for(NetworkConnection connection : targets) + for(NetworkConnection target : targets) { - ENetPeer* peer = *(ENetPeer**)_peerMap.TryGet(connection.ConnectionId); + ENetPeer* peer = *(ENetPeer**)_peerMap.TryGet(target.ConnectionId); ASSERT(peer != nullptr); ASSERT(peer->state == ENET_PEER_STATE_CONNECTED); diff --git a/Source/Engine/Networking/Drivers/ENetDriver.h b/Source/Engine/Networking/Drivers/ENetDriver.h index 011a498b8..a64c85783 100644 --- a/Source/Engine/Networking/Drivers/ENetDriver.h +++ b/Source/Engine/Networking/Drivers/ENetDriver.h @@ -25,6 +25,7 @@ public: bool PopEvent(NetworkEvent* eventPtr) override; void SendMessage(NetworkChannelType channelType, const NetworkMessage& message) override; + void SendMessage(NetworkChannelType channelType, const NetworkMessage& message, NetworkConnection target) override; void SendMessage(NetworkChannelType channelType, const NetworkMessage& message, Array targets) override; private: diff --git a/Source/Engine/Networking/INetworkDriver.h b/Source/Engine/Networking/INetworkDriver.h index 34abc69f7..f3b365693 100644 --- a/Source/Engine/Networking/INetworkDriver.h +++ b/Source/Engine/Networking/INetworkDriver.h @@ -19,6 +19,7 @@ public: virtual bool PopEvent(NetworkEvent* eventPtr) = 0; virtual void SendMessage(NetworkChannelType channelType, const NetworkMessage& message) = 0; + virtual void SendMessage(NetworkChannelType channelType, const NetworkMessage& message, NetworkConnection target) = 0; virtual void SendMessage(NetworkChannelType channelType, const NetworkMessage& message, Array targets) = 0; // TODO: Stats API diff --git a/Source/Engine/Networking/NetworkManager.cpp b/Source/Engine/Networking/NetworkManager.cpp index ba92adb3a..7e93510c6 100644 --- a/Source/Engine/Networking/NetworkManager.cpp +++ b/Source/Engine/Networking/NetworkManager.cpp @@ -137,6 +137,18 @@ bool NetworkManager::EndSendMessage(const int hostId, const NetworkChannelType c return false; } +bool NetworkManager::EndSendMessage(const int hostId, const NetworkChannelType channelType, const NetworkMessage& message, const NetworkConnection& target) +{ + ASSERT(Hosts[hostId].IsValid()); + NetworkHost& host = Hosts[hostId]; + ASSERT(message.IsValid()); + + host.NetworkDriver->SendMessage(channelType, message, target); + + RecycleMessage(hostId, message); + return false; +} + bool NetworkManager::EndSendMessage(const int hostId, const NetworkChannelType channelType, const NetworkMessage& message, const Array targets) { ASSERT(Hosts[hostId].IsValid()); diff --git a/Source/Engine/Networking/NetworkManager.h b/Source/Engine/Networking/NetworkManager.h index ccc4b8809..79289398a 100644 --- a/Source/Engine/Networking/NetworkManager.h +++ b/Source/Engine/Networking/NetworkManager.h @@ -26,6 +26,7 @@ public: API_FUNCTION() static NetworkMessage BeginSendMessage(int hostId); API_FUNCTION() static void AbortSendMessage(int hostId, const NetworkMessage& message); API_FUNCTION() static bool EndSendMessage(int hostId, NetworkChannelType channelType, const NetworkMessage& message); + API_FUNCTION() static bool EndSendMessage(int hostId, NetworkChannelType channelType, const NetworkMessage& message, const NetworkConnection& target); API_FUNCTION() static bool EndSendMessage(int hostId, NetworkChannelType channelType, const NetworkMessage& message, Array targets); // TODO: Stats API