/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuNetInterface.hpp Date: 2022-8-16 Author: Reece ***/ #pragma once #include "AuNetSrvWorkers.hpp" #include "AuNetSrvSockets.hpp" #include "AuNetSrvResolve.hpp" #include "AuNetSrvDatagram.hpp" #include "AuNetSrvInterfaces.hpp" namespace Aurora::IO::Net { struct NetInterface : INetInterface, AuEnableSharedFromThis { NetInterface(); AuSPtr GetWorkersService() override; void SetWorkersService(const AuSPtr &pWorkers) override; AuSPtr GetResolveService() override; void SetResolveService(const AuSPtr &pResolve) override; AuSPtr GetSocketService() override; void SetSocketService(const AuSPtr &pSockets) override; AuSPtr GetDatagramService() override; void SetDatagramService(const AuSPtr &pSockets) override; AuSPtr GetInterfacesService() override; void SetInterfacesService(const AuSPtr &pNetworkInterfaces) override; bool TrySchedule(const AuSPtr &pWorkUnit) override; AuSPtr TryScheduleEx(); void Shutdown() override; void Destroy() override; private: NetSrvWorkers netServiceWorkers_; // Soviet Union Anthem NetSrvSockets netServiceSockets_; NetSrvResolve netServiceResolve_; NetSrvDatagram netServiceDatagram_; NetSrvInterfaces netServiceInterfaces_; AuSPtr pNetServiceOverloadWorkers_; AuSPtr pNetServiceOverloadResolve_; AuSPtr pNetServiceOverloadSockets_; AuSPtr pNetServiceOverloadDatagram_; AuSPtr pNetServiceOverloadNetworkInterfaces_; AuUInt atomicCounter_ {}; AuMutex mutex_; }; }