local VoiceRoom_Model = {} local private = {} local EventSystem = require("Event/EventSystem") local voice_call_pb = require "Proto.voice_call_pb" VoiceRoom_Model.VoiceRoomType = { None = -1, Guild = 1, -- 势力语音房间 DragonArtery = 2, --龙脉战房间 Room_3V3 = 3, -- 3v3语音房间 GuildWar = 4, -- 势力战语音房间 Room_HeroMatch3V3 = 5, --天地争霸 Room_SyncFourCountry = 6, --华夏争霸 ChangAnSiege = 7, --长安攻防战 TeamFairChampionship = 8, --天下会武3V3 } VoiceRoom_Model.VoiceRoomStateChange = { None = -1, Room = 1, -- 进入或者离开房间 Microphone = 2, -- 麦克风结果 Listener = 3, -- 听筒结果 } -------------------语音房间状态设置步骤------------------- 此模块为通用 如果需要修改 请跟袁立沟通好再修改 --1.VoiceCallStateReq 调用此方法初始化 --2.监听VoiceRoom_OnServerRoomInitStateResp 回调 进入语音房间 --3 local listen, call = CTL.VoiceRoom.IsEnabledListener(), CTL.VoiceRoom.IsEnabledMicrophone() -- MDL.VoiceRoom.VoiceCallSetStateReq(self.voiceRoomType, call, listen) 设置语音开麦 收听状态 --4 退出房间 VoiceRoom_Controller.CheckNeedLeaveVoiceRoom() function VoiceRoom_Model.OnStartup() private.roomSettingData = {} NetManager.RegisterMsgCB(MessageEnums.MessageVoiceCallState, private.VoiceCallStateResp) --语音通话状态请求 NetManager.RegisterMsgCB(MessageEnums.MessageVoiceCallSetState, private.VoiceCallSetStateResp) --语音通话状态设置 end function VoiceRoom_Model.VoiceCallStateReq(roomType) if not private.roomSettingData[roomType] then private.roomSettingData[roomType] = {openMicrophone = false, openListener = false} end local msg = voice_call_pb.VoiceCallStateReq() msg.roomType = roomType NetManager.SendMessage(MessageEnums.MessageVoiceCallState, msg) end --语音状态请求返回 function private.VoiceCallStateResp(msgResp) if msgResp.Resp.Code == 0 then private.roomSettingData[msgResp.roomType].openMicrophone = msgResp.call private.roomSettingData[msgResp.roomType].openListener = msgResp.listen EventSystem.Dispatch(EventID.VoiceRoom_OnServerRoomInitStateResp, msgResp.roomType) end end function VoiceRoom_Model.GetVoiceRoomInitState(roomType) if GameAppInfo.IsMacPackage() then return false, false end if private.roomSettingData[roomType] then return private.roomSettingData[roomType].openListener, private.roomSettingData[roomType].openMicrophone end return false, false end function VoiceRoom_Model.OnRefuseEnableMicrophone(roomType) if roomType == VoiceRoom_Model.VoiceRoomType.Room_3V3 or roomType == VoiceRoom_Model.VoiceRoomType.Room_HeroMatch3V3 or roomType == VoiceRoom_Model.VoiceRoomType.Room_SyncFourCountry or roomType == VoiceRoom_Model.VoiceRoomType.ChangAnSiege or roomType == VoiceRoom_Model.VoiceRoomType.TeamFairChampionship then private.roomSettingData[roomType].openMicrophone = false VoiceRoom_Model.VoiceCallSetStateReq(roomType, false, private.roomSettingData[roomType].openListener) end end function VoiceRoom_Model.VoiceCallSetStateReq(roomType, openMicrophone, openListener) if GameAppInfo.IsMacPackage() then CTL.Tips.AddTipsMsg("当前版本不支持语音功能") return end local msg = voice_call_pb.VoiceCallSetStateReq() msg.roomType = roomType msg.call = openMicrophone msg.listen = openListener NetManager.SendMessage(MessageEnums.MessageVoiceCallSetState, msg) end --语音状态设置返回 function private.VoiceCallSetStateResp(msgResp) logging.log(LTAG.LOG," VoiceCallSetStateResp ", msgResp) if msgResp.Resp.Code == 0 then if CTL.VoiceRoom.IsInVoiceRoom(msgResp.roomType) then if private.roomSettingData[msgResp.roomType].openMicrophone ~= msgResp.call then private.roomSettingData[msgResp.roomType].openMicrophone = msgResp.call CTL.VoiceRoom.EnableMicrophone(msgResp.roomType, msgResp.call) elseif CTL.VoiceRoom.IsEnabledMicrophone() ~= msgResp.call then --这里因为设备权限的问题,服务器记录的信息和实际的开关不一致,需要执行一次开关 CTL.VoiceRoom.EnableMicrophone(msgResp.roomType, msgResp.call) end if private.roomSettingData[msgResp.roomType].openListener ~= msgResp.listen then private.roomSettingData[msgResp.roomType].openListener = msgResp.listen CTL.VoiceRoom.EnableListener(msgResp.roomType, msgResp.listen) end else private.roomSettingData[msgResp.roomType].openMicrophone = msgResp.call private.roomSettingData[msgResp.roomType].openListener = msgResp.listen end end end return VoiceRoom_Model