#pragma once #include "ehs/EHS.h" #include "ehs/Str.h" #include "Socket.h" namespace ehs { class EHS_LIB_IO BaseUDP { protected: AddrType type; Str_8 address; UInt_16 port; bool bound; public: virtual ~BaseUDP() = default; /// Initializes the socket with the defaults. BaseUDP(); /// Properly initializes the socket. /// @param [in] type The ip version to initialize the socket with. BaseUDP(AddrType type); BaseUDP(BaseUDP&& udp) noexcept; BaseUDP(const BaseUDP& udp); BaseUDP& operator=(BaseUDP&& udp) noexcept; BaseUDP& operator=(const BaseUDP& udp); /// Explicitly release resources before it falls off the stack. virtual void Release() = 0; /// Binds to socket to a specified address and port. /// @param [in] type The ip version to use. /// @param [in] address The ip address to bind to. /// @param [in] port The port to bind to. /// @note Used for servers. virtual void Bind(AddrType type, const Str_8& address, UInt_16 port) = 0; /// Sends data to the endpoint. /// @param [in] type The ip version of the endpoint. /// @param [in] address The ip address of the endpoint. /// @param [in] port The port of the endpoint is bound to. virtual UInt_64 Send(AddrType type, const Str_8& address, UInt_16 port, const Byte* data, UInt_64 size) = 0; /// Receives data from the endpoint. /// @param [out] type The ip version of the endpoint. /// @param [out] address The ip address of the endpoint. /// @param [out] port The port of the endpoint. /// @param [out] data The incoming data from the endpoint. /// @param [in] size The max size of the buffer in bytes to store the data. /// @returns The size of the incoming data in bytes. virtual UInt_64 Receive(AddrType* type, Str_8* address, UInt_16* port, Byte* data, UInt_64 size) = 0; /// Retrieves whether or not this socket is bound to an ip address and port. /// @returns The result. bool IsBound() const; /// Sets whether or not the socket blocks the thread when receiving data. /// @param [in] blocking Whether or not to block. virtual void SetBlocking(bool blocking) = 0; /// Retrieves whether or not when receiving data blocks the thread. /// @returns The result. virtual bool IsBlocking() const = 0; virtual void SetIPv6Only(bool value) = 0; virtual bool IsIPv6Only() const = 0; /// Retrieves the bound ip version. /// @returns The result. AddrType GetLocalAddressType() const; /// Retrieves the bound ip address. /// @returns The bound ip address. Str_8 GetLocalAddress() const; /// Retrieves the bound port. /// @returns The bound port. UInt_16 GetLocalPort() const; /// Retrieves whether or not this socket was initialized. /// @returns The result. virtual bool IsValid() const = 0; }; }