JsonCommander.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #ifndef JSONCOMMANDER_H
  2. #define JSONCOMMANDER_H
  3. #include <json/json.h>
  4. #include "FileManager.h"
  5. /**
  6. * @class JsonCommander
  7. *
  8. * A class to execute the json commands which were sent by a client.
  9. * It also uses the file manager for writing and reading files.
  10. */
  11. class JsonCommander {
  12. public:
  13. /**
  14. * Action for the json response.
  15. * send - send the json answer
  16. * closeAndSend - send the json answer and close the socket
  17. * close - close the socket
  18. */
  19. enum Action { close, send, closeAndSend };
  20. /**
  21. * Response for commands
  22. *
  23. * If action is set to close json can be uninitialized.
  24. */
  25. struct Response {
  26. Action action;
  27. Json::Value json;
  28. };
  29. /**
  30. * Creates a JsonCommaner
  31. */
  32. JsonCommander(FileManager &fileManager);
  33. /**
  34. * Deletes the JsonCommander
  35. */
  36. ~JsonCommander();
  37. /**
  38. * Executes commands
  39. */
  40. Response execute(const Json::Value &message);
  41. /**
  42. * Does version check before login
  43. */
  44. Response testVersion(const Json::Value &message);
  45. /**
  46. * Checks if login is valid
  47. */
  48. Response checkLogin(const Json::Value &message);
  49. private:
  50. /**
  51. * protocol version of the client server protocol
  52. */
  53. const std::string protocolVersion = "0.2";
  54. /**
  55. * Contains the name of the user which uses the current connection.
  56. * Is set at checkLogin. Used for deleteUser.
  57. */
  58. std::string currentUser;
  59. /**
  60. * Map of all commands
  61. *
  62. * Used to find the command function fast
  63. */
  64. std::map<std::string, Response (JsonCommander::*)(const Json::Value &)> commandsMap;
  65. /**
  66. * file manager for reading and writing files
  67. */
  68. FileManager &fileManager;
  69. /**
  70. *
  71. * Last chunk number which was sent.
  72. */
  73. int getFileRemaining;
  74. /**
  75. * Last chunk number which was received.
  76. */
  77. int putFileReceived;
  78. /**
  79. * Executes the status command
  80. */
  81. Response executeStatus(const Json::Value &message);
  82. /**
  83. * Executes the close command
  84. */
  85. Response executeClose(const Json::Value &message);
  86. /**
  87. * Executes the list command
  88. */
  89. Response executeList(const Json::Value &message);
  90. /**
  91. * Executes the listdata command
  92. */
  93. Response executeListData(const Json::Value &message);
  94. /**
  95. * Executes the put command
  96. */
  97. Response executePut(const Json::Value &message);
  98. /**
  99. * Executes the putdata command
  100. */
  101. Response executePutdata(const Json::Value &message);
  102. /**
  103. * Executes the get command
  104. */
  105. Response executeGet(const Json::Value &message);
  106. /**
  107. * Executes the getdata command
  108. */
  109. Response executeGetdata(const Json::Value &message);
  110. /**
  111. * Executes the head command
  112. */
  113. Response executeHead(const Json::Value &message);
  114. /**
  115. * Executes the deleteme command
  116. */
  117. Response executeDeleteMe(const Json::Value &message);
  118. /**
  119. * Executes the deletefile command
  120. */
  121. Response executeDeleteFile(const Json::Value &message);
  122. };
  123. #endif