public void Save() { var writer = XmlWriter.Create(pathName, new XmlWriterSettings() { Indent = true, IndentChars = @" " }); writer.WriteStartElement(@"settings"); writer.WriteElementString(@"publicIp", PublicIp.ToString()); writer.WriteElementString(@"turnUdpPort", TurnUdpPort.ToString()); writer.WriteElementString(@"turnTcpPort", TurnTcpPort.ToString()); writer.WriteElementString(@"turnTlsPort", TurnTlsPort.ToString()); writer.WriteElementString(@"minPort", MinPort.ToString()); writer.WriteElementString(@"maxPort", MaxPort.ToString()); writer.WriteElementString(@"realm", Realm); writer.WriteElementString(@"key1", Convert.ToBase64String(Key1)); writer.WriteElementString(@"key2", Convert.ToBase64String(Key2)); writer.WriteElementString(@"adminName", AdminName); writer.WriteElementString(@"adminPass", AdminPass); writer.WriteEndElement(); writer.Flush(); writer.Close(); }
public RoomOperationResult StartGame() { if (currentAccount == null) { return(RoomOperationResult.NotAutheticated); } if (currentAccount.CurrentRoom == null) { return(RoomOperationResult.Invalid); } int portNumber; var room = currentAccount.CurrentRoom; var total = room.Room.Seats.Count(pl => pl.Account != null); var initiator = room.Room.Seats.FirstOrDefault(pl => pl.Account == currentAccount.Account); if (room.Room.State == RoomState.Gaming) { return(RoomOperationResult.Invalid); } if (total <= 1) { return(RoomOperationResult.Invalid); } if (initiator == null || initiator.State != SeatState.Host) { return(RoomOperationResult.Invalid); } if (room.Room.Seats.Any(cs => cs.Account != null && cs.State != SeatState.Host && cs.State != SeatState.GuestReady)) { return(RoomOperationResult.Invalid); } lock (room.Room) { room.Room.State = RoomState.Gaming; foreach (var unready in room.Room.Seats) { if (unready.State == SeatState.GuestReady) { unready.State = SeatState.Gaming; } } var gs = new GameSettings() { TimeOutSeconds = room.Room.Settings.TimeOutSeconds, TotalPlayers = total, CheatEnabled = CheatEnabled, DualHeroMode = room.Room.Settings.IsDualHeroMode, NumHeroPicks = room.Room.Settings.NumHeroPicks, NumberOfDefectors = room.Room.Settings.NumberOfDefectors == 2 ? 2 : 1, GameType = room.Room.Settings.GameType, }; // Load pakcages. if (gs.GameType == GameType.RoleGame) { gs.PackagesEnabled.Add("Sanguosha.Expansions.BasicExpansion"); gs.PackagesEnabled.Add("Sanguosha.Expansions.BattleExpansion"); if ((room.Room.Settings.EnabledPackages & EnabledPackages.Wind) != 0) { gs.PackagesEnabled.Add("Sanguosha.Expansions.WindExpansion"); } if ((room.Room.Settings.EnabledPackages & EnabledPackages.Fire) != 0) { gs.PackagesEnabled.Add("Sanguosha.Expansions.FireExpansion"); } if ((room.Room.Settings.EnabledPackages & EnabledPackages.Woods) != 0) { gs.PackagesEnabled.Add("Sanguosha.Expansions.WoodsExpansion"); } if ((room.Room.Settings.EnabledPackages & EnabledPackages.Hills) != 0) { gs.PackagesEnabled.Add("Sanguosha.Expansions.HillsExpansion"); } if ((room.Room.Settings.EnabledPackages & EnabledPackages.SP) != 0) { gs.PackagesEnabled.Add("Sanguosha.Expansions.SpExpansion"); gs.PackagesEnabled.Add("Sanguosha.Expansions.StarSpExpansion"); } if ((room.Room.Settings.EnabledPackages & EnabledPackages.OverKnightFame) != 0) { gs.PackagesEnabled.Add("Sanguosha.Expansions.OverKnightFame11Expansion"); gs.PackagesEnabled.Add("Sanguosha.Expansions.OverKnightFame12Expansion"); gs.PackagesEnabled.Add("Sanguosha.Expansions.OverKnightFame13Expansion"); } if ((room.Room.Settings.EnabledPackages & EnabledPackages.Others) != 0) { gs.PackagesEnabled.Add("Sanguosha.Expansions.AssasinExpansion"); } } if (gs.GameType == GameType.Pk1v1) { gs.PackagesEnabled.Add("Sanguosha.Expansions.Pk1v1Expansion"); } foreach (var addconfig in room.Room.Seats) { var account = addconfig.Account; if (account != null) { account.LoginToken = new LoginToken() { TokenString = Guid.NewGuid() }; account.IsDead = false; gs.Accounts.Add(account); } } GameService.StartGameService(HostingIp, gs, room.Room.Id, _OnGameEnds, out portNumber); room.Room.IpAddress = PublicIp.ToString(); room.Room.IpPort = portNumber; _NotifyGameStart(room.Room.Id, PublicIp, portNumber); } currentAccount.LastAction = DateTime.Now; return(RoomOperationResult.Success); }