ContentGenerator.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. //
  2. // Created by xcbosa on 2023/1/28.
  3. //
  4. #include "../webui.h"
  5. #include "ContentGenerator.h"
  6. namespace xc {
  7. namespace processor {
  8. ContentGenerator *generators[1024];
  9. int generatorsCnt = 0;
  10. ContentGenerator::ContentGenerator(string name, RequestCheckBlock checker, ContentGenerateBlock generator) {
  11. this->checker = checker;
  12. this->generator = generator;
  13. this->name = name;
  14. int maxCnt = sizeof(generators) / sizeof(ContentGenerator *);
  15. ostringstream oss;
  16. oss << "ContentGenerator count must be less than ";
  17. oss << maxCnt;
  18. assertx(generatorsCnt < maxCnt, oss.str());
  19. generators[generatorsCnt++] = this;
  20. cout << "[ContentGenerator] Registered " << name << endl;
  21. }
  22. bool ContentGenerator::matchRequest(RequestData request) const {
  23. return this->checker(request);
  24. }
  25. ResponseData *ContentGenerator::generateResponse(RequestData request) const {
  26. return this->generator(request);
  27. }
  28. string ContentGenerator::getName() const {
  29. return this->name;
  30. }
  31. const ContentGenerator *findContentGenerator(string name) {
  32. for (int i = 0; i < generatorsCnt; i++) {
  33. if (generators[i]->getName() == name) {
  34. return generators[i];
  35. }
  36. }
  37. return nullptr;
  38. }
  39. }
  40. }