示例#1
0
 private void LoginButton_Click(object sender, RoutedEventArgs e)
 {
     if (login_UserId.Text.Length == 0 || login_UserPwd.Password.Length == 0)
     {
         System.Windows.MessageBox.Show("用户名或密码不可以为空!");
     }
     else
     {
         userInfo = DB_Account.SearchUserInfo(login_UserId.Text);
         if (userInfo != null)
         {
             if (userInfo.AccountID.Equals(login_UserId.Text.Trim()) && userInfo.Password.Equals(login_UserPwd.Password.Trim()))
             {
                 MainWindow mainWindow = new MainWindow();
                 if (userInfo.UserLevel == "1")
                 {
                     mainWindow.UserInFoModule.Visibility = Visibility;
                 }
                 mainWindow.Show();
                 Close();
             }
             else
             {
                 System.Windows.MessageBox.Show("密码错误!");
             }
         }
     }
 }
示例#2
0
        private void DeleteBtn_Click(object sender, RoutedEventArgs e)
        {
            DataRowView myselect = (DataRowView)UserInfo_DgSource.SelectedItem;

            if (myselect != null)
            {
                string accountID = myselect.Row[0].ToString();
                if (accountID.Equals(Login.userInfo.AccountID))
                {
                    MessageBox.Show("不允许删除自己,请周知!");
                }
                else
                {
                    MessageBoxResult result = MessageBox.Show("确定删除用户?", "提示", MessageBoxButton.YesNo);
                    switch (result)
                    {
                    case MessageBoxResult.Yes:
                        if (DB_Account.updateUserStatus(accountID, Login.userInfo.AccountID, "1"))
                        {
                            MessageBox.Show("删除成功!");
                            myselect.Delete();
                        }
                        break;

                    case MessageBoxResult.No:
                        break;
                    }
                }
            }
            else
            {
                MessageBox.Show("未选中数据!");
            }
        }
示例#3
0
        protected override async void Run(Session session, C2R_Register message, Action <R2C_Register> reply)
        {
            R2C_Register response = new R2C_Register();

            try
            {
                //验证账号格式
                if (!Regex.IsMatch(message.Account, "^[A-Za-z0-9]*$"))
                {
                    response.Error = ProtocolErrorCode.ERR_IllegalCharacter;
                    reply(response);
                    return;
                }

                //验证密码格式
                if (!Regex.IsMatch(message.Password, "^[A-Za-z0-9]*$"))
                {
                    response.Error = ProtocolErrorCode.ERR_IllegalCharacter;
                    reply(response);
                    return;
                }

                //数据库操作对象
                DBProxyComponent dbProxy = Game.Scene.GetComponent <DBProxyComponent>();

                //查询账号是否存在
                var result = await dbProxy.Query <DB_Account>((p) => p.Account == message.Account);

                if (result.Count > 0)
                {
                    response.Error = ProtocolErrorCode.ERR_AccountAlreadyRegister;
                    reply(response);
                    return;
                }

                //新建账号
                DB_Account newAccount = ComponentFactory.CreateWithId <DB_Account>(IdGenerater.GenerateId());
                newAccount.Account  = message.Account;
                newAccount.Password = message.Password;

                Log.Info($"注册新账号:{MongoHelper.ToJson(newAccount)}");

                //新建用户信息
                DB_UserInfo newUser = ComponentFactory.CreateWithId <DB_UserInfo>(newAccount.Id);
                newUser.Account = $"用户{message.Account}";
                newUser.RoleDataList.Add(1001);

                //保存到数据库
                await dbProxy.Save(newAccount);

                await dbProxy.Save(newUser, false);

                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
示例#4
0
        protected override async void Run(Session session, C2R_RBLogin message, Action <R2C_RBLogin> reply)
        {
            R2C_RBLogin response = new R2C_RBLogin();

            try
            {
                //数据库操作对象
                DBProxyComponent dbProxy = Game.Scene.GetComponent <DBProxyComponent>();

                Log.Info($"登录请求:{{Account:'{message.Account}',Password:'******'}}");
                //验证账号密码是否正确
                var result = await dbProxy.Query <DB_Account>((p) => p.Account == message.Account);

                //查无此账号
                if (result.Count == 0)
                {
                    response.Error = ProtocolErrorCode.ERR_LoginError;
                    reply(response);
                    return;
                }

                //密码错误
                DB_Account account = result[0] as DB_Account;
                if (account.Password != message.Password)
                {
                    response.Error = ProtocolErrorCode.ERR_LoginError;
                    reply(response);
                    return;
                }

                Log.Info($"账号登录成功{MongoHelper.ToJson(account)}");

                //将已在线玩家踢下线
                await RealmHelper.KickOutPlayer(account.Id);

                //随机分配网关服务器
                StartConfig gateConfig  = Game.Scene.GetComponent <RealmGateAddressComponent>().GetAddress();
                Session     gateSession = Game.Scene.GetComponent <NetInnerComponent>().Get(gateConfig.GetComponent <InnerConfig>().IPEndPoint);

                //请求登录Gate服务器密匙
                G2R_RBGetLoginKey getLoginKey = await gateSession.Call(new R2G_RBGetLoginKey()
                {
                    userId = account.Id
                }) as G2R_RBGetLoginKey;

                response.Key     = getLoginKey.Key;
                response.Address = gateConfig.GetComponent <OuterConfig>().IPEndPoint2.ToString();
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
示例#5
0
        private void Search_UserInfoBtn_Click(object sender, RoutedEventArgs e)
        {
            string    selKeyChooseTxt = SelKeyChooseComb.Text;
            string    selKeyTxt       = SelKeyTxt.Text;
            DataTable dt = DB_Account.searchBasicUserInfo(selKeyChooseTxt, selKeyTxt);

            if (dt != null)
            {
                UserInfo_DgSource.ItemsSource = dt.DefaultView;
                UserInfo_Page.ShowPages(UserInfo_DgSource, dt, 20);
            }
        }
示例#6
0
        public IDBObject ConvertToDBObject()
        {
            DB_Account acc = new DB_Account();

            acc.ID          = this.ID.ToString();
            acc.IsActive    = this.IsActive;
            acc.IsOffBudget = this.IsOffBudget;
            acc.Name        = this.Name;
            acc.Note        = this.Note;
            acc.Type        = this.Type.ToString();
            return(acc);
        }
示例#7
0
        private void editInfo_ChangeTextEvent()
        {
            string    selKeyChooseTxt = SelKeyChooseComb.Text;
            string    selKeyTxt       = SelKeyTxt.Text;
            DataTable dt = DB_Account.searchBasicUserInfo(selKeyChooseTxt, selKeyTxt);

            if (dt != null)
            {
                UserInfo_DgSource.ItemsSource = dt.DefaultView;
                UserInfo_Page.ShowPages(UserInfo_DgSource, dt, 20);
            }
        }
示例#8
0
        private void ConfirmBtn_Click(object sender, RoutedEventArgs e)
        {
            string level = "";

            switch (Position.Text)
            {
            case "管理员":
                level = "1";
                break;

            case "高级操作员":
                level = "2";
                break;

            case "初级操作员":
                level = "3";
                break;

            case "投屏专用":
                level = "4";
                break;
            }
            if (txt_UserName.Text.Length == 0 || txt_Password.Text.Length == 0)
            {
                MessageBox.Show("用户名和密码不能为空!");
            }
            else
            {
                bool flag = DB_Account.updateUserInfo(txt_AccountNo.Text, txt_UserName.Text, txt_Password.Text, level, Login.userInfo.AccountID, Login.userInfo.UserName);
                if (flag)
                {
                    MessageBox.Show("更新成功!");
                    if (bkChange != null)
                    {
                        bkChange();
                    }
                    Close();
                    if (ChangeTextEvent != null)
                    {
                        ChangeTextEvent();
                    }
                }
                else
                {
                    MessageBox.Show("更新失败!");
                }
            }
        }
    public DB_Account LoginAccount(int connectionID, int recHostID, string usernameOrEmail, string hashedPassword, string token)
    {
        DB_Account  account = null;
        IMongoQuery query   = null;

        if (Utility.IsEmail(usernameOrEmail))
        {
            query = Query.And(
                Query <DB_Account> .EQ(u => u.Email, usernameOrEmail),
                Query <DB_Account> .EQ(u => u.ShaPassword, hashedPassword)
                );

            //TODO: veryify only one is found
            account = accountCollection.FindOne(query);
        }
        else if (Utility.IsUsername(usernameOrEmail))//TODO include discriminator
        {
            query = Query.And(
                Query <DB_Account> .EQ(u => u.Username, usernameOrEmail),
                Query <DB_Account> .EQ(u => u.ShaPassword, hashedPassword)
                );

            //TODO: veryify only one is found
            account = accountCollection.FindOne(query);
        }

        //check if valid login credentials
        if (account != null)
        {
            //successful login

            //update account entry
            account.ActiveConnectionID = connectionID;
            account.Token     = token;
            account.Status    = 1;
            account.LastLogin = DateTime.Now;

            accountCollection.Update(query, Update <DB_Account> .Replace(account));
        }
        else
        {
            Debug.Log("[Login Server]: Invalid login attempted.");
        }

        return(account);
    }
示例#10
0
    //initialize player data (this happens after login)
    private void InitPlayerDataRequest(int connectionID, int recHostID, Net_InitPlayerDataRequest msg)
    {
        //fetch player from DB by token
        DB_Player player = mdb.FetchPlayerByToken(msg.token);

        if (player == null)
        {
            Debug.Log(string.Format("[Sector Server]: invalid token from connection id {0} on host {1}.", connectionID, recHostID));
            //TODO: force update this connection's token (be careful how you do this)
            return;
        }

        //fetch model_workers by player and convert to message_this_workers
        List <Message_This_Worker> messageThisWorkers = new List <Message_This_Worker>();
        List <DB_Worker>           modelWorkers       = mdb.FetchWorkersByPlayer(player);

        foreach (DB_Worker worker in modelWorkers)
        {
            switch (worker.location.CollectionName)
            {
            case COLLECTIONS.SHIPS:
                messageThisWorkers.Add(new Message_This_Worker(mdb.FetchShipByID(worker.location.Id.AsObjectId).shipName, worker.workerName, worker.activity));
                break;

            default:
                Debug.Log(string.Format("[Sector Server]: Unexpected worker location collection fetch ({0}).", worker.location.CollectionName));
                return;
            }
        }

        //send messsage_player
        SendClient(connectionID, recHostID, new Net_OnInitPlayerDataRequest(player.CreatedOn.ToString(), messageThisWorkers, player.ActiveWorkerIndex));

        //update player's connection id
        player.ActiveConnectionID = connectionID;
        player.ActiveHostID       = recHostID;
        mdb.updatePlayer(player);

        //update account's connection id
        DB_Account account = mdb.FetchAccountByToken(msg.token);

        account.ActiveConnectionID = connectionID;
        account.ActiveHostID       = recHostID;
        mdb.updateAccount(account);
    }
示例#11
0
        public static Account LoadFromName(string name)
        {
            DB_Account dbAcc = new DB_Account();

            dbAcc.LoadFromName(name);

            if (dbAcc.ID == string.Empty)
            {
                // Doesn't exist
                return(null);
            }
            else
            {
                Account acc = new Account();
                acc.ConvertFromDBObject(dbAcc);
                DataHelper.AddItem(acc);
                DataHelper.ConnectData();
                return(acc);
            }
        }
示例#12
0
        public void ConvertFromDBObject(IDBObject obj)
        {
            if (!(obj is DB_Account))
            {
                return;
            }

            DB_Account acc = obj as DB_Account;

            this.ID          = Guid.Parse(acc.ID);
            this.IsActive    = acc.IsActive;
            this.IsOffBudget = acc.IsOffBudget;
            this.Name        = acc.Name;
            this.Note        = acc.Note;
            Enums.AccountType type = Enums.AccountType.None;
            Enum.TryParse <Enums.AccountType>(acc.Type, out type);
            this.Type = type;

            DataHelper.AddItem(this);
        }
示例#13
0
    private void LoginRequest(int connectionID, int recHostID, Net_LoginRequest lr)
    {
        string     loginToken = Utility.GenerateRandomToken(256);
        DB_Account account    = mdb.LoginAccount(connectionID, recHostID, lr.user, RSA.decrypt(lr.password, connectionKeys[connectionID]), loginToken);

        if (account != null)
        {
            //successful login

            //get appropriate sector ip
            string sectorIP = null;
            switch (account.Sector)
            {
            case SECTOR_CODE.REDSECTOR:
                sectorIP = "127.0.0.1";
                break;

            case SECTOR_CODE.NONE:
            default:
                break;
            }

            //update player connection id
            DB_Player player = mdb.FetchPlayerByUsernameAndDiscriminator(account.Username + "#" + account.Discriminator);
            player.Token = loginToken;
            mdb.updatePlayer(player);

            //respond to client
            SendClient(connectionID, recHostID, new Net_OnLoginRequest(1, account.Username, account.Discriminator, loginToken, sectorIP));
            //server log
            Debug.Log(string.Format("[Login Server]: {0}#{1} logged in.", account.Username, account.Discriminator));
        }
        else
        {
            //invalid login attempt
            //respond to client
            SendClient(connectionID, recHostID, new Net_OnLoginRequest(0, null, null, null, null));
            //respond to client
            Debug.Log(string.Format("[Login Server]: Invalid login attempt ({0}).", lr.user));
        }
    }
示例#14
0
    /*      FETCH ALL******************************
     * public List<Model> FetchAll(){
     *      List<Model> listName = new List<Model>();
     *      foreach(var m in collection.Find(query)){
     *          listName.Add(m); //LLAPI (8/9 @ 54:00)
     *      }
     *      return listName;
     * }
     */

    #endregion

    #region Update
    public void updateAccount(DB_Account accountUpdate)
    {
        IMongoQuery query = Query <DB_Account> .EQ(a => a._id, accountUpdate._id);

        accountCollection.Update(query, Update <DB_Account> .Replace(accountUpdate));
    }
示例#15
0
        public static List <IDBObject> Convert <T>(DataSet ds)
        {
            List <IDBObject> objects = new List <IDBObject>();

            if (typeof(T).FullName == typeof(DB_Account).FullName)
            {
                foreach (DataRow row in ds.Tables["Account"].Rows)
                {
                    DB_Account acc = new DB_Account();
                    acc.ID          = row["ID"].ToString();
                    acc.IsActive    = bool.Parse(row["IsActive"].ToString());
                    acc.IsOffBudget = bool.Parse(row["IsOffBudget"].ToString());
                    acc.Name        = row["Name"].ToString();
                    acc.Note        = row["Note"].ToString();
                    acc.Type        = row["Type"].ToString();

                    objects.Add(acc);
                }
            }
            else if (typeof(T).FullName == typeof(DB_Entry).FullName)
            {
                foreach (DataRow row in ds.Tables["Entry"].Rows)
                {
                    DB_Entry ent = new DB_Entry();
                    ent.Account  = row["Account"].ToString();
                    ent.Category = row["Category"].ToString();
                    ent.Date     = row["Date"].ToString();
                    ent.ID       = row["ID"].ToString();
                    ent.Inflow   = decimal.Parse(row["Inflow"].ToString());
                    ent.Outflow  = decimal.Parse(row["Outflow"].ToString());
                    ent.Payee    = row["Payee"].ToString();

                    objects.Add(ent);
                }
            }
            else if (typeof(T).FullName == typeof(DB_Category).FullName)
            {
                foreach (DataRow row in ds.Tables["Category"].Rows)
                {
                    DB_Category cat = new DB_Category();
                    cat.ID = row["ID"].ToString();
                    cat.IsMasterCategory = bool.Parse(row["IsMasterCategory"].ToString());
                    cat.Name             = row["Name"].ToString();
                    cat.ParentCategory   = row["ParentCategory"].ToString();

                    objects.Add(cat);
                }
            }
            else if (typeof(T).FullName == typeof(DB_Payee).FullName)
            {
                foreach (DataRow row in ds.Tables["Payee"].Rows)
                {
                    DB_Payee pay = new DB_Payee();
                    pay.ID       = row["ID"].ToString();
                    pay.IsActive = bool.Parse(row["IsActive"].ToString());
                    pay.Name     = row["Name"].ToString();

                    objects.Add(pay);
                }
            }

            return(objects);
        }
示例#16
0
    public bool CreateAccount(string username, string hashedPassword, string email)
    {
        //*********************************Account creation*********************************
        DB_Account account = new DB_Account();

        //validate email
        //TODO: send verification e-mail
        if (!Utility.IsEmail(email))
        {
            Debug.Log(string.Format("[Login Server]: Bad e-mail: ({0})", email));
            return(false);
        }
        if (FetchAccountByEmail(email) != null)
        {
            Debug.Log(string.Format("[Login Server]: E-mail taken: ({0})", email));
            return(false);
        }
        account.Email = email;

        //validate username
        if (!Utility.IsUsername(username))
        {
            Debug.Log(string.Format("[Login Server]: Bad username: ({0})", username));
            return(false);
        }
        account.Username = username;

        //TODO check password validity (don't delete me future Darren...)
        account.ShaPassword = hashedPassword;

        //get discriminator
        int discriminatorInt = 0;

        while (FetchAccountByUsernameAndDiscriminator(username + "#" + discriminatorInt.ToString().PadLeft(4, '0')) != null)
        {
            discriminatorInt++;
        }
        account.Discriminator = discriminatorInt.ToString().PadLeft(4, '0');

        //default to offline status
        account.Status = LoginStatus.Offline;

        //TODO: dynamically assign default sector
        account.Sector = SECTOR_CODE.REDSECTOR;

        account.CreatedOn = DateTime.Now;
        account.LastLogin = account.CreatedOn;
        //*********************************************************************************

        //*********************************Player creation*********************************
        DB_Player player = new DB_Player();

        player.Username      = account.Username;
        player.Discriminator = account.Discriminator;
        player.CreatedOn     = account.CreatedOn;
        player.LastLogin     = account.CreatedOn;

        //TODO: change up this worker generation so that we just call a createWorker(DB_Worker worker) method
        //assign default worker for new player
        //TODO: allow this worker to be customized (appearance/name)
        player.Workers = new List <MongoDBRef>();
        player.Workers.Add(SpawnDefaultWorker("DEFAULT WORKER NAME" + UnityEngine.Random.Range(0, 10000)));
        player.ActiveWorkerIndex = 0;
        //*********************************************************************************

        //now that all data is validated and set:
        //insert account
        accountCollection.Insert(account);
        //insert player
        playerCollection.Insert(player);

        //set default worker's owner ref
        //get player from db (for db ref)
        player = FetchPlayerByUsernameAndDiscriminator(account.Username + "#" + account.Discriminator);
        //get and update worker
        DB_Worker worker = FetchWorkerByID(player.Workers[player.ActiveWorkerIndex].Id.AsObjectId);

        worker.owner = new MongoDBRef(COLLECTIONS.PLAYERS, player._id);
        updateWorker(worker);

        //TODO: remove this TESTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
        //set default ship's owner ref
        //get and update ship
        DB_Ship ship = FetchShipByID(worker.location.Id.AsObjectId);

        ship.Owner = new MongoDBRef(COLLECTIONS.PLAYERS, player._id);
        updateShip(ship);

        return(true);
    }
示例#17
0
        public void ConvertFromDBObject(IDBObject obj)
        {
            if (!(obj is DB_Entry))
            {
                return;
            }

            DB_Entry ent = obj as DB_Entry;

            this.Date    = DateTime.Parse(ent.Date);
            this.ID      = Guid.Parse(ent.ID);
            this.Inflow  = ent.Inflow;
            this.Outflow = ent.Outflow;

            DataHelper.AddItem(this);

            if (!string.IsNullOrEmpty(ent.Account))
            {
                DB_Account dbAcc = new DB_Account();
                dbAcc.Load(ent.Account);
                ISaveable saveable = DataHelper.LoadedObjects.FirstOrDefault(lo => lo.ID.ToString() == dbAcc.ID);
                if (saveable != null)
                {
                    Account acc = DataHelper.LoadedObjects.Where(lo => lo is Account).Cast <Account>().FirstOrDefault(lo => lo.ID.ToString() == dbAcc.ID);
                    this.Account = acc;
                }
                else
                {
                    Account acc = new Account();
                    acc.ConvertFromDBObject(dbAcc);
                    this.Account = acc;
                }
            }

            if (!string.IsNullOrEmpty(ent.Category))
            {
                DB_Category dbCat = new DB_Category();
                dbCat.Load(ent.Category);
                ISaveable saveable = DataHelper.LoadedObjects.FirstOrDefault(lo => lo.ID.ToString() == dbCat.ID);
                if (saveable != null)
                {
                    Category cat = DataHelper.LoadedObjects.Where(lo => lo is Category).Cast <Category>().FirstOrDefault(lo => lo.ID.ToString() == dbCat.ID);
                    this.Category = cat;
                }
                else
                {
                    Category cat = new Category();
                    cat.ConvertFromDBObject(dbCat);
                    this.Category = cat;
                }
            }

            if (!string.IsNullOrEmpty(ent.Payee))
            {
                DB_Payee dbPay = new DB_Payee();
                dbPay.Load(ent.Payee);
                ISaveable saveable = DataHelper.LoadedObjects.FirstOrDefault(lo => lo.ID.ToString() == dbPay.ID);
                if (saveable != null)
                {
                    Payee pay = DataHelper.LoadedObjects.Where(lo => lo is Payee).Cast <Payee>().FirstOrDefault(lo => lo.ID.ToString() == dbPay.ID);
                    this.Payee = pay;
                }
                else
                {
                    Payee pay = new Payee();
                    pay.ConvertFromDBObject(dbPay);
                    this.Payee = pay;
                }
            }
        }