Пример #1
0
        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();
        }
Пример #2
0
        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);
        }