guardia-messenger/node_modules/expo-modules-core/common/cpp/EventEmitter.h
DESKTOP-TKLFCPRython f29f525c77 refactor: 101.79.17.164 → zioinfo.co.kr 전체 도메인 변환 + Manager UI 배포
- 37개 파일 IP → zioinfo.co.kr 치환 (소스/매뉴얼/설정/하네스)
- Manager DrConsole/NetworkConsole/CsapConsole 빌드 + /var/www/manager/ 배포
- 테스트: Manager HTTP 200, ITSM 신규 API 7개 전체 200

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 10:09:17 +09:00

112 lines
3.3 KiB
C++

#pragma once
#ifdef __cplusplus
#include <unordered_map>
#include <list>
#include <jsi/jsi.h>
namespace jsi = facebook::jsi;
namespace expo::EventEmitter {
/**
Class containing and managing listeners of the event emitter.
*/
class Listeners {
private:
friend class NativeState;
friend void addListener(jsi::Runtime &runtime, const jsi::Object &emitter, const std::string &eventName, const jsi::Function &listener);
friend void removeListener(jsi::Runtime &runtime, const jsi::Object &emitter, const std::string &eventName, const jsi::Function &listener);
friend void removeAllListeners(jsi::Runtime &runtime, const jsi::Object &emitter, const std::string &eventName);
friend void emitEvent(jsi::Runtime &runtime, const jsi::Object &emitter, const std::string &eventName, const jsi::Value *args, size_t count);
friend size_t getListenerCount(jsi::Runtime &runtime, const jsi::Object &emitter, const std::string &eventName);
/**
Type of the list containing listeners for the specific event name.
*/
using ListenersList = std::list<jsi::Value>;
/**
Type of the map where the keys are event names and the values are lists of listeners.
*/
using ListenersMap = std::unordered_map<std::string, ListenersList>;
/**
Map with the events and listeners.
*/
ListenersMap listenersMap;
/**
Adds a listener for the given event name.
*/
void add(jsi::Runtime &runtime, std::string eventName, const jsi::Function &listener) noexcept;
/**
Removes the listener for the given event name.
*/
void remove(jsi::Runtime &runtime, std::string eventName, const jsi::Function &listener) noexcept;
/**
Removes all listeners for the given event name.
*/
void removeAll(std::string eventName) noexcept;
/**
Clears the entire map of events and listeners.
*/
void clear() noexcept;
/**
Returns a number of listeners added for the given event name.
*/
size_t listenersCount(std::string eventName) noexcept;
/**
Calls listeners for the given event name, with the given `this` object and payload arguments.
*/
void call(jsi::Runtime &runtime, std::string eventName, const jsi::Object &thisObject, const jsi::Value *args, size_t count) noexcept;
};
/**
Class representing a native state of objects that emit events.
*/
class JSI_EXPORT NativeState : public jsi::NativeState {
public:
using Shared = std::shared_ptr<NativeState>;
NativeState();
virtual ~NativeState();
/**
A structure containing event listeners.
*/
Listeners listeners;
/**
Gets event emitter's native state from the given object.
If `createIfMissing` is set to `true`, the state will be automatically created.
*/
static Shared get(jsi::Runtime &runtime, const jsi::Object &object, bool createIfMissing = false);
};
/**
Emits an event with the given name and arguments to the emitter object.
Does nothing if the given object is not an instance of the EventEmitter class.
*/
void emitEvent(jsi::Runtime &runtime, jsi::Object &emitter, const std::string &eventName, const std::vector<jsi::Value> &arguments);
/**
Gets `expo.EventEmitter` class from the given runtime.
*/
jsi::Function getClass(jsi::Runtime &runtime);
/**
Installs `expo.EventEmitter` class in the given runtime.
*/
void installClass(jsi::Runtime &runtime);
} // namespace expo::EventEmitter
#endif // __cplusplus