ContentGenerator.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //
  2. // Created by xcbosa on 2023/1/28.
  3. //
  4. #pragma once
  5. #include "processor-private.h"
  6. #include "../utils/utils.h"
  7. #define __merge_body(a, b) a ## b
  8. #define __merge(a, b) __merge_body(a, b)
  9. #define __uniqueVarName(name) __merge(name, __LINE__)
  10. #define ContentGeneratorDefine(cond, eval) \
  11. const ContentGenerator __uniqueVarName(AutoContentGenerator)([] (auto request) { cond; }, [] (auto request) { eval; });
  12. using namespace std;
  13. namespace xc {
  14. namespace processor {
  15. /*输入一个请求,判断此生成器是否响应此请求*/
  16. typedef function<bool (RequestData)> RequestCheckBlock;
  17. /*为此请求生成响应,响应需要使用new,在发送完成或HTTP服务器不再需要时自动调用delete销毁*/
  18. typedef function<ResponseData* (RequestData)> ContentGenerateBlock;
  19. /*请定义为static*/
  20. class ContentGenerator {
  21. public:
  22. ContentGenerator(RequestCheckBlock checker, ContentGenerateBlock generator);
  23. bool matchRequest(RequestData request);
  24. ResponseData *generateResponse(RequestData request);
  25. private:
  26. RequestCheckBlock checker;
  27. ContentGenerateBlock generator;
  28. };
  29. }
  30. }