Enable 'prepare' for server task too.

This commit is contained in:
Xie Han
2025-01-13 22:48:54 +08:00
parent 6a77997264
commit ff6ddac89e
2 changed files with 19 additions and 11 deletions

View File

@@ -200,6 +200,12 @@ public:
}
}
public:
void set_prepare(std::function<void (WFNetworkTask<REQ, RESP> *)> prep)
{
this->prepare = std::move(prep);
}
public:
void set_callback(std::function<void (WFNetworkTask<REQ, RESP> *)> cb)
{
@@ -219,6 +225,7 @@ protected:
int watch_timeo;
REQ req;
RESP resp;
std::function<void (WFNetworkTask<REQ, RESP> *)> prepare;
std::function<void (WFNetworkTask<REQ, RESP> *)> callback;
protected:
@@ -742,6 +749,7 @@ public:
this->create = std::move(create);
}
public:
void set_callback(std::function<void (WFRepeaterTask *)> cb)
{
this->callback = std::move(cb);

View File

@@ -47,7 +47,7 @@ class WFClientTask : public WFNetworkTask<REQ, RESP>
protected:
virtual CommMessageOut *message_out()
{
/* By using prepare function, users can modify request after
/* By using prepare function, users can modify the request after
* the connection is established. */
if (this->prepare)
this->prepare(this);
@@ -91,15 +91,6 @@ protected:
return series->pop();
}
public:
void set_prepare(std::function<void (WFNetworkTask<REQ, RESP> *)> prep)
{
this->prepare = std::move(prep);
}
protected:
std::function<void (WFNetworkTask<REQ, RESP> *)> prepare;
public:
WFClientTask(CommSchedObject *object, CommScheduler *scheduler,
std::function<void (WFNetworkTask<REQ, RESP> *)>&& cb) :
@@ -115,7 +106,16 @@ template<class REQ, class RESP>
class WFServerTask : public WFNetworkTask<REQ, RESP>
{
protected:
virtual CommMessageOut *message_out() { return &this->resp; }
virtual CommMessageOut *message_out()
{
/* By using prepare function, users can modify the response before
* replying to the client. */
if (this->prepare)
this->prepare(this);
return &this->resp;
}
virtual CommMessageIn *message_in() { return &this->req; }
virtual void handle(int state, int error);