public void OpenRecordFile(string path) { var bytes = File.ReadAllBytes(path); var reader = new Deserializer(Compressor.Decompress(bytes)); var TypeId = reader.GetInt32(); var RoomId = reader.GetInt32(); var Seed = reader.GetInt32(); var AllActors = reader.GetBytes_255(); var msg = new Msg_RepMissFrame(); msg.startTick = 0; msg.Deserialize(reader); var msgStartGame = new Msg_L2C_StartGame(); //msgStartGame.RoomID = RoomId; //msgStartGame.Seed = Seed; //msgStartGame.AllActors = AllActors; //msgStartGame.SimulationSpeed = 60; //MaxRunTick = msg.frames.Length + 1; IsVideoMode = true; framesInfo = msg; gameInfo = msgStartGame; }
protected void C2L_StartGame(IIncommingMessage reader) { var msg = reader.Parse <Msg_C2L_StartGame>(); Debug.Log("C2L_StartGame" + msg); var user = reader.Peer.GetExtension <User>(); if (user == null) { return; } var room = user.Room; if (room?.Owner != user) { reader.Respond(1, EResponseStatus.Failed); return; } if (room.IsPlaying || _allGameServers.Count <= 0) { reader.Respond(room.IsPlaying ? 2 : 3, EResponseStatus.Failed); return; } var gameHash = "game" + LRandom.Next(); var playerInfos = new GamePlayerInfo[room.Users.Count]; for (int i = 0; i < room.Users.Count; i++) { var pUser = room.Users[i]; playerInfos[i] = new GamePlayerInfo() { UserId = pUser.UserId, Account = pUser.Account, LoginHash = pUser.LoginHash, }; } //TODO 使用平衡策略去获取服务器 var server = _allGameServers[LRandom.Next(_allGameServers.Count)]; server?.SendMessage((short)EMsgLS.L2G_CreateGame, new Msg_L2G_CreateGame() { GameType = user.GameType, Players = playerInfos, MapId = room.MapId, RoomId = room.RoomId, GameHash = gameHash }, (status, response) => { if (status != EResponseStatus.Failed) { var ipInfo = server.GetExtension <ServerIpInfo>(); room.ServerPeer = server; room.IsPlaying = true; room.GameHash = gameHash; var retMsg = new Msg_L2C_StartGame() { GameServerEnd = new IPEndInfo() { Ip = ipInfo.Ip, Port = ipInfo.Port }, GameHash = gameHash, RoomId = room.RoomId, GameId = response.AsInt(), IsReconnect = false }; Log(" Msg_L2C_StartGame" + retMsg); foreach (var roomUser in room.Users) { roomUser.Peer?.SendMessage((short)EMsgSC.L2C_StartGame, retMsg); } } } ); }