Skip to content

Commit 273a87a

Browse files
StrixGqaisjp
authored andcommitted
Add async encode/decodeString (#1226)
1 parent 24a233f commit 273a87a

File tree

1 file changed

+72
-6
lines changed

1 file changed

+72
-6
lines changed

Shared/mods/deathmatch/logic/luadefs/CLuaCryptDefs.cpp

Lines changed: 72 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -368,12 +368,16 @@ int CLuaCryptDefs::EncodeString(lua_State* luaVM)
368368
StringEncryptFunction algorithm;
369369
SString data;
370370
CStringMap options;
371+
CLuaFunctionRef luaFunctionRef;
371372

372373
CScriptArgReader argStream(luaVM);
373374
argStream.ReadEnumString(algorithm);
374375
argStream.ReadString(data);
375376
argStream.ReadStringMap(options);
376377

378+
argStream.ReadFunction(luaFunctionRef, LUA_REFNIL);
379+
argStream.ReadFunctionComplete();
380+
377381
if (!argStream.HasErrors())
378382
{
379383
switch (algorithm)
@@ -389,9 +393,38 @@ int CLuaCryptDefs::EncodeString(lua_State* luaVM)
389393
return 1;
390394
}
391395

392-
SString result;
393-
SharedUtil::TeaEncode(data, key, &result);
394-
lua_pushlstring(luaVM, result, result.length());
396+
// Async
397+
if (VERIFY_FUNCTION(luaFunctionRef))
398+
{
399+
CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM);
400+
if (pLuaMain)
401+
{
402+
CLuaShared::GetAsyncTaskScheduler()->PushTask<SString>(
403+
[data, key] {
404+
// Execute time-consuming task
405+
SString result;
406+
SharedUtil::TeaEncode(data, key, &result);
407+
return result;
408+
},
409+
[luaFunctionRef](const SString& result) {
410+
CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaFunctionRef.GetLuaVM());
411+
if (pLuaMain)
412+
{
413+
CLuaArguments arguments;
414+
arguments.PushString(result);
415+
arguments.Call(pLuaMain, luaFunctionRef);
416+
}
417+
});
418+
419+
lua_pushboolean(luaVM, true);
420+
}
421+
}
422+
else // Sync
423+
{
424+
SString result;
425+
SharedUtil::TeaEncode(data, key, &result);
426+
lua_pushlstring(luaVM, result, result.length());
427+
}
395428
return 1;
396429
}
397430
default:
@@ -414,12 +447,16 @@ int CLuaCryptDefs::DecodeString(lua_State* luaVM)
414447
StringEncryptFunction algorithm;
415448
SString data;
416449
CStringMap options;
450+
CLuaFunctionRef luaFunctionRef;
417451

418452
CScriptArgReader argStream(luaVM);
419453
argStream.ReadEnumString(algorithm);
420454
argStream.ReadString(data);
421455
argStream.ReadStringMap(options);
422456

457+
argStream.ReadFunction(luaFunctionRef, LUA_REFNIL);
458+
argStream.ReadFunctionComplete();
459+
423460
if (!argStream.HasErrors())
424461
{
425462
switch (algorithm)
@@ -435,9 +472,38 @@ int CLuaCryptDefs::DecodeString(lua_State* luaVM)
435472
return 1;
436473
}
437474

438-
SString result;
439-
SharedUtil::TeaDecode(data, key, &result);
440-
lua_pushlstring(luaVM, result, result.length());
475+
// Async
476+
if (VERIFY_FUNCTION(luaFunctionRef))
477+
{
478+
CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM);
479+
if (pLuaMain)
480+
{
481+
CLuaShared::GetAsyncTaskScheduler()->PushTask<SString>(
482+
[data, key] {
483+
// Execute time-consuming task
484+
SString result;
485+
SharedUtil::TeaDecode(data, key, &result);
486+
return result;
487+
},
488+
[luaFunctionRef](const SString& result) {
489+
CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaFunctionRef.GetLuaVM());
490+
if (pLuaMain)
491+
{
492+
CLuaArguments arguments;
493+
arguments.PushString(result);
494+
arguments.Call(pLuaMain, luaFunctionRef);
495+
}
496+
});
497+
498+
lua_pushboolean(luaVM, true);
499+
}
500+
}
501+
else // Sync
502+
{
503+
SString result;
504+
SharedUtil::TeaDecode(data, key, &result);
505+
lua_pushlstring(luaVM, result, result.length());
506+
}
441507
return 1;
442508
}
443509
default:

0 commit comments

Comments
 (0)