| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- local NetworkManager = {}
- local serverData = require("Config/ZConfigManager.lua"):GetConfig("configServer")
- local szServerIP = serverData[1].ip
- local iServerPort = serverData[1].szPort
- local fLastRecvTime
- local bConnecting = false
- local tblFlagToDispatcher = {}
- local function RecvlogicCoroutine()
- while true do
- require("Base/CoroutineHelper.lua"):Wait(0.1)
- local connectState = CS.LuaSocketManager.Update()
- if NetworkManager.connectState ~= connectState then
- Debugf("NetworkManager dispatch %d", connectState)
- local eventManager = require("Base/ZEventDispatchCenter.lua")
- eventManager:DispatchEvent(eventManager.EventType.NET_CONNECT_STATE, connectState)
- end
- NetworkManager.connectState = connectState
- if connectState ~= 0 then
- local eventManager = require("Base/ZEventDispatchCenter.lua")
- CS.ZLog.Log.Error(string.format("Net Disconnected with state %d", connectState))
- eventManager:DispatchEvent(eventManager.EventType.NET_DISCONNECTED)
- NetworkManager:Disconnect()
- return
- end
- local msgPackage = CS.LuaSocketManager.RecvMessage()
- while msgPackage ~= nil and msgPackage.msgType and msgPackage.msgData do
- fLastRecvTime = os.time()
- CS.ZLog.Log.Debug(string.format("Serialization Flag %d", msgPackage.serializationFlag))
- require("Base/Utils.lua"):PCallOrError(function()
- local dispatcher = tblFlagToDispatcher[msgPackage.serializationFlag]
- if dispatcher ~= nil then
- dispatcher.RecvData(msgPackage)
- else
- CS.ZLog.Log.Error(string.format( "Unknown serialization flag %d", msgPackage.dispatcher))
- end
- end)
- msgPackage = CS.LuaSocketManager.RecvMessage()
- end
- end
- end
- function NetworkManager:GetLastRecvTime()
- return fLastRecvTime
- end
- function NetworkManager:IsConnecting()
- return bConnecting
- end
- function NetworkManager:SendData(msgType, bArrayMessage, bSerializationFlag, bCompressionFlag)
- return CS.LuaSocketManager.Send(msgType, bArrayMessage, bSerializationFlag, bCompressionFlag)
- end
- function NetworkManager:RegisterDispatcher(iFlag, dispatcher)
- if (dispatcher.RecvData == nil) then
- CS.ZLog.Log.Error(string.format( "Invalid dispatcher for flag %d", iFlag))
- end
- tblFlagToDispatcher[iFlag] = dispatcher
- end
- function NetworkManager:Connect()
- if bConnecting then
- return
- end
- print("Connect", bConnecting)
- bConnecting = true
- NetworkManager.connectState = 0
- CS.LuaSocketManager.Connect(szServerIP, iServerPort)
- fLastRecvTime = os.time()
- print("RecvTime", fLastRecvTime)
- self._recvlogicCoroutine = require("Base/CoroutineHelper.lua"):Start(RecvlogicCoroutine)
- end
- function NetworkManager:Disconnect()
- if not bConnecting then
- return;
- end
- bConnecting = false
- print("Disconnect")
- require("Base/CoroutineHelper.lua"):Stop(NetworkManager._recvlogicCoroutine)
- NetworkManager._recvlogicCoroutine = nil
- CS.LuaSocketManager.Disconnect()
- end
- function NetworkManager:Init()
- print("NetworkManager.Init~")
- self._c2s = require("Network/C2S.lua")
- self._s2c = require("Network/S2C.lua")
- self._eventManager = require("Base/ZEventDispatchCenter.lua")
- end
- function NetworkManager:UnInit()
- CS.LuaSocketManager.Disconnect()
- require("Base/CoroutineHelper.lua"):Stop(NetworkManager._recvlogicCoroutine)
- if NetworkManager._connectLogicCoroutine then
- require("Base/CoroutineHelper.lua"):Stop(NetworkManager._connectLogicCoroutine)
- end
- -- 心跳
- if NetworkManager._heartBeatCorutine then
- require("Base/CoroutineHelper.lua"):Stop(NetworkManager._heartBeatCorutine)
- end
- nHeartBeat = 0
- print("NetworkManager.UnInit ~")
- end
- function NetworkManager:RemoteCall(funcName, ... )
- print("NetworkManager:RemoteCall funcName:", funcName, " param:", ...)
- self._c2s:RemoteCall(funcName, ...)
- end
- return NetworkManager
|