Polyphase Game Engine
Loading...
Searching...
No Matches
SignalBus.h
Go to the documentation of this file.
1#pragma once
2
3#include "PolyphaseAPI.h"
4#include "SmartPointer.h"
5#include "ScriptFunc.h"
6#include "Datum.h"
7
8#include <string>
9#include <unordered_map>
10
11class Node;
12
13typedef Datum(*SignalBusHandlerFP)(Node* listener, const std::vector<Datum>& args);
14typedef void(*SignalBusHandlerVoidFP)(Node* listener, const std::vector<Datum>& args);
15
22
24{
25public:
26
27 std::vector<Datum> Emit(const std::vector<Datum>& args);
28 void Connect(Node* node, SignalBusHandlerFP func);
29 void Connect(Node* node, SignalBusHandlerVoidFP func);
30 void Connect(Node* node, const ScriptFunc& func);
31 void Disconnect(Node* node);
32 void Clear();
33
34private:
35
36 void CleanupDeadConnections();
37
38 std::unordered_map<NodePtrWeak, SignalBusHandlerFunc> mConnectionMap;
39 std::vector<std::pair<NodePtrWeak, SignalBusHandlerFunc>> mPendingConnects;
40 std::vector<NodePtrWeak> mPendingDisconnects;
41 bool mEmitting = false;
42};
43
45{
46public:
47
48 std::vector<Datum> Emit(const std::string& name, const std::vector<Datum>& args = {});
49 void Subscribe(const std::string& name, Node* listener, SignalBusHandlerFP func);
50 void Subscribe(const std::string& name, Node* listener, SignalBusHandlerVoidFP func);
51 void Subscribe(const std::string& name, Node* listener, const ScriptFunc& func);
52 void Unsubscribe(const std::string& name, Node* listener);
53 void Clear();
54
55private:
56
57 std::unordered_map<std::string, SignalBusChannel> mSignalMap;
58};
59
Export macros for Polyphase Engine symbols.
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Datum(* SignalBusHandlerFP)(Node *listener, const std::vector< Datum > &args)
Definition SignalBus.h:13
POLYPHASE_API SignalBus * GetSignalBus()
Definition SignalBus.cpp:7
void(* SignalBusHandlerVoidFP)(Node *listener, const std::vector< Datum > &args)
Definition SignalBus.h:14
Definition Datum.h:164
Definition Node.h:67
Definition ScriptFunc.h:10
Definition SignalBus.h:24
std::vector< Datum > Emit(const std::vector< Datum > &args)
Definition SignalBus.cpp:12
void Clear()
Definition SignalBus.cpp:163
Definition SignalBus.h:45
Definition SignalBus.h:17
ScriptFunc mScriptFunc
Definition SignalBus.h:20
SignalBusHandlerVoidFP mVoidFuncPointer
Definition SignalBus.h:19
SignalBusHandlerFP mFuncPointer
Definition SignalBus.h:18