13 #ifndef __PROCESS_EVENT_HPP__
14 #define __PROCESS_EVENT_HPP__
35 struct TerminateEvent;
73 explicit IsVisitor(
bool* _result) : result(_result) {}
74 virtual void visit(
const T&) { *result =
true; }
84 const T* result =
nullptr;
87 explicit AsVisitor(
const T** _result) : result(_result) {}
88 virtual void visit(
const T& t) { *result = &t; }
92 if (result ==
nullptr) {
93 ABORT(
"Attempting to \"cast\" event incorrectly!");
106 :
message(std::move(_message)) {}
111 const std::string&
name,
114 :
message{
name, from, to, std::string(data, length)} {}
121 :
message{std::move(
name), from, to, std::move(data)} {}
130 visitor->
visit(*
this);
135 consumer->consume(std::move(*
this));
165 visitor->
visit(*
this);
170 consumer->consume(std::move(*
this));
196 visitor->
visit(*
this);
201 consumer->consume(std::move(*
this));
208 std::unique_ptr<lambda::CallableOnce<void(ProcessBase*)>>
f;
226 visitor->
visit(*
this);
231 consumer->consume(std::move(*
this));
250 visitor->
visit(*
this);
255 consumer->consume(std::move(*
this));
269 explicit Visitor(
JSON::Object* _object) : object(_object) {}
273 object->
values[
"type"] =
"MESSAGE";
275 const Message& message =
event.message;
277 object->values[
"name"] = message.
name;
280 object->values[
"body"] = message.
body;
283 virtual void visit(
const HttpEvent& event)
285 object->values[
"type"] =
"HTTP";
289 object->values[
"method"] = request.
method;
295 object->values[
"type"] =
"DISPATCH";
300 object->values[
"type"] =
"EXITED";
305 object->values[
"type"] =
"TERMINATE";
318 #endif // __PROCESS_EVENT_HPP__
DispatchEvent & operator=(DispatchEvent &&)=default
#define ABORT(...)
Definition: abort.hpp:40
void visit(EventVisitor *visitor) const override
Definition: event.hpp:194
virtual void visit(const TerminateEvent &)
Definition: event.hpp:45
Future< Response > request(const Request &request, bool streamedResponse=false)
Asynchronously sends an HTTP request to the process and returns the HTTP response once the entire res...
URL url
Definition: http.hpp:529
MessageEvent(const UPID &from, const UPID &to, const std::string &name, const char *data, size_t length)
Definition: event.hpp:108
Definition: event.hpp:142
TerminateEvent & operator=(TerminateEvent &&)=default
Definition: message.hpp:22
void consume(EventConsumer *consumer)&&override
Definition: event.hpp:253
MessageEvent & operator=(MessageEvent &&)=default
std::unique_ptr< Promise< http::Response > > response
Definition: event.hpp:174
Definition: event.hpp:178
Definition: process.hpp:72
bool is() const
Definition: event.hpp:68
virtual void visit(const MessageEvent &)
Definition: event.hpp:41
std::map< std::string, Value > values
Definition: json.hpp:190
ExitedEvent & operator=(ExitedEvent &&)=default
UPID pid
Definition: event.hpp:234
void consume(EventConsumer *consumer)&&override
Definition: event.hpp:133
UPID pid
Definition: event.hpp:205
Option< const std::type_info * > functionType
Definition: event.hpp:210
ExitedEvent(const UPID &_pid)
Definition: event.hpp:216
Definition: event.hpp:238
Definition: event.hpp:214
UPID from
Definition: event.hpp:258
UPID to
Definition: message.hpp:26
void consume(EventConsumer *consumer)&&override
Definition: event.hpp:168
UPID from
Definition: message.hpp:25
Message message
Definition: event.hpp:138
HttpEvent(http::Request *_request, Promise< http::Response > *_response)
Definition: event.hpp:144
An "untyped" PID, used to encapsulate the process ID for lower-layer abstractions (eg...
Definition: pid.hpp:39
void visit(EventVisitor *visitor) const override
Definition: event.hpp:163
HttpEvent & operator=(HttpEvent &&)=default
Definition: future.hpp:73
void consume(EventConsumer *consumer)&&override
Definition: event.hpp:199
std::unique_ptr< http::Request > request
Definition: event.hpp:173
void visit(EventVisitor *visitor) const override
Definition: event.hpp:224
virtual void visit(const HttpEvent &)
Definition: event.hpp:43
const T & as() const
Definition: event.hpp:82
virtual void consume(MessageEvent &&)
Definition: event.hpp:52
MessageEvent(Message &&_message)
Definition: event.hpp:105
Result< Process > process(pid_t pid)
Definition: freebsd.hpp:30
virtual ~Event()
Definition: event.hpp:62
virtual void consume(TerminateEvent &&)
Definition: event.hpp:56
virtual void consume(DispatchEvent &&)
Definition: event.hpp:53
std::string method
Definition: http.hpp:523
virtual void consume(HttpEvent &&)
Definition: event.hpp:54
virtual void consume(EventConsumer *consumer)&&=0
void visit(EventVisitor *visitor) const override
Definition: event.hpp:128
std::string body
Definition: message.hpp:27
virtual void consume(ExitedEvent &&)
Definition: event.hpp:55
Definition: event.hpp:103
DispatchEvent(const UPID &_pid, std::unique_ptr< lambda::CallableOnce< void(ProcessBase *)>> _f, const Option< const std::type_info * > &_functionType)
Definition: event.hpp:180
virtual void visit(const DispatchEvent &)
Definition: event.hpp:42
virtual ~EventVisitor()
Definition: event.hpp:40
virtual ~HttpEvent()
Definition: event.hpp:155
std::string stringify(int flags)
std::unique_ptr< lambda::CallableOnce< void(ProcessBase *)> > f
Definition: event.hpp:208
virtual void visit(EventVisitor *visitor) const =0
bool inject
Definition: event.hpp:259
virtual void visit(const ExitedEvent &)
Definition: event.hpp:44
std::string name
Definition: message.hpp:24
constexpr const char * name
Definition: shell.hpp:41
void visit(EventVisitor *visitor) const override
Definition: event.hpp:248
virtual ~EventConsumer()
Definition: event.hpp:51
MessageEvent(const UPID &from, const UPID &to, std::string &&name, std::string &&data)
Definition: event.hpp:116
void consume(EventConsumer *consumer)&&override
Definition: event.hpp:229
Definition: lambda.hpp:341
TerminateEvent(const UPID &_from, bool _inject)
Definition: event.hpp:240