NetworkManager.lua.txt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. local NetworkManager = {}
  2. local serverData = require("Config/ZConfigManager.lua"):GetConfig("configServer")
  3. local szServerIP = serverData[1].ip
  4. local iServerPort = serverData[1].szPort
  5. local fLastRecvTime
  6. local bConnecting = false
  7. local tblFlagToDispatcher = {}
  8. local function RecvlogicCoroutine()
  9. while true do
  10. require("Base/CoroutineHelper.lua"):Wait(0.1)
  11. local connectState = CS.LuaSocketManager.Update()
  12. if NetworkManager.connectState ~= connectState then
  13. Debugf("NetworkManager dispatch %d", connectState)
  14. local eventManager = require("Base/ZEventDispatchCenter.lua")
  15. eventManager:DispatchEvent(eventManager.EventType.NET_CONNECT_STATE, connectState)
  16. end
  17. NetworkManager.connectState = connectState
  18. if connectState ~= 0 then
  19. local eventManager = require("Base/ZEventDispatchCenter.lua")
  20. CS.ZLog.Log.Error(string.format("Net Disconnected with state %d", connectState))
  21. eventManager:DispatchEvent(eventManager.EventType.NET_DISCONNECTED)
  22. NetworkManager:Disconnect()
  23. return
  24. end
  25. local msgPackage = CS.LuaSocketManager.RecvMessage()
  26. while msgPackage ~= nil and msgPackage.msgType and msgPackage.msgData do
  27. fLastRecvTime = os.time()
  28. CS.ZLog.Log.Debug(string.format("Serialization Flag %d", msgPackage.serializationFlag))
  29. require("Base/Utils.lua"):PCallOrError(function()
  30. local dispatcher = tblFlagToDispatcher[msgPackage.serializationFlag]
  31. if dispatcher ~= nil then
  32. dispatcher.RecvData(msgPackage)
  33. else
  34. CS.ZLog.Log.Error(string.format( "Unknown serialization flag %d", msgPackage.dispatcher))
  35. end
  36. end)
  37. msgPackage = CS.LuaSocketManager.RecvMessage()
  38. end
  39. end
  40. end
  41. function NetworkManager:GetLastRecvTime()
  42. return fLastRecvTime
  43. end
  44. function NetworkManager:IsConnecting()
  45. return bConnecting
  46. end
  47. function NetworkManager:SendData(msgType, bArrayMessage, bSerializationFlag, bCompressionFlag)
  48. return CS.LuaSocketManager.Send(msgType, bArrayMessage, bSerializationFlag, bCompressionFlag)
  49. end
  50. function NetworkManager:RegisterDispatcher(iFlag, dispatcher)
  51. if (dispatcher.RecvData == nil) then
  52. CS.ZLog.Log.Error(string.format( "Invalid dispatcher for flag %d", iFlag))
  53. end
  54. tblFlagToDispatcher[iFlag] = dispatcher
  55. end
  56. function NetworkManager:Connect()
  57. if bConnecting then
  58. return
  59. end
  60. print("Connect", bConnecting)
  61. bConnecting = true
  62. NetworkManager.connectState = 0
  63. CS.LuaSocketManager.Connect(szServerIP, iServerPort)
  64. fLastRecvTime = os.time()
  65. print("RecvTime", fLastRecvTime)
  66. self._recvlogicCoroutine = require("Base/CoroutineHelper.lua"):Start(RecvlogicCoroutine)
  67. end
  68. function NetworkManager:Disconnect()
  69. if not bConnecting then
  70. return;
  71. end
  72. bConnecting = false
  73. print("Disconnect")
  74. require("Base/CoroutineHelper.lua"):Stop(NetworkManager._recvlogicCoroutine)
  75. NetworkManager._recvlogicCoroutine = nil
  76. CS.LuaSocketManager.Disconnect()
  77. end
  78. function NetworkManager:Init()
  79. print("NetworkManager.Init~")
  80. self._c2s = require("Network/C2S.lua")
  81. self._s2c = require("Network/S2C.lua")
  82. self._eventManager = require("Base/ZEventDispatchCenter.lua")
  83. end
  84. function NetworkManager:UnInit()
  85. CS.LuaSocketManager.Disconnect()
  86. require("Base/CoroutineHelper.lua"):Stop(NetworkManager._recvlogicCoroutine)
  87. if NetworkManager._connectLogicCoroutine then
  88. require("Base/CoroutineHelper.lua"):Stop(NetworkManager._connectLogicCoroutine)
  89. end
  90. -- 心跳
  91. if NetworkManager._heartBeatCorutine then
  92. require("Base/CoroutineHelper.lua"):Stop(NetworkManager._heartBeatCorutine)
  93. end
  94. nHeartBeat = 0
  95. print("NetworkManager.UnInit ~")
  96. end
  97. function NetworkManager:RemoteCall(funcName, ... )
  98. print("NetworkManager:RemoteCall funcName:", funcName, " param:", ...)
  99. self._c2s:RemoteCall(funcName, ...)
  100. end
  101. return NetworkManager