| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- local NetworkManager = {}
- --[[
- 1. 心跳包要隔一段时间发送一次
- 2. 两个周期没有收到返回消息 弹出提示 断线重连
- ]]
- local function ConnectServer(serverIP, serverPort)
- local connectState = CS.LuaSocketManager.Connect(serverIP, serverPort)
- NetworkManager.connectState = connectState
- return connectState
- end
- local function ConnectLogicCoroutine()
- print("----> ConnectLogicCoroutine:")
- local serverIP = "192.168.1.85"
- local serverPort = 9305
- local eventManager = require("Base/ZEventDispatchCenter.lua")
- require("Base/CoroutineHelper.lua"):WaitForEndOfFrame()
- local hasFailed = false
- local condition = false
- while condition == false do
- local connectState = SafeCall(ConnectServer, serverIP, serverPort)
- NetworkManager.connectState = connectState
- if not connectState then
- print(string.format(
- "NetworkManager.ConnectLogicCoroutine ConnectServer(%s:%s) Failed. Retry after 5s:",
- serverIP, serverPort, connectState
- ))
- eventManager:DispatchEvent(eventManager.EventType.NET_CONNECT_STATE, false)
- hasFailed = true
- require("Base/CoroutineHelper.lua"):Wait(5)
- end
- condition = connectState == true
- end
- print(string.format( "NetworkManager.ConnectLogicCoroutine ConnectServer(%s:%s) Success!", serverIP, serverPort))
- if hasFailed == true then
- -- todo
- -- local languageConfig = require("Config/SConfigManager.lua"):GetConfig("languageConfig")
- -- ShowDialogOK(languageConfig["login"]["connect_success"])
- -- eventManager:DispatchEvent(eventManager.EventType.NET_CONNECT_STATE, true)
- end
- require("Network/NetworkQueue.lua"):Reset()
- end
- local function RecvlogicCoroutine()
- while true do
- require("Base/CoroutineHelper.lua"):Wait(0.1)
- local connectState = CS.LuaSocketManager.Update()
- -- todo 待办
- if not connectState then
- -- 断线重连
- return
- end
- local serverMessage = CS.LuaSocketManager.RecvMessage()
- if serverMessage ~= "" and serverMessage ~= nil then
- local serverProtocol = NetworkManager._jsonConvert:decode(serverMessage)
- local processorName = serverProtocol.msgType
- print("----> processorName:", processorName)
- if not processorName then print("Get processorName Failed for: ", serverMessage) end
- local msgType = NetworkManager._s2c[serverProtocol.msgType]
- if not msgType then print("Get msgType failed for : " , serverMessage) end
- local NetworkQueue = require("Network/NetworkQueue.lua")
- NetworkQueue:PushMsgOnRecv(tonumber(serverProtocol.uid), serverProtocol)
- -- local data = NetworkQueue:TryPopMsg()
- -- while data ~= nil do
- -- local func = NetworkManager._s2c[data.msgType]
- -- func(NetworkManager._s2c, data)
- -- data = NetworkQueue:TryPopMsg()
- -- end
- msgType(NetworkManager._s2c, serverProtocol)
- end
- end
- end
- local function HeartBeatCoroutine()
- local nMaxCount = 3
- local eventManager = require("Base/ZEventDispatchCenter.lua")
- while true do
- require("Network/C2S.lua"):HeartBeat()
- require("Base/CoroutineHelper.lua"):Wait(10)
- local nHeartBeat = GetCache("HEART_BEAT", 0)
- nHeartBeat = nHeartBeat + 1
- if nHeartBeat >= nMaxCount then
- require("Base/CoroutineHelper.lua"):Stop(NetworkManager._heartBeatCorutine)
- -- todo 用户掉线
- end
- end
- end
- function NetworkManager:Init()
- print("NetworkManager.Init~")
- self._c2s = require("Network/C2S.lua")
- self._s2c = require("Network/S2C.lua")
- self._connectLogicCoroutine = require("Base/CoroutineHelper.lua"):Start(ConnectLogicCoroutine)
- self._recvlogicCoroutine = require("Base/CoroutineHelper.lua"):Start(RecvlogicCoroutine)
- self._jsonConvert = require("Base/json.lua")
- -- todo for test: 测试环节暂时不做心跳
- -- self._heartBeatCorutine = require("Base/CoroutineHelper.lua"):Start(HeartBeatCoroutine)
- end
- function NetworkManager:UnInit()
- require("Base/CoroutineHelper.lua"):Stop(NetworkManager._connectLogicCoroutine)
- require("Base/CoroutineHelper.lua"):Stop(NetworkManager._recvlogicCoroutine)
- -- require("Base/CoroutineHelper.lua"):Stop(NetworkManager._heartBeatCorutine)
- print("NetworkManager.UnInit ~")
- end
- function NetworkManager:RemoteCall(funcName, ... )
- print("NetworkManager:RemoteCall funcName:", funcName, " param:", ...)
- self._c2s:RemoteCall(funcName, ...)
- end
- function NetworkManager:EnterMeeting(meetingId, tel, szNick)
- if not self.connectState then
- print("Network is not ready.");
- return
- end
- self._c2s:EnterMeeting(meetingId, tel, szNick)
- end
- function NetworkManager:GetScreenInfo(meetingId)
- print("----> NetworkManager:GetScreenInfo, meetingId:", meetingId)
- if not self.connectState then
- print("Network is not ready.");
- return
- end
- -- todo: 龙哥暂时没给文档
- self._c2s:GetScreenInfo(meetingId)
- end
- return NetworkManager
|