KScriptList.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:1k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #include "KWin32.h"
  2. #include "KScriptList.h"
  3. KLuaScript* KScriptList::GetScript(Lua_State * L)
  4. {
  5. if (IsEmpty() || L == NULL) return NULL;
  6. KNode * pNode = GetHead();
  7. while (pNode)
  8. {
  9. KScriptNode * pScriptNode;
  10. pScriptNode = (KScriptNode *)pNode;
  11. if (pScriptNode->pScript->m_LuaState == L) return pScriptNode->pScript;
  12. pNode = pNode->GetNext();
  13. }
  14. return NULL;
  15. }
  16. void KScriptList::Activate()
  17. {
  18. if (GetNodeCount() == 0) return;
  19. KNode * pNode = NULL;
  20. pNode = GetHead();
  21. while (pNode!=NULL)
  22. {
  23. KStepLuaScript * pScript;
  24. KScriptNode * pScriptNode;
  25. pScriptNode = (KScriptNode *)pNode;
  26. pScript = (KStepLuaScript * )pScriptNode->pScript;
  27. if (pScript->Active())
  28. {
  29. KScriptNode *pDelNode = (KScriptNode*)pNode;
  30. pNode = pNode->GetNext();
  31. pDelNode->Remove();
  32. delete pDelNode;
  33. continue;
  34. }
  35. int count = lua_getgccount(pScript->m_LuaState);
  36. lua_setgcthreshold(pScript->m_LuaState, 200);
  37. pNode = pNode->GetNext();
  38. }
  39. }
  40. //SendMessage  向所有的脚本对象发送消息
  41. void KScriptList::SendMessage(char * szMessageName, char * szData)
  42. {
  43. KNode * pNode;
  44. if (this->GetNodeCount()== 0)
  45. return;
  46. pNode = this->GetHead();
  47. while (pNode!=NULL)
  48. {
  49. KStepLuaScript * pScript;
  50. KScriptNode * pScriptNode;
  51. pScriptNode = (KScriptNode *)pNode;
  52. pScript = (KStepLuaScript * )pScriptNode->pScript;
  53. //全局发送时,对象为0
  54. pScript->AddMessage(0,szMessageName, szData);
  55. pNode = pNode->GetNext();
  56. }
  57. }