|
@@ -36,9 +36,9 @@ enum EFTTEventType {
|
|
|
EFTTEventType_4
|
|
|
};
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
-extern FTTMutex CFTTAsyncEvent_tCallbackMutex; // 0x5CE3E8
|
|
|
-extern FTTMutex CFTTAsyncEvent_tWakeupMutex; // 0x5CE40C
|
|
|
-extern CFTTMemPool_Resizing* pCFTTAsyncEvent_CallbackPool; // 0x5CE3E4
|
|
|
+extern FTTMutex CFTTAsyncEvent_tCallbackMutex_5CE3E8; // 0x5CE3E8
|
|
|
+extern FTTMutex CFTTAsyncEvent_tWakeupMutex_5CE40C; // 0x5CE40C
|
|
|
+extern CFTTMemPool_Resizing* CFTTAsyncEvent_CallbackPool_5CE3E4; // 0x5CE3E4
|
|
|
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
template <typename T>
|
|
@@ -51,22 +51,24 @@ public:
|
|
|
void* pClass;
|
|
|
EventNode* next_8;
|
|
|
};
|
|
|
+CFTTAsyncEvent(): FTTSemaphore_8(0, 8, nullptr), bool_0(false){
|
|
|
|
|
|
+}
|
|
|
// 001FAA2C //^_-
|
|
|
CFTTAsyncEvent(EFTTEventType dEventType, bool a2, bool a3) : FTTSemaphore_8(0, 8, nullptr), bool_0(false) {
|
|
|
// 001FAA52
|
|
|
LOGI("CFTTAsyncEvent::CFTTAsyncEvent entry");
|
|
|
- if (pCFTTAsyncEvent_CallbackPool == nullptr) {
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Lock(); // 001FAA5E
|
|
|
- if (pCFTTAsyncEvent_CallbackPool == nullptr) { //原始的汇编就是在这里重复两次判断
|
|
|
- pCFTTAsyncEvent_CallbackPool = new CFTTMemPool_Resizing;
|
|
|
- pCFTTAsyncEvent_CallbackPool->pResizing_Node_0 = nullptr;
|
|
|
- pCFTTAsyncEvent_CallbackPool->dsize_4 = sizeof(EventNode);
|
|
|
- pCFTTAsyncEvent_CallbackPool->count_8 = 0x40;
|
|
|
- pCFTTAsyncEvent_CallbackPool->uyMagnify_C = 0;
|
|
|
- pCFTTAsyncEvent_CallbackPool->eHeapId_10 = EFTTMemHeapID_0;
|
|
|
+ if (CFTTAsyncEvent_CallbackPool_5CE3E4 == nullptr) {
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Lock(); // 001FAA5E
|
|
|
+ if (CFTTAsyncEvent_CallbackPool_5CE3E4 == nullptr) { //原始的汇编就是在这里重复两次判断
|
|
|
+ CFTTAsyncEvent_CallbackPool_5CE3E4 = new CFTTMemPool_Resizing;
|
|
|
+ CFTTAsyncEvent_CallbackPool_5CE3E4->pResizing_Node_0 = nullptr;
|
|
|
+ CFTTAsyncEvent_CallbackPool_5CE3E4->dsize_4 = sizeof(EventNode);
|
|
|
+ CFTTAsyncEvent_CallbackPool_5CE3E4->count_8 = 0x40;
|
|
|
+ CFTTAsyncEvent_CallbackPool_5CE3E4->uyMagnify_C = 0;
|
|
|
+ CFTTAsyncEvent_CallbackPool_5CE3E4->eHeapId_10 = EFTTMemHeapID_0;
|
|
|
}
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Unlock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Unlock();
|
|
|
}
|
|
|
|
|
|
// loc_1FAA8E
|
|
@@ -79,32 +81,31 @@ public:
|
|
|
|
|
|
// 001FAFE8 //^_^
|
|
|
~CFTTAsyncEvent() {
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Lock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Lock();
|
|
|
EventNode* node = pEventNode_38;
|
|
|
if (node) {
|
|
|
while (node) {
|
|
|
pEventNode_38 = node->next_8;
|
|
|
- pCFTTAsyncEvent_CallbackPool->Deallocate(node);
|
|
|
+ CFTTAsyncEvent_CallbackPool_5CE3E4->Deallocate(node);
|
|
|
node = pEventNode_38;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (!pCFTTAsyncEvent_CallbackPool->pResizing_Node_0) {
|
|
|
- if (pCFTTAsyncEvent_CallbackPool) {
|
|
|
- delete pCFTTAsyncEvent_CallbackPool;
|
|
|
+ if (!CFTTAsyncEvent_CallbackPool_5CE3E4->pResizing_Node_0) {
|
|
|
+ if (CFTTAsyncEvent_CallbackPool_5CE3E4) {
|
|
|
+ delete CFTTAsyncEvent_CallbackPool_5CE3E4;
|
|
|
}
|
|
|
- pCFTTAsyncEvent_CallbackPool = nullptr;
|
|
|
+ CFTTAsyncEvent_CallbackPool_5CE3E4 = nullptr;
|
|
|
}
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Unlock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Unlock();
|
|
|
};
|
|
|
|
|
|
// 00265478 //^_^
|
|
|
void Complete(T const* pT) {
|
|
|
- LOGI("CFTTAsyncEvent::Complete entry");
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Lock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Lock();
|
|
|
if (bool_0) {
|
|
|
// loc_265492
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Unlock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Unlock();
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -131,7 +132,7 @@ public:
|
|
|
if (r6_pEventNode_38 == nullptr || (bool_2 && !bool_1)) {
|
|
|
// loc_26557E
|
|
|
FTTSemaphore_8.SignalSema(8);
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Unlock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Unlock();
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
@@ -152,7 +153,7 @@ public:
|
|
|
}
|
|
|
|
|
|
// loc_26550E
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Unlock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Unlock();
|
|
|
// 00265514
|
|
|
if (r6_pEventNode_38 != nullptr) {
|
|
|
if (!bool_2) {
|
|
@@ -165,18 +166,18 @@ public:
|
|
|
|
|
|
// loc_26552E
|
|
|
if (bool_1) {
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Lock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Lock();
|
|
|
// loc_26554C
|
|
|
for (; r6_pEventNode_38 != nullptr; r6_pEventNode_38 = r6_pEventNode_38->next_8) { // loc_26554C
|
|
|
// loc_265540
|
|
|
- pCFTTAsyncEvent_CallbackPool->Deallocate(r6_pEventNode_38);
|
|
|
+ CFTTAsyncEvent_CallbackPool_5CE3E4->Deallocate(r6_pEventNode_38);
|
|
|
}
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Unlock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Unlock();
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ // LOGE("Complete%p EFTTEventType_4=%xEFTTEventType_2=%x", this,EFTTEventType_4,EFTTEventType_2);
|
|
|
// loc_265556
|
|
|
- // if (this != nullptr) //??? 原始函数当中确实,有这一行,但是是感觉没有必要这么写,会引起编译警告,暂时先去掉了
|
|
|
+ // if (this != nullptr) //??? 原始函数当中确实,有这一行,但是是感觉没有必要这么写,会引起编译警告,暂时先去掉了
|
|
|
{
|
|
|
if (EFTTEventType_4 == EFTTEventType_2) {
|
|
|
delete this;
|
|
@@ -188,15 +189,15 @@ public:
|
|
|
// 001FAAAC //^_^
|
|
|
void AddCallback(asyncevent_callback pFunc_Callback, void* pclass) {
|
|
|
LOGI("CFTTAsyncEvent::AddCallback Entry");
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Lock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Lock();
|
|
|
if (!bool_0 || !bool_1) {
|
|
|
- EventNode* v9 = (EventNode*)pCFTTAsyncEvent_CallbackPool->Allocate(); //引用计数 +1
|
|
|
+ EventNode* v9 = (EventNode*)CFTTAsyncEvent_CallbackPool_5CE3E4->Allocate(); //引用计数 +1
|
|
|
v9->fun_0 = pFunc_Callback;
|
|
|
v9->pClass = pclass;
|
|
|
v9->next_8 = pEventNode_38;
|
|
|
pEventNode_38 = v9;
|
|
|
if (!bool_0) {
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Unlock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Unlock();
|
|
|
LOGI("CFTTAsyncEvent::AddCallback End 11");
|
|
|
return;
|
|
|
}
|
|
@@ -205,7 +206,7 @@ public:
|
|
|
T tmplate;
|
|
|
memcpy(&tmplate, &tmplate_40, sizeof(T));
|
|
|
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Unlock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Unlock();
|
|
|
LOGI("CFTTAsyncEvent::AddCallback pFunc_Callback");
|
|
|
pFunc_Callback(this, &tmplate, pclass);
|
|
|
LOGI("CFTTAsyncEvent::AddCallback End");
|
|
@@ -213,22 +214,22 @@ public:
|
|
|
|
|
|
// 001FAF54 //^_^
|
|
|
void WaitForCompletion(T* pTemplate) {
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Lock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Lock();
|
|
|
if (bool_0) {
|
|
|
if (pTemplate) {
|
|
|
memcpy(pTemplate, &tmplate_40, sizeof(T));
|
|
|
}
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Unlock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Unlock();
|
|
|
} else {
|
|
|
- CFTTAsyncEvent_tWakeupMutex.Lock();
|
|
|
+ CFTTAsyncEvent_tWakeupMutex_5CE40C.Lock();
|
|
|
++count_68;
|
|
|
- CFTTAsyncEvent_tWakeupMutex.Unlock();
|
|
|
- CFTTAsyncEvent_tCallbackMutex.Unlock();
|
|
|
+ CFTTAsyncEvent_tWakeupMutex_5CE40C.Unlock();
|
|
|
+ CFTTAsyncEvent_tCallbackMutex_5CE3E8.Unlock();
|
|
|
|
|
|
if (FTTSemaphore_8.WaitSema(-1)) {
|
|
|
- CFTTAsyncEvent_tWakeupMutex.Lock();
|
|
|
+ CFTTAsyncEvent_tWakeupMutex_5CE40C.Lock();
|
|
|
--count_68;
|
|
|
- CFTTAsyncEvent_tWakeupMutex.Unlock();
|
|
|
+ CFTTAsyncEvent_tWakeupMutex_5CE40C.Unlock();
|
|
|
if (pTemplate)
|
|
|
memcpy(pTemplate, &tmplate_40, sizeof(T));
|
|
|
FTTSemaphore_8.SignalSema(1);
|