diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/game/StarSystemWorldServerThread.hpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/game/StarSystemWorldServerThread.hpp')
-rw-r--r-- | source/game/StarSystemWorldServerThread.hpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/source/game/StarSystemWorldServerThread.hpp b/source/game/StarSystemWorldServerThread.hpp new file mode 100644 index 0000000..f81749e --- /dev/null +++ b/source/game/StarSystemWorldServerThread.hpp @@ -0,0 +1,75 @@ +#ifndef STAR_SYSTEM_WORLD_SERVER_THREAD_HPP +#define STAR_SYSTEM_WORLD_SERVER_THREAD_HPP + +#include "StarSystemWorldServer.hpp" +#include "StarThread.hpp" +#include "StarNetPackets.hpp" + +namespace Star { + +STAR_CLASS(SystemWorldServerThread); + +typedef function<void(SystemClientShip*)> ClientShipAction; + +class SystemWorldServerThread : public Thread { +public: + SystemWorldServerThread(Vec3I const& location, SystemWorldServerPtr systemWorld, String storageFile); + ~SystemWorldServerThread(); + + Vec3I location() const; + + List<ConnectionId> clients(); + void addClient(ConnectionId clientId, Uuid const& uuid, float shipSpeed, SystemLocation const& location); + void removeClient(ConnectionId clientId); + + void setPause(shared_ptr<const atomic<bool>> pause); + void run() override; + void stop(); + + void update(); + + void setClientDestination(ConnectionId clientId, SystemLocation const& location); + void executeClientShipAction(ConnectionId clientId, ClientShipAction action); + + SystemLocation clientShipLocation(ConnectionId clientId); + Maybe<pair<WarpAction, WarpMode>> clientWarpAction(ConnectionId clientId); + SkyParameters clientSkyParameters(ConnectionId clientId); + + List<InstanceWorldId> activeInstanceWorlds() const; + + // callback to be run after update in the server thread + void setUpdateAction(function<void(SystemWorldServerThread*)> updateAction); + void pushIncomingPacket(ConnectionId clientId, PacketPtr packet); + List<PacketPtr> pullOutgoingPackets(ConnectionId clientId); + + void store(); + +private: + Vec3I m_systemLocation; + SystemWorldServerPtr m_systemWorld; + + atomic<bool> m_stop; + float m_periodicStorage; + bool m_triggerStorage; + String m_storageFile; + + shared_ptr<const atomic<bool>> m_pause; + function<void(SystemWorldServerThread*)> m_updateAction; + + ReadersWriterMutex m_mutex; + ReadersWriterMutex m_queueMutex; + + HashSet<ConnectionId> m_clients; + HashMap<ConnectionId, SystemLocation> m_clientShipDestinations; + HashMap<ConnectionId, pair<SystemLocation, SkyParameters>> m_clientShipLocations; + HashMap<ConnectionId, pair<WarpAction, WarpMode>> m_clientWarpActions; + List<pair<ConnectionId, ClientShipAction>> m_clientShipActions; + List<InstanceWorldId> m_activeInstanceWorlds; + Map<ConnectionId, List<PacketPtr>> m_outgoingPacketQueue; + List<pair<ConnectionId, PacketPtr>> m_incomingPacketQueue; +}; + + +} + +#endif |