]> git.localhorst.tv Git - blank.git/blobdiff - src/server/Server.hpp
add TCP based CLI
[blank.git] / src / server / Server.hpp
index 3bffafc29d2ada80307be32b5cab2269c49a6a65..f81c9cea205b4918edfbb26e4da3c1357402baa4 100644 (file)
@@ -7,6 +7,7 @@
 #include "../world/WorldManipulator.hpp"
 
 #include <cstdint>
+#include <memory>
 #include <list>
 #include <SDL_net.h>
 
@@ -14,6 +15,8 @@
 namespace blank {
 
 class ChunkIndex;
+class CLIContext;
+class CommandService;
 class Model;
 class Player;
 class WorldSave;
@@ -29,6 +32,10 @@ public:
        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);
@@ -48,7 +55,7 @@ public:
        void SetBlock(Chunk &, int, const Block &) override;
 
        /// for use by client connections when they receive a line from the player
-       void DispatchMessage(Player &, const std::string &);
+       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);
@@ -63,6 +70,7 @@ private:
 private:
        UDPsocket serv_sock;
        UDPpacket serv_pack;
+       SDLNet_SocketSet serv_set;
        std::list<ClientConnection> clients;
 
        World &world;
@@ -71,6 +79,7 @@ private:
        const Model *player_model;
 
        CLI cli;
+       std::unique_ptr<CommandService> cmd_srv;
 
 };