mirror of
https://github.com/thunderbrewhq/thunderbrew
synced 2025-12-12 11:12:29 +00:00
chore: initial commit
This commit is contained in:
commit
70b00c5c38
965 changed files with 264882 additions and 0 deletions
136
src/event/Event.cpp
Normal file
136
src/event/Event.cpp
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
#include "event/Event.hpp"
|
||||
#include "event/EvtContext.hpp"
|
||||
#include "event/EvtThread.hpp"
|
||||
#include "event/Input.hpp"
|
||||
#include "event/Queue.hpp"
|
||||
#include "event/Scheduler.hpp"
|
||||
#include <cstring>
|
||||
#include <common/Prop.hpp>
|
||||
#include <common/Time.hpp>
|
||||
#include <storm/String.hpp>
|
||||
|
||||
SEvent Event::s_startEvent = SEvent(1, 0);
|
||||
SEvent Event::s_shutdownEvent = SEvent(1, 0);
|
||||
int32_t Event::s_netServer;
|
||||
int32_t Event::s_threadSlotCount;
|
||||
SCritSect* Event::s_threadSlotCritsects;
|
||||
EvtThread** Event::s_threadSlots;
|
||||
uint32_t Event::s_mainThread;
|
||||
TSGrowableArray<SThread*> Event::s_schedulerThreads;
|
||||
ATOMIC32 Event::s_threadListContention { -1 };
|
||||
SCritSect Event::s_threadListCritsect;
|
||||
TSList<EvtThread, TSGetLink<EvtThread>> Event::s_threadList;
|
||||
EvtContext* Event::s_currentEvtContext;
|
||||
ATOMIC32 Event::s_interactiveCount;
|
||||
|
||||
#if defined(WHOA_SYSTEM_MAC)
|
||||
bool Event::s_shouldLoopTerminate;
|
||||
#endif
|
||||
|
||||
void OsNetPump(uint32_t timeout) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
void EventInitialize(int32_t threadCount, int32_t netServer) {
|
||||
IEvtInputInitialize();
|
||||
|
||||
int32_t v2 = threadCount;
|
||||
|
||||
if (threadCount < 1) {
|
||||
v2 = 1;
|
||||
}
|
||||
|
||||
IEvtSchedulerInitialize(v2, netServer);
|
||||
|
||||
// TODO
|
||||
// OsInputSetEventPollProc(&sub_47DCA0);
|
||||
}
|
||||
|
||||
int32_t EventIsControlKeyDown() {
|
||||
return EventIsKeyDown(KEY_LCONTROL) || EventIsKeyDown(KEY_RCONTROL);
|
||||
}
|
||||
|
||||
int32_t EventIsKeyDown(KEY key) {
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t EventIsShiftKeyDown() {
|
||||
return EventIsKeyDown(KEY_LSHIFT) || EventIsKeyDown(KEY_RSHIFT);
|
||||
}
|
||||
|
||||
HEVENTCONTEXT EventCreateContextEx(int32_t interactive, int32_t (*initializeHandler)(const void*, void*), int32_t (*destroyHandler)(const void*, void*), uint32_t idleTime, uint32_t debugFlags) {
|
||||
return IEvtSchedulerCreateContext(interactive, initializeHandler, destroyHandler, idleTime, debugFlags);
|
||||
}
|
||||
|
||||
void EventDoMessageLoop() {
|
||||
IEvtSchedulerProcess();
|
||||
}
|
||||
|
||||
void EventPostCloseEx(HEVENTCONTEXT contextHandle) {
|
||||
if (!contextHandle) {
|
||||
contextHandle = PropGet(PROP_EVENTCONTEXT);
|
||||
}
|
||||
|
||||
if (contextHandle) {
|
||||
uint32_t contextId = *reinterpret_cast<uint32_t*>(contextHandle);
|
||||
int32_t findMask;
|
||||
EvtContext* context = TSingletonInstanceId<EvtContext, offsetof(EvtContext, m_id)>::s_idTable.Ptr(
|
||||
contextId,
|
||||
0,
|
||||
&findMask
|
||||
);
|
||||
|
||||
if (context) {
|
||||
context->m_critsect.Enter();
|
||||
|
||||
if (context->m_schedState == EvtContext::SCHEDSTATE_ACTIVE) {
|
||||
context->m_schedState = EvtContext::SCHEDSTATE_CLOSED;
|
||||
}
|
||||
|
||||
context->m_critsect.Leave();
|
||||
|
||||
if (findMask != -1) {
|
||||
TSingletonInstanceId<EvtContext, offsetof(EvtContext, m_id)>::s_idTable.Unlock(
|
||||
findMask & (INSTANCE_TABLE_SLOT_COUNT - 1),
|
||||
findMask >= INSTANCE_TABLE_SLOT_COUNT
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EventRegister(EVENTID id, EVENTHANDLERFUNC handler) {
|
||||
EventRegisterEx(id, handler, nullptr, 0.0f);
|
||||
}
|
||||
|
||||
void EventRegisterEx(EVENTID id, EVENTHANDLERFUNC handler, void* param, float priority) {
|
||||
if (id < 0 || id > EVENTIDS || handler == nullptr) {
|
||||
// TODO
|
||||
// SErrSetLastError(0x57u);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
HEVENTCONTEXT hContext = PropGet(PROP_EVENTCONTEXT);
|
||||
|
||||
uint32_t contextId = *reinterpret_cast<uint32_t*>(hContext);
|
||||
int32_t findMask;
|
||||
|
||||
EvtContext* context = TSingletonInstanceId<EvtContext, offsetof(EvtContext, m_id)>::s_idTable.Ptr(
|
||||
contextId,
|
||||
0,
|
||||
&findMask
|
||||
);
|
||||
|
||||
if (context) {
|
||||
IEvtQueueRegister(context, id, handler, param, priority);
|
||||
|
||||
if (findMask != -1) {
|
||||
TSingletonInstanceId<EvtContext, offsetof(EvtContext, m_id)>::s_idTable.Unlock(
|
||||
findMask & (INSTANCE_TABLE_SLOT_COUNT - 1),
|
||||
findMask >= INSTANCE_TABLE_SLOT_COUNT
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue