Batch #12020 by Yommy: 3 byte-identical, 0 confirmed by peer review. - fn_07584 NAsyncWorkThread::Receive: byte-identical - fn_07583 NAsyncWorkThread::RequestStop: byte-identical - fn_07613 NMessageMgr::Send: byte-identical Merged automatically: every function is byte-identical to the original.
67 lines
1.9 KiB
C++
67 lines
1.9 KiB
C++
#include "Utility/Async/NAsyncWorkThread.h"
|
|
|
|
// OFFSET: 0x00732980
|
|
// FUNCTION: fn_07576
|
|
NAsyncWorkThread::NAsyncWorkThread(NAsyncWorkRequestQueue* requests, NAsyncWorkResponseQueue* responses)
|
|
: NThread("AsyncWorkThread"), m_requests(requests), m_responses(responses) {
|
|
this->m_registered = false;
|
|
g_messageMgr->Register(this->m_objectId, static_cast<NInter*>(this));
|
|
this->m_registered = true;
|
|
}
|
|
|
|
// OFFSET: 0x00732A80
|
|
// FUNCTION: fn_07577
|
|
NAsyncWorkThread::~NAsyncWorkThread() {
|
|
g_messageMgr->Unregister(this->m_objectId, static_cast<NInter*>(this));
|
|
}
|
|
|
|
// OFFSET: 0x00732C40
|
|
// FUNCTION: fn_07584
|
|
void NAsyncWorkThread::Receive(std::uint32_t argumentLow, std::uint32_t argumentHigh, std::uint32_t id) {
|
|
this->m_messages.Push(argumentLow, argumentHigh, id);
|
|
}
|
|
|
|
// OFFSET: 0x00732C20
|
|
// FUNCTION: fn_07583
|
|
void NAsyncWorkThread::RequestStop() {
|
|
this->m_messages.Push(0x50000, 0, 0);
|
|
}
|
|
|
|
// OFFSET: 0x00732C50
|
|
// FUNCTION: fn_07585
|
|
bool NAsyncWorkThread::Start() {
|
|
return this->NThread::Start();
|
|
}
|
|
|
|
// OFFSET: 0x00732C60
|
|
// FUNCTION: fn_07586
|
|
void NAsyncWorkThread::Stop() {
|
|
this->NThread::Stop();
|
|
}
|
|
|
|
// OFFSET: 0x00732C70
|
|
// FUNCTION: fn_07587
|
|
unsigned NAsyncWorkThread::Run() {
|
|
for (;;) {
|
|
HANDLE handles[2] = {this->m_messages.m_semaphore, this->m_requests->m_semaphore};
|
|
DWORD ready = WaitForMultipleObjects(2, handles, FALSE, INFINITE);
|
|
if (ready == WAIT_OBJECT_0) {
|
|
NMessage message = this->m_messages.Pop();
|
|
if (message.valid == true && message.argumentLow == 0x50000) {
|
|
return 0;
|
|
}
|
|
} else if (ready == WAIT_OBJECT_0 + 1) {
|
|
NAsyncWorkPtr work = this->m_requests->Pop();
|
|
if (work.Get()) {
|
|
auto group = work.Get()->GroupKey();
|
|
if (work.Get()->Execute()) {
|
|
this->m_requests->PushFront(work);
|
|
} else {
|
|
this->m_responses->Push(work);
|
|
}
|
|
|
|
this->m_requests->Complete(group.first, group.second);
|
|
}
|
|
}
|
|
}
|
|
}
|