Esempio n. 1
0
        private void ClientLogin(PlayerTransferModel player, SocketState ss)
        {
            if (player.AccountName != null && player.Password != null)
            {
                player.AccountName = player.AccountName.ToLower();
                Console.WriteLine("New client wants to login as " + player.AccountName + ".");

                String query = String.Format("SELECT * FROM PlayerAccountData WHERE AccountName = '{0}' AND Password = '******'", player.AccountName, player.Password);
                using (SqlConnection connection = new SqlConnection(sqlConnectionString))
                {
                    using (SqlCommand command = connection.CreateCommand())
                    {
                        command.CommandText = query;
                        connection.Open();

                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            if (reader.HasRows)
                            {
                                while (reader.Read())
                                {
                                    player.PlayerName = reader["PlayerName"].ToString();
                                    Console.WriteLine(String.Format("New Client successfully login as {0}({1}).", player.AccountName, player.PlayerName));
                                    player.Password      = null;
                                    player.TransferState = PlayerTransferModel.TransferStateType.Accept;
                                }
                            }
                            else
                            {
                                Console.WriteLine("A client wants to login with wrong AccountName/Password pair");
                                player = new PlayerTransferModel();
                                player.TransferState   = PlayerTransferModel.TransferStateType.Decline;
                                player.TransferMessage = "Wrong AccountName/Password pair";
                                NetworkController.Send(ss, JsonConvert.SerializeObject(player));
                                return;
                            }
                        }
                    }

                    player.PlayerHeroList = new List <string>();

                    query = String.Format("SELECT * FROM PlayerHeroData WHERE PlayerName = '{0}'", player.PlayerName);
                    using (SqlCommand command = connection.CreateCommand())
                    {
                        command.CommandText = query;

                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            if (reader.HasRows)
                            {
                                while (reader.Read())
                                {
                                    player.PlayerHeroList.Add(reader["HeroName"].ToString());
                                }
                            }
                        }
                    }

                    player.PlayerCardList = new Dictionary <string, int>();

                    query = String.Format("SELECT * FROM PlayerCardData WHERE PlayerName = '{0}'", player.PlayerName);
                    using (SqlCommand command = connection.CreateCommand())
                    {
                        command.CommandText = query;

                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            if (reader.HasRows)
                            {
                                while (reader.Read())
                                {
                                    player.PlayerCardList.Add(reader["CardName"].ToString(), Convert.ToInt32(reader["CardCount"].ToString()));
                                }
                            }
                        }
                    }

                    connection.Close();
                }

                Console.WriteLine(String.Format("User data has sent to {0}({1}), waiting for client action.", player.AccountName, player.PlayerName));
                NetworkController.Send(ss, JsonConvert.SerializeObject(player));
                Player p = new Player(player);
                lock (playerDic)
                {
                    playerDic.Add(ss, p);
                }
            }
            else
            {
                throw new Exception();
            }
        }
Esempio n. 2
0
        private void ClientEnterDungeon(PlayerTransferModel player, SocketState ss)
        {
            Console.WriteLine(String.Format("{0} wants to enter {1}.", playerDic[ss].PlayerName, player.TransferMessage));
            if (playerDic.ContainsKey(ss) && player.TransferMessage != null && player.CardPlayer != null && GameDic.DungeonDic.ContainsKey(player.TransferMessage))
            {
                int    count    = 0;
                string heroName = "";
                foreach (var item in player.CardPlayer.CardDic)
                {
                    count += item.Value;
                    if (!GameDic.CardDic.ContainsKey(item.Key))
                    {
                        throw new Exception();
                    }

                    if (heroName == "")
                    {
                        heroName = GameDic.CardDic[item.Key].Owner;
                    }
                    else if (heroName != GameDic.CardDic[item.Key].Owner)
                    {
                        throw new Exception();
                    }

                    if (GameDic.CardDic[item.Key].CardRarity == Card.Rarity.Basic)
                    {
                        if (!GameDic.HeroDic[heroName].HeroBasicCard.ContainsKey(item.Key) || GameDic.HeroDic[heroName].HeroBasicCard[item.Key] < item.Value)
                        {
                            throw new Exception();
                        }
                    }
                    else
                    {
                        if (!playerDic[ss].HasCard(item.Key, item.Value))
                        {
                            throw new Exception();
                        }
                    }
                }
                if (count != GameDic.DungeonDic[player.TransferMessage].DungeonAllowedCardCount)
                {
                    throw new Exception();
                }
                if (!playerDic[ss].HasHero(heroName) || heroName != player.CardPlayer.MainHero)
                {
                    throw new Exception();
                }
                if (player.CardPlayer.SubHero != null && !playerDic[ss].HasHero(player.CardPlayer.SubHero))
                {
                    throw new Exception();
                }
                var temp = GameDic.DungeonDic[player.TransferMessage].Generate();
                if (!playerDic[ss].EnterDungeon(temp, player.CardPlayer))
                {
                    throw new Exception();
                }

                player.TransferState = PlayerTransferModel.TransferStateType.Accept;
                player.Dungeon       = temp;
                NetworkController.Send(ss, JsonConvert.SerializeObject(player));
                Console.WriteLine(String.Format("{0} enters {1} successfully.", playerDic[ss].PlayerName, player.TransferMessage));
            }
            else
            {
                throw new Exception();
            }
        }