From e2dbcea48735da835f460496e829705fa20bf259 Mon Sep 17 00:00:00 2001 From: phosit Date: Tue, 3 Mar 2026 21:51:22 +0100 Subject: [PATCH] Remove INetSession This was only used in the `CNetFileTransferer`. Only one function is called. That can also be a `std::function`. --- source/network/NetFileTransfer.cpp | 10 +++++----- source/network/NetFileTransfer.h | 14 +++++++------- source/network/NetSession.cpp | 6 +++--- source/network/NetSession.h | 20 +++++--------------- source/network/tests/test_FileTransfer.h | 9 ++++----- 5 files changed, 24 insertions(+), 35 deletions(-) diff --git a/source/network/NetFileTransfer.cpp b/source/network/NetFileTransfer.cpp index 3d45672999..d989ec1136 100644 --- a/source/network/NetFileTransfer.cpp +++ b/source/network/NetFileTransfer.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2025 Wildfire Games. +/* Copyright (C) 2026 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -97,7 +97,7 @@ Status CNetFileTransferer::OnFileTransferData(const CFileTransferDataMessage& me CFileTransferAckMessage ackMessage; ackMessage.m_RequestID = message.m_RequestID; ackMessage.m_NumPackets = 1; // TODO: would be nice to send a single ack for multiple packets at once - m_Session->SendMessage(&ackMessage); + m_SendMessage(&ackMessage); if (task.buffer.size() == task.length) { @@ -155,7 +155,7 @@ void CNetFileTransferer::StartTask(RequestType requestType, std::function(requestType); request.m_RequestID = requestID; - m_Session->SendMessage(&request); + m_SendMessage(&request); } void CNetFileTransferer::StartResponse(u32 requestID, const std::string& data) @@ -171,7 +171,7 @@ void CNetFileTransferer::StartResponse(u32 requestID, const std::string& data) CFileTransferResponseMessage respMessage; respMessage.m_RequestID = requestID; respMessage.m_Length = task.buffer.size(); - m_Session->SendMessage(&respMessage); + m_SendMessage(&respMessage); } void CNetFileTransferer::Poll() @@ -190,7 +190,7 @@ void CNetFileTransferer::Poll() dataMessage.m_Data = task.buffer.substr(task.offset, packetSize); task.offset += packetSize; ++task.packetsInFlight; - m_Session->SendMessage(&dataMessage); + m_SendMessage(&dataMessage); } } diff --git a/source/network/NetFileTransfer.h b/source/network/NetFileTransfer.h index 69ec32dac7..70c4127637 100644 --- a/source/network/NetFileTransfer.h +++ b/source/network/NetFileTransfer.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2025 Wildfire Games. +/* Copyright (C) 2026 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -32,7 +32,6 @@ class CFileTransferAckMessage; class CFileTransferDataMessage; class CFileTransferResponseMessage; class CNetMessage; -class INetSession; // Assume this is sufficiently less than MTU that packets won't get // fragmented or dropped. @@ -59,8 +58,9 @@ public: REJOIN }; - CNetFileTransferer(INetSession* session) - : m_Session(session), m_NextRequestID(1), m_LastProgressReportTime(0) + template + CNetFileTransferer(Session& session) : + m_SendMessage{std::bind_front(&Session::SendMessage, std::ref(session))} { } @@ -107,9 +107,9 @@ private: size_t packetsInFlight; }; - INetSession* m_Session; + std::function m_SendMessage; - u32 m_NextRequestID; + u32 m_NextRequestID{1}; struct AsyncFileReceiveTask @@ -132,7 +132,7 @@ private: using FileSendTasksMap = std::map; FileSendTasksMap m_FileSendTasks; - double m_LastProgressReportTime; + double m_LastProgressReportTime{0}; }; #endif // NETFILETRANSFER_H diff --git a/source/network/NetSession.cpp b/source/network/NetSession.cpp index 513379ecd7..67aff2654e 100644 --- a/source/network/NetSession.cpp +++ b/source/network/NetSession.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2025 Wildfire Games. +/* Copyright (C) 2026 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -36,7 +36,7 @@ constexpr int NETCLIENT_POLL_TIMEOUT = 50; constexpr int CHANNEL_COUNT = 1; CNetClientSession::CNetClientSession(CNetClient& client) : - m_Client(client), m_FileTransferer(this), m_Host(nullptr), m_Server(nullptr), + m_Client(client), m_FileTransferer(*this), m_Host(nullptr), m_Server(nullptr), m_Stats(nullptr), m_IncomingMessages(16), m_OutgoingMessages(16), m_LoopRunning(false), m_ShouldShutdown(false), m_MeanRTT(0), m_LastReceivedTime(0) { @@ -239,7 +239,7 @@ u32 CNetClientSession::GetMeanRTT() const } CNetServerSession::CNetServerSession(CNetServerWorker& server, ENetPeer* peer) : - m_Server(server), m_FileTransferer(this), m_Peer(peer), m_HostID(0), m_GUID(), m_UserName() + m_Server(server), m_FileTransferer(*this), m_Peer(peer), m_HostID(0), m_GUID(), m_UserName() { } diff --git a/source/network/NetSession.h b/source/network/NetSession.h index b01dee737e..f5adaecffd 100644 --- a/source/network/NetSession.h +++ b/source/network/NetSession.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2025 Wildfire Games. +/* Copyright (C) 2026 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -50,22 +50,12 @@ typedef struct _ENetHost ENetHost; * A client runs one session at once; a server typically runs many. */ -/** - * Interface for sessions to which messages can be sent. - */ -class INetSession -{ -public: - virtual ~INetSession() {} - virtual bool SendMessage(const CNetMessage* message) = 0; -}; - /** * The client end of a network session. * Provides an abstraction of the network interface, allowing communication with the server. * The NetClientSession is threaded, so all calls to the public interface must be thread-safe. */ -class CNetClientSession : public INetSession +class CNetClientSession { NONCOPYABLE(CNetClientSession); @@ -94,7 +84,7 @@ public: /** * Queue up a message to send to the server on the next Loop() call. */ - virtual bool SendMessage(const CNetMessage* message) override; + bool SendMessage(const CNetMessage* message); /** * Number of milliseconds since the most recent packet of the server was received. @@ -155,7 +145,7 @@ private: * Thread-safety: * - This is constructed and used by CNetServerWorker in the network server thread. */ -class CNetServerSession : public CFsm, public INetSession +class CNetServerSession : public CFsm { NONCOPYABLE(CNetServerSession); @@ -203,7 +193,7 @@ public: /** * Send a message to the client. */ - virtual bool SendMessage(const CNetMessage* message); + bool SendMessage(const CNetMessage* message); CNetFileTransferer& GetFileTransferer() { return m_FileTransferer; } diff --git a/source/network/tests/test_FileTransfer.h b/source/network/tests/test_FileTransfer.h index fd31be7924..8727402be5 100644 --- a/source/network/tests/test_FileTransfer.h +++ b/source/network/tests/test_FileTransfer.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2025 Wildfire Games. +/* Copyright (C) 2026 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -32,11 +32,10 @@ namespace { constexpr const char* MESSAGECONTENT{"Some example message content"}; -class MessageQueues final : public INetSession +class MessageQueues { public: - ~MessageQueues() final = default; - bool SendMessage(const CNetMessage* message) final + bool SendMessage(const CNetMessage* message) { switch (message->GetType()) { @@ -77,7 +76,7 @@ void CheckSizes(MessageQueues& queues, size_t requestSize, size_t responseSize, struct Participant { MessageQueues queues; - CNetFileTransferer transferer{&queues}; + CNetFileTransferer transferer{queues}; }; }