@@ -368,12 +368,16 @@ int CLuaCryptDefs::EncodeString(lua_State* luaVM)
368
368
StringEncryptFunction algorithm;
369
369
SString data;
370
370
CStringMap options;
371
+ CLuaFunctionRef luaFunctionRef;
371
372
372
373
CScriptArgReader argStream (luaVM);
373
374
argStream.ReadEnumString (algorithm);
374
375
argStream.ReadString (data);
375
376
argStream.ReadStringMap (options);
376
377
378
+ argStream.ReadFunction (luaFunctionRef, LUA_REFNIL);
379
+ argStream.ReadFunctionComplete ();
380
+
377
381
if (!argStream.HasErrors ())
378
382
{
379
383
switch (algorithm)
@@ -389,9 +393,38 @@ int CLuaCryptDefs::EncodeString(lua_State* luaVM)
389
393
return 1 ;
390
394
}
391
395
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
+ }
395
428
return 1 ;
396
429
}
397
430
default :
@@ -414,12 +447,16 @@ int CLuaCryptDefs::DecodeString(lua_State* luaVM)
414
447
StringEncryptFunction algorithm;
415
448
SString data;
416
449
CStringMap options;
450
+ CLuaFunctionRef luaFunctionRef;
417
451
418
452
CScriptArgReader argStream (luaVM);
419
453
argStream.ReadEnumString (algorithm);
420
454
argStream.ReadString (data);
421
455
argStream.ReadStringMap (options);
422
456
457
+ argStream.ReadFunction (luaFunctionRef, LUA_REFNIL);
458
+ argStream.ReadFunctionComplete ();
459
+
423
460
if (!argStream.HasErrors ())
424
461
{
425
462
switch (algorithm)
@@ -435,9 +472,38 @@ int CLuaCryptDefs::DecodeString(lua_State* luaVM)
435
472
return 1 ;
436
473
}
437
474
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
+ }
441
507
return 1 ;
442
508
}
443
509
default :
0 commit comments