]> git.localhorst.tv Git - blank.git/blobdiff - src/server/Server.hpp
add TCP based CLI
[blank.git] / src / server / Server.hpp
index cf4fc0433e889f5966bee3806eee1427d57c521c..f81c9cea205b4918edfbb26e4da3c1357402baa4 100644 (file)
@@ -2,26 +2,40 @@
 #define BLANK_SERVER_SERVER_HPP
 
 #include "../app/Config.hpp"
+#include "../shared/CLI.hpp"
+#include "../world/World.hpp"
+#include "../world/WorldManipulator.hpp"
 
+#include <cstdint>
+#include <memory>
 #include <list>
 #include <SDL_net.h>
 
 
 namespace blank {
 
-class CompositeModel;
-class World;
+class ChunkIndex;
+class CLIContext;
+class CommandService;
+class Model;
+class Player;
+class WorldSave;
 
 namespace server {
 
 class ClientConnection;
 
-class Server {
+class Server
+: public WorldManipulator {
 
 public:
-       Server(const Config::Network &, World &);
+       Server(const Config::Network &, World &, const World::Config &, const WorldSave &);
        ~Server();
 
+       // wait for data to arrive for at most dt milliseconds
+       void Wait(int dt) noexcept;
+       // true if there's data waiting to be handled
+       bool Ready() noexcept;
        void Handle();
 
        void Update(int dt);
@@ -30,23 +44,42 @@ public:
        UDPpacket &GetPacket() noexcept { return serv_pack; }
 
        World &GetWorld() noexcept { return world; }
+       const WorldSave &GetWorldSave() noexcept { return save; }
 
-       void SetPlayerModel(const CompositeModel &) noexcept;
+       void SetPlayerModel(const Model &) noexcept;
        bool HasPlayerModel() const noexcept;
-       const CompositeModel &GetPlayerModel() const noexcept;
+       const Model &GetPlayerModel() const noexcept;
+
+       Player *JoinPlayer(const std::string &name);
+
+       void SetBlock(Chunk &, int, const Block &) override;
+
+       /// for use by client connections when they receive a line from the player
+       void DispatchMessage(CLIContext &, const std::string &);
+
+       /// send message to all connected clients
+       void DistributeMessage(std::uint8_t type, std::uint32_t ref, const std::string &msg);
 
 private:
        void HandlePacket(const UDPpacket &);
 
        ClientConnection &GetClient(const IPaddress &);
 
+       void SendAll();
+
 private:
        UDPsocket serv_sock;
        UDPpacket serv_pack;
+       SDLNet_SocketSet serv_set;
        std::list<ClientConnection> clients;
 
        World &world;
-       const CompositeModel *player_model;
+       ChunkIndex &spawn_index;
+       const WorldSave &save;
+       const Model *player_model;
+
+       CLI cli;
+       std::unique_ptr<CommandService> cmd_srv;
 
 };