#pragma once #include "ehs/Str.h" #include "ehs/Array.h" #include "ehs/io/socket/Socket.h" #include "NetUtils.h" namespace ehs { class EHC; class NetEnd; class NetSys; class NetChannel { protected: static const UInt_64 internalSys; static const UInt_64 connectOp; static const UInt_64 connectedOp; static const UInt_64 rejectedOp; static const UInt_64 disconnectOp; static const UInt_64 disconnectedOp; static const UInt_64 statusUpdateOp; static const UInt_64 pingOp; static const UInt_64 pongOp; static const UInt_64 latencyOp; static const UInt_64 receivedOp; private: friend class EHC; EHC *owner; UInt_64 id; Str_8 name; Version version; float maxTimeout; float resendRate; bool dropPackets; Array systems; public: virtual ~NetChannel(); NetChannel(); NetChannel(Str_8 name, const Version &version); NetChannel(NetChannel &&channel) noexcept; NetChannel(const NetChannel &channel); NetChannel &operator=(NetChannel &&channel) noexcept; NetChannel &operator=(const NetChannel &channel); EHC *GetOwner() const; UInt_64 GetId() const; Str_8 GetName() const; Version GetVersion() const; void SetMaxTimeout(float seconds); float GetMaxTimeout() const; void SetResendRate(float seconds); float GetResendRate() const; void EnableDropPackets(bool enable); bool IsDropPacketsEnabled() const; bool AddSystem(NetSys *sys); bool IsValid() const; private: virtual void Process(const float &delta, const Endpoint &endpoint, const Header &header, Serializer &payload); virtual void Poll(const float &delta); protected: bool HasSystem(UInt_64 sysId) const; bool HasSystem(const Str_8& sysName) const; NetSys* GetSystem(UInt_64 sysId) const; NetSys* GetSystem(const Str_8& sysName) const; }; }