예제 #1
0
        /// <summary>
        /// Bonus wirtualnych zetonow za zalogowanie sie
        /// </summary>
        /// <param name="user"></param>
        private void DailyVirtualBonus(UserModel user)
        {
            if (user.IsOnline())
            {
                var wallet = user.GetWallet(Enums.CurrencyType.VIRTUAL);

                using (ISession session = DatabaseSession.Open())
                {
                    var transferList = session.QueryOver <WalletModel>().
                                       Where(w => w.ID == wallet.ID).
                                       SingleOrDefault().
                                       TransferList;

                    if (!transferList.Any(c => c.Timestamp.Date == DateTime.Now.Date && c.Flag == "LOGIN_BONUS"))
                    {
                        Task.Factory.StartNew(() =>
                        {
                            System.Timers.Timer timer = new System.Timers.Timer(2000);
                            timer.Elapsed            += (o, e) =>
                            {
                                user.Deposit(
                                    Enums.CurrencyType.VIRTUAL,
                                    1000.00m,
                                    "Bonus wirtualny za zalogowanie się!",
                                    "LOGIN_BONUS"
                                    );
                            };
                            timer.AutoReset = false;
                            timer.Enabled   = true;
                        });
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Pobiera reklame lobby
        /// </summary>
        public void GetAdsLobby()
        {
            using (ISession session = DatabaseSession.Open())
            {
                var    advList = session.QueryOver <AdvertisingModel>().List().ToList();
                Random r       = new Random();
                var    adv     = advList.ElementAt(r.Next(0, advList.Count() - 1));

                CurrentClient.GetClientProxy <IPokerClient>().OnGetAdvertising(adv);
            }
        }
예제 #3
0
        /// <summary>
        /// Logowanie użytkownika
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        public void DoLogin(string username, string password)
        {
            Console.WriteLine("Logowanie -> " + username);

            if (!ServerOpened)
            {
                throw new ApplicationException("Serwer został chwilowo zamknięty");
            }

            //Sprawdzamy czy użytkownik jest już zalogowany
            var _userLogged = (from c in Clients
                               where c.User.Username == username
                               select c).FirstOrDefault();

            if (_userLogged != null)
            {
                throw new ApplicationException("Użytkownik jest już zalogowany");
            }

            using (var session = DatabaseSession.Open())
            {
                var user = session.QueryOver <UserModel>().
                           Where(u => u.Username == username).SingleOrDefault();

                if (user == null || (user != null && !Helper.CheckPassword(user.Password, password)))
                {
                    throw new ApplicationException("Złe dane do logowania, popraw dane i spróbuj ponownie.");
                }

                //Tworzenie modelu użytkownika
                ClientModel client = new ClientModel(
                    user
                    )
                {
                    Client      = CurrentClient,
                    ClientProxy = CurrentClient.GetClientProxy <IPokerClient>()
                };

                //Dodajemy uchwyt
                client.Client.Disconnected += ClientDisconnected;

                //Dodawanie do listy zalogowanych klientów
                Clients.Add(client);

                //Wysyłanie informacji do użytkownika o poprawnym zalogowaniu
                client.ClientProxy.OnLoginSuccessfull(CurrentClient.ClientId, (UserModel)user);

                Console.WriteLine("Aktualnie zalogowanych -> " + Clients.Count());

                DailyVirtualBonus(user);
            }
        }
예제 #4
0
        public static void Deposit(this UserModel user, Enums.CurrencyType currency, decimal value, string comment = "", string flag = "")
        {
            using (var session = DatabaseSession.Open())
            {
                var wallet = session.QueryOver <WalletModel>().
                             Where(u => u.User.ID == user.ID).
                             Where(u => u.Type == currency).
                             SingleOrDefault();

                if (wallet == null)
                {
                    return;
                }

                using (var transaction = session.BeginTransaction())
                {
                    TransferModel transfer = new TransferModel()
                    {
                        Wallet             = wallet,
                        Amount             = value,
                        Timestamp          = DateTime.Now.ToUniversalTime(),
                        Type               = Enums.TransferType.DEPOSIT,
                        Comment            = comment,
                        Flag               = flag,
                        Currency           = wallet.Type,
                        WalletAmountBefore = wallet.Available
                    };

                    wallet.Available += value;

                    session.Save(transfer);
                    session.Update(wallet);

                    transaction.Commit();

                    if (user.IsOnline())
                    {
                        var client = user.GetClient();

                        if (transfer.Comment == "")
                        {
                            transfer.Comment = "Wpłata na konto w wysokości " + CurrencyFormat.Get(wallet.Type, transfer.Amount);
                        }

                        client.OnDepositInfo(transfer);
                    }
                }
            }
        }
예제 #5
0
        /// <summary>
        /// Oddaje kwote dla gracza, w wypadku turniejow jest to depozyt
        /// </summary>
        /// <param name="user"></param>
        /// <param name="currency"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool GameLeaveTransaction(this UserModel user, Enums.CurrencyType currency, decimal value)
        {
            var wallet = user.GetWallet(currency);

            using (ISession session = DatabaseSession.Open())
            {
                using (var transaction = session.BeginTransaction())
                {
                    wallet.Available += value;
                    session.Update(wallet);
                    transaction.Commit();
                    return(true);
                }
            }
        }
예제 #6
0
        public static List <WalletModel> GetWalletList(this UserModel user)
        {
            List <WalletModel> walletList = new List <WalletModel>();

            using (ISession session = DatabaseSession.Open())
            {
                walletList = session.QueryOver <WalletModel>().
                             Where(u => u.User.ID == user.ID).List().ToList();

                //Dodajemy automatycznie wirtualną walutę gdy jej nie ma
                if (walletList != null && walletList.Where(w => w.Type == Enums.CurrencyType.VIRTUAL).Count() == 0)
                {
                    using (var transaction = session.BeginTransaction())
                    {
                        WalletModel wallet = new WalletModel()
                        {
                            Type         = Enums.CurrencyType.VIRTUAL,
                            User         = user,
                            TransferList = new List <TransferModel>()
                        };
                        walletList.Add(wallet);

                        session.Save(wallet);

                        transaction.Commit();
                    }
                }

                //Modyfikujemy kwoty "InGame"
                foreach (var wallet in walletList)
                {
                    var tableList = wallet.User.GetTablePlaying().Where(c => c.Currency == wallet.Type);
                    wallet.InGame = tableList.Sum(
                        c => c.PlayersList.Where(
                            d => d.User.ID == wallet.User.ID
                            ).FirstOrDefault().Stack
                        );
                }

                return(walletList);
            }
        }
예제 #7
0
        /// <summary>
        /// Rejestruje gracza
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public bool DoRegister(UserModel user)
        {
            using (ISession session = DatabaseSession.Open())
            {
                var userExists = session.QueryOver <UserModel>().
                                 Where(u => u.Username == user.Username).SingleOrDefault();

                if (userExists == null)
                {
                    using (var transaction = session.BeginTransaction())
                    {
                        string generatedSalt = "VF2aqaOy4fEt";
                        string md5pwd        = Helper.GetMd5Hash(generatedSalt + user.Password);

                        string newpasswordfield = "md5" + "$" + generatedSalt + "$" + md5pwd;

                        var newUser = new UserModel()
                        {
                            Username    = user.Username,
                            Password    = newpasswordfield,
                            Email       = user.Email,
                            LastLogin   = DateTime.Now,
                            DateJoined  = DateTime.Now,
                            IsStaff     = false,
                            IsActive    = true,
                            IsSuperuser = false,
                            Firstname   = "",
                            Lastname    = ""
                        };

                        session.Save(newUser);

                        transaction.Commit();
                    }
                    return(true);
                }
                else
                {
                    throw new ApplicationException("Nazwa użytkownika jest już zajęta.");
                }
            }
        }
예제 #8
0
        public static bool ChangePassword(this UserModel user, string newHash)
        {
            using (ISession session = DatabaseSession.Open())
            {
                var userDB = session.QueryOver <UserModel>().
                             Where(u => u.ID == user.ID).SingleOrDefault();

                if (userDB != null)
                {
                    using (var transaction = session.BeginTransaction())
                    {
                        userDB.Password = newHash;

                        session.Update(userDB);
                        transaction.Commit();
                    }
                }
                return(true);
            }
        }
예제 #9
0
        /// <summary>
        /// Pobiera liste operacji gracza
        /// </summary>
        /// <param name="wallet"></param>
        /// <returns></returns>
        public List <TransferModel> GetTransferOperations(WalletModel wallet)
        {
            using (ISession session = DatabaseSession.Open())
            {
                var transferList = session.QueryOver <WalletModel>().
                                   Where(w => w.ID == wallet.ID).
                                   SingleOrDefault().
                                   TransferList;

                foreach (var transfer in transferList)
                {
                    if (transfer.Comment == "")
                    {
                        transfer.Comment = "Wpłata na konto w wysokości " + CurrencyFormat.Get(wallet.Type, transfer.Amount);
                    }
                }

                return(transferList.OrderByDescending(d => d.Timestamp).Take(15).ToList());
            }
        }