magpie
Loading...
Searching...
No Matches
Middleware.hpp
1#pragma once
2
3#include "magpie/data/CommonData.hpp"
4#include "magpie/transfer/Request.hpp"
5#include "magpie/transfer/Response.hpp"
6#include <memory>
7namespace magpie {
8
9template <data::IsCommonData ContextType>
10class Middleware;
11
15template <data::IsCommonData ContextType>
17 virtual ~IMiddlewareProcessor() = default;
18 virtual Middleware<ContextType>* getNext() = 0;
19 virtual void invokeRoute() = 0;
20};
21
72template <data::IsCommonData ContextType>
74public:
75 virtual ~Middleware() = default;
76
103 virtual void onRequest(
105 ContextType* ctx,
106 Request& req,
107 Response& res
108 ) = 0;
109
121 void next(
123 ContextType* ctx,
124 Request& req,
125 Response& res
126 ) {
127 auto* ptr = proc->getNext();
128 if (ptr == nullptr) {
129 return;
130 }
131 ptr->onRequest(
132 proc,
133 ctx,
134 req,
135 res
136 );
137 }
138
139};
140
144template <data::IsCommonData ContextType>
146 std::vector<std::shared_ptr<Middleware<ContextType>>> middlewares;
147};
148
149}
Definition Middleware.hpp:73
void next(IMiddlewareProcessor< ContextType > *proc, ContextType *ctx, Request &req, Response &res)
Definition Middleware.hpp:121
virtual void onRequest(IMiddlewareProcessor< ContextType > *proc, ContextType *ctx, Request &req, Response &res)=0
Definition Middleware.hpp:16
Definition Middleware.hpp:145
Definition Request.hpp:11
Definition Response.hpp:13