dezhou_client/lua_probject/base_project/Game/Controller/RoomController.lua

226 lines
7.0 KiB
Lua
Raw Normal View History

2025-12-17 21:08:27 +08:00
RoomController = {}
local M = {}
--- Create a new RoomController
function RoomController.new()
setmetatable(M, {__index = IController})
local self = setmetatable({}, {__index = M})
self.baseType = RoomController
self.class = "Room"
return self
end
local function __ConntectGameServer(cmd,room, host, _data,callback)
-- local _data = {}
_data["session"] = room.session
local _game_client = NetClient.new(host, "game")
_game_client:connect()
ControllerManager.SetGameNetClient(_game_client)
_game_client.onconnect:Add(function(code)
if (code == SocketCode.Connect) then
_game_client:send(cmd, _data, function (response)
if (response.ReturnCode == 0) then
_game_client.onconnect:Clear()
_game_client.onconnect:Add(ControllerManager.OnConnect)
callback(response)
return
end
_game_client:destroy()
if ControllerManager.GameNetClinet == _game_client then
ControllerManager.GameNetClinet =nil
end
callback(response)
end)
else
if ControllerManager.GameNetClinet == _game_client then
ControllerManager.GameNetClinet =nil
end
_game_client:destroy()
callback({ReturnCode = 101})
end
end)
-- return _game_client
end
function M:CreateRoom(game_id, _data, callback)
local _client = ControllerManager.WebClient
local data = {}
data.game_id = game_id
data["platform"] = GetPlatform()
data.config_data = _data
-- local runtime = os.clock()
_client:send(Protocol.WEB_CREATE_ROOM, data, function(res)
-- if ( res.ReturnCode == Table_Error_code.ERR_IN_ROOM or res.ReturnCode == Table_Error_code.ERR_CREATE_ROOM) then
-- self:JoinRoom("000000",callback)
-- return
-- end
if (res.ReturnCode == 0) then
local json = res.Data
local game_info = json["game_info"]
if ExtendHotupdate.CheckVersion(game_info) ~= ExtendHotupdate.VERSION_NORMAL then
ExtendHotupdate.UpdateGame(game_info,function()
res.ReturnCode = -2
callback(res)
end)
return
end
local game_id = game_info.game_id
local room_id = json["room_id"]
local server_ip = json["server_ip"]
local server_port = json["server_port"]
local room = ExtendManager.GetExtendConfig(game_id):NewRoom()
room.game_id = game_id
room.room_id = room_id
room.server_host = string.concat(server_ip, ":", server_port)
room.session = _client:getSession()
DataManager.CurrenRoom = room
local game_net = nil
local j_data = {}
j_data["session"] = room.session
if not DataManager.SelfUser.location then
DataManager.SelfUser.location = Location.new()
end
j_data["pos"] = DataManager.SelfUser.location:Location2String()
-- game_net =
__ConntectGameServer(Protocol.GAME_JOIN_ROOM,room,room.server_host, j_data, function (response)
if (response.ReturnCode == 0) then
-- game_net:clearEvent()
local _s2croom = response.Data
-- ControllerManager.SetGameNetClient(game_net)
room.owner_id = _s2croom["owner"]
room.banker_seat = _s2croom["manor"]
if _s2croom.createTime then
room.create_time = _s2croom["createTime"]
end
room.agent = _s2croom.agent == 1 and true or false
local extend = ExtendManager.GetExtendConfig(room.game_id)
extend:FillRoomData(_s2croom)
ControllerManager.ChangeController(GameController)
-- print("create room:"..(os.clock()-runtime))
callback(response)
return
end
-- game_net:destroy()
callback(response)
end)
else
if callback then callback(res) end
end
end)
end
local join_room_frame = 0
function M:PublicJoinRoom(cmd,roomid,tem,callback,group_id,pid)
printlog("公共进入房间接口=============PublicJoinRoom")
-- 同一帧不重复调用
local last_frame = join_room_frame
join_room_frame = Time.frameCount
if join_room_frame == last_frame then
return
end
-- 防止游戏没有离开控制器
ControllerManager.ChangeController(LoddyController)
local _data = {}
if cmd == Protocol.WEB_FG_MATCH_ROOM then
_data["is_null"] = tem
elseif cmd == Protocol.WEB_FG_QUEUE_ROOM then
_data["is_null"] = tem
_data["room_id"] = roomid
else
_data["room_id"] = roomid
end
_data["id"] = group_id
_data["pid"] = pid
_data["platform"] = GetPlatform()
pt(_data)
local _client = ControllerManager.GroupClient
_client:send(cmd, _data, function( res)
pt(res)
if (res.ReturnCode == 0) then
local json = res.Data
local game_info = json["game_info"]
if ExtendHotupdate.CheckVersion(game_info) ~= ExtendHotupdate.VERSION_NORMAL then
ExtendHotupdate.UpdateGame(game_info,function()
res.ReturnCode = -2
callback(res)
end)
return
end
local game_id = game_info.game_id
local server_ip = json["server_ip"]
local server_port = json["server_port"]
local room = ExtendManager.GetExtendConfig(game_id):NewRoom()
room.lev = json["lev"] -- 自己在当前房间所在圈子的职位1盟主2管理员3用户非圈子房间就是3
room.room_id = json["room_id"]
room.game_id = game_id
room.status = json["status"]
room.server_host = string.concat(server_ip, ":", server_port)
room.session = _client:getSession()
-- 圈子信息圈子id和玩法id
room.group_id = json["groupId"]
-- 圈子禁止文字聊天,禁止语音聊天
room.ban_chat1 = json["ban_chat1"]
room.ban_chat2 = json["ban_chat2"]
-- 玩法id
room.play_id = json["pid"]
-- 体力值开关
room.hpOnOff = json["hpOnOff"]
-- 体力值倍数
room.score_times = d2ad(json.hp_times) or 1
DataManager.CurrenRoom = room
local j_data = {}
if not DataManager.SelfUser.location then
DataManager.SelfUser.location = Location.new()
end
j_data["pos"] = DataManager.SelfUser.location:Location2String()
__ConntectGameServer(Protocol.GAME_JOIN_ROOM,room,room.server_host, j_data,function ( res1)
pt(res1)
ControllerManager.IsSendCard=false
if (res1.ReturnCode ~= 0 ) then
if (callback) then callback(res1) end
else
ControllerManager.enterPlayerData=res1.Data.tableInfo.playerData
local _s2croom = res1.Data
room.owner_id = _s2croom["owner"]
if _s2croom.createTime then
room.create_time = _s2croom["createTime"]
end
if _s2croom.manor then
room.banker_seat = _s2croom.manor
end
room.agent = _s2croom.agent == 1 and true or false
-- ControllerManager.SetGameNetClient(game_net)
local extend = ExtendManager.GetExtendConfig(room.game_id)
extend:FillRoomData(_s2croom)
ControllerManager.ChangeController(GameController)
local gamectr = ControllerManager.GetCurrenController()
gamectr.tmpRoomID = room.room_id
gamectr.tmpGroupID = room.group_id
if callback then callback(res1) end
end
end)
else
if callback then callback(res) end
end
end)
end
function M:JoinRoom(room_id,callback)
self:PublicJoinRoom(Protocol.WEB_JOIN_ROOM,room_id,false,callback,group_id,group_layer)
end
function M:ResetJionRoom(callback)
local _game = ControllerManager.GetController(GameController)
local o_room = DataManager.CurrenRoom
self:JoinRoom(o_room.room_id,callback)
end