#pragma once //Vendor #include class Command; #include "../GameServer.h" // ---- Interface: class Command { public: // Create Commands from Network messages (Limited list) static Command *create(int clientIndex, yojimbo::Message *message); // Create Commands from Strings (Limited list) static Command *create(std::string); virtual void execute(GameServer *server) = 0; }; // --- Classes Network: class TestCommand : public Command { public: TestCommand(int clientIndex, yojimbo::Message *message) : m_clientIndex(clientIndex), m_data(((TestMessage *)message)->m_data) {} virtual void execute(GameServer *server) override; private: int m_clientIndex; int m_data; }; class SetNameCommand : public Command { public: SetNameCommand(int clientIndex, yojimbo::Message *message) : m_clientIndex(clientIndex), m_name(std::string(((SetNameMessage *)message)->buffer)) {} virtual void execute(GameServer *server) override; private: int m_clientIndex; std::string m_name; }; // --- Classes Internal: class TestCommandInternal : public Command { public: virtual void execute(GameServer *server) override; }; class StopCommandInternal : public Command { public: virtual void execute(GameServer *server) override; };