CommandManager.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include <iostream>
  2. #include "common/network/Packets.h"
  3. #include "server/commands/CommandManager.h"
  4. #include "server/snuviscript/Snuvi.h"
  5. static void commandTest(ServerState&, const CommandArguments& args) {
  6. std::cout << "test command\n";
  7. for(int i = 0; i < args.getLength(); i++) {
  8. std::cout << " - " << args[i] << '\n';
  9. }
  10. }
  11. static void commandStop(ServerState& sc, const CommandArguments&) {
  12. sc.running = false;
  13. }
  14. static void commandSay(ServerState& sc, const CommandArguments& args) {
  15. StringBuffer<256> s;
  16. for(int i = 1; i < args.getLength(); i++) {
  17. s.append(args[i]);
  18. s.append(' ');
  19. }
  20. OutPacket out = OutPacket::reliable(260);
  21. out.writeU16(ServerPacket::CHAT);
  22. out.writeString(s);
  23. sc.server.send(out);
  24. std::cout << s << '\n';
  25. }
  26. static void commandScript(ServerState&, const CommandArguments& args) {
  27. if(args.getLength() < 2) {
  28. std::cout << "/start <script>\n";
  29. return;
  30. }
  31. Snuvi::start(args[1]);
  32. }
  33. CommandManager::CommandManager() {
  34. commands.add("test", commandTest);
  35. commands.add("stop", commandStop);
  36. commands.add("say", commandSay);
  37. commands.add("script", commandScript);
  38. }
  39. void CommandManager::execute(ServerState& sc, const RawCommand& rawCommand) {
  40. CommandArguments args(rawCommand);
  41. if(args.getLength() == 0) {
  42. std::cout << "Invalid command syntax: '" << rawCommand << "'\n";
  43. return;
  44. }
  45. CommandName command(args[0]);
  46. Command* c = commands.search(command);
  47. if(c == nullptr) {
  48. std::cout << "Unknown command: '" << command << "'\n";
  49. return;
  50. }
  51. (*c)(sc, args);
  52. }