From 270ee9a0bc4c3682b8e3cec5795adcf181e02723 Mon Sep 17 00:00:00 2001 From: RD42 <42702181+dashr9230@users.noreply.github.com> Date: Tue, 13 Feb 2024 23:22:42 +0800 Subject: [PATCH] [raknet] Add TCPInterface class * Adds TCPInterface ctor * Adds `TCPInterface::Receive()` * Adds `TCPInterface::HasLostConnection()` --- raknet/NetworkTypes.h | 19 +++++++++++++++++++ raknet/TCPInterface.cpp | 28 ++++++++++++++++++++++++++++ raknet/TCPInterface.h | 31 +++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 raknet/TCPInterface.cpp create mode 100644 raknet/TCPInterface.h diff --git a/raknet/NetworkTypes.h b/raknet/NetworkTypes.h index 9a9b8e9..8e38b74 100644 --- a/raknet/NetworkTypes.h +++ b/raknet/NetworkTypes.h @@ -13,11 +13,30 @@ typedef unsigned int RakNetTime; typedef long long RakNetTimeNS; #endif +/// \brief Unique identifier for a system. +/// Corresponds to a network address +struct RAK_DLL_EXPORT PlayerID +{ + char _gap0[6]; +}; + +/// This represents a user message from another system. +struct Packet +{ + char _gap0; +}; + struct RPCParameters { char _gap0; // TODO: RPCParameters }; +/// Index of an invalid PlayerID +const PlayerID UNASSIGNED_PLAYER_ID = +{ + 0xFFFFFFFF, 0xFFFF +}; + /// \def REGISTER_STATIC_RPC /// \ingroup RAKNET_RPC /// Register a C function as a Remote procedure. diff --git a/raknet/TCPInterface.cpp b/raknet/TCPInterface.cpp new file mode 100644 index 0000000..2576005 --- /dev/null +++ b/raknet/TCPInterface.cpp @@ -0,0 +1,28 @@ +// TODO: Implement TCPInterface.cpp + +#include "TCPInterface.h" + +TCPInterface::TCPInterface() +{ +} + +Packet* TCPInterface::Receive( void ) +{ + if (isStarted==false) + return 0; + return incomingMessages.ReadLock(); +} +PlayerID TCPInterface::HasLostConnection(void) +{ + PlayerID *out; + out = lostConnections.ReadLock(); + if (out) + { + lostConnections.ReadUnlock(); + return *out; + } + else + { + return UNASSIGNED_PLAYER_ID; + } +} diff --git a/raknet/TCPInterface.h b/raknet/TCPInterface.h new file mode 100644 index 0000000..000bb86 --- /dev/null +++ b/raknet/TCPInterface.h @@ -0,0 +1,31 @@ +// TODO: Implement TCPInterface.h + +#ifndef __SIMPLE_TCP_SERVER +#define __SIMPLE_TCP_SERVER + +#include "NetworkTypes.h" +#include "SingleProducerConsumer.h" +#include "Export.h" + +/// \internal +/// \brief As the name says, a simple multithreaded TCP server. Used by TelnetTransport +class RAK_DLL_EXPORT TCPInterface +{ +public: + TCPInterface(); + + /// Returns data received + Packet* Receive( void ); + + /// Queued events of lost connections + PlayerID HasLostConnection(void); + +protected: + bool isStarted; + + DataStructures::SingleProducerConsumer incomingMessages; + + DataStructures::SingleProducerConsumer lostConnections; +}; + +#endif