Refactor most NetworkManager functionality into NetworkHost
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
|
||||
|
||||
#include "NetworkHost.h"
|
||||
#include "NetworkEvent.h"
|
||||
|
||||
|
||||
#include "Drivers/ENetDriver.h"
|
||||
|
||||
@@ -18,6 +20,7 @@ void NetworkHost::Initialize(const NetworkConfig& config)
|
||||
ASSERT(Config.MessageSize > 32); // TODO: Adjust this, not sure what the lowest limit should be.
|
||||
ASSERT(Config.MessagePoolSize > 128);
|
||||
|
||||
// TODO: Dynamic message pool allocation
|
||||
// Setup messages
|
||||
CreateMessageBuffers();
|
||||
MessagePool.Clear();
|
||||
@@ -28,7 +31,7 @@ void NetworkHost::Initialize(const NetworkConfig& config)
|
||||
|
||||
// Setup network driver
|
||||
NetworkDriver = New<ENetDriver>();
|
||||
NetworkDriver->Initialize(Config);
|
||||
NetworkDriver->Initialize(this, Config);
|
||||
|
||||
LOG(Info, "NetworkManager initialized using driver = {0}", static_cast<int>(Config.NetworkDriverType));
|
||||
}
|
||||
@@ -65,3 +68,94 @@ void NetworkHost::DisposeMessageBuffers()
|
||||
Platform::FreePages(MessageBuffer);
|
||||
MessageBuffer = nullptr;
|
||||
}
|
||||
|
||||
bool NetworkHost::Listen()
|
||||
{
|
||||
LOG(Info, "NetworkManager starting to listen on address = {0}:{1}", Config.Address, Config.Port);
|
||||
return NetworkDriver->Listen();
|
||||
}
|
||||
|
||||
bool NetworkHost::Connect()
|
||||
{
|
||||
LOG(Info, "Connecting to {0}:{1}...", Config.Address, Config.Port);
|
||||
return NetworkDriver->Connect();
|
||||
}
|
||||
|
||||
void NetworkHost::Disconnect()
|
||||
{
|
||||
LOG(Info, "Disconnecting...");
|
||||
NetworkDriver->Disconnect();
|
||||
}
|
||||
|
||||
void NetworkHost::Disconnect(const NetworkConnection& connection)
|
||||
{
|
||||
LOG(Info, "Disconnecting connection with id = {0}...", connection.ConnectionId);
|
||||
NetworkDriver->Disconnect(connection);
|
||||
}
|
||||
|
||||
bool NetworkHost::PopEvent(NetworkEvent& eventRef)
|
||||
{
|
||||
// Set host id of the event
|
||||
eventRef.HostId = HostId;
|
||||
return NetworkDriver->PopEvent(&eventRef);
|
||||
}
|
||||
|
||||
NetworkMessage NetworkHost::CreateMessage()
|
||||
{
|
||||
const uint32 messageId = MessagePool.Pop();
|
||||
uint8* messageBuffer = GetMessageBuffer(messageId);
|
||||
|
||||
return NetworkMessage(messageBuffer, messageId, Config.MessageSize, 0, 0);
|
||||
}
|
||||
|
||||
void NetworkHost::RecycleMessage(const NetworkMessage& message)
|
||||
{
|
||||
ASSERT(message.IsValid());
|
||||
#ifdef BUILD_DEBUG
|
||||
ASSERT(MessagePool.Contains(message.MessageId) == false);
|
||||
#endif
|
||||
|
||||
// Return the message id
|
||||
MessagePool.Push(message.MessageId);
|
||||
}
|
||||
|
||||
NetworkMessage NetworkHost::BeginSendMessage()
|
||||
{
|
||||
return CreateMessage();
|
||||
}
|
||||
|
||||
void NetworkHost::AbortSendMessage(const NetworkMessage& message)
|
||||
{
|
||||
ASSERT(message.IsValid());
|
||||
RecycleMessage(message);
|
||||
}
|
||||
|
||||
bool NetworkHost::EndSendMessage(const NetworkChannelType channelType, const NetworkMessage& message)
|
||||
{
|
||||
ASSERT(message.IsValid());
|
||||
|
||||
NetworkDriver->SendMessage(channelType, message);
|
||||
|
||||
RecycleMessage(message);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool NetworkHost::EndSendMessage(const NetworkChannelType channelType, const NetworkMessage& message, const NetworkConnection& target)
|
||||
{
|
||||
ASSERT(message.IsValid());
|
||||
|
||||
NetworkDriver->SendMessage(channelType, message, target);
|
||||
|
||||
RecycleMessage(message);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool NetworkHost::EndSendMessage(const NetworkChannelType channelType, const NetworkMessage& message, Array<NetworkConnection> targets)
|
||||
{
|
||||
ASSERT(message.IsValid());
|
||||
|
||||
NetworkDriver->SendMessage(channelType, message, targets);
|
||||
|
||||
RecycleMessage(message);
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user