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("密码错误!"); } } } }
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("未选中数据!"); } }
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); } }
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); } }
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); } }
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); }
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); } }
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); }
//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); }
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); } }
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); }
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)); } }
/* 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)); }
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); }
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); }
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; } } }