From f07ac19f0a24b29064afabbf577bf71dcba57bd3 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sun, 7 Apr 2024 15:47:28 +0800 Subject: [PATCH] 1 --- server/imserver_new/cache/cachemgr.go | 48 ++++++++++++++++++++--- server/imserver_new/cache/user_profile.go | 10 +++++ 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/server/imserver_new/cache/cachemgr.go b/server/imserver_new/cache/cachemgr.go index 504d4571..2511435f 100644 --- a/server/imserver_new/cache/cachemgr.go +++ b/server/imserver_new/cache/cachemgr.go @@ -68,12 +68,7 @@ func (this *cacheMgr) AsyncSearch(sinceId int64, q string, if u == nil { u = newUserProfile() } - u.accountId = pg.Rows.GetByName("account_id") - u.name = pg.Rows.GetByName("name") - u.avatarUrl = pg.Rows.GetByName("avatar") - u.head = pg.Rows.GetByName("head") - u.lastLoginTime = q5.ToInt32(pg.Rows.GetByName("last_login_time")) - u.lastSyncTime = f5.GetApp().GetNowMillis() + u.loadFromDb(pg.Rows) this.userHash[u.accountId] = u *q5.NewSliceElement(&users) = u.accountId @@ -96,6 +91,47 @@ func (this *cacheMgr) internalGetUsers(accountIds []string, cb func(int32, strin f5.NewLockAsyncTask( keys, func (task *f5.LockAsyncTask) { + i := 0 + f5.NewAsyncTask( + func (subTask* f5.AsyncTask) { + f5.GetJsStyleDb().OrmSelect( + constant.GAME_DB, + "t_user", + [][]string{ + {"account_id", keys[i][1]}, + }, + func (err error, ds *f5.DataSet) { + if err != nil { + subTask.SetFail() + return + } + accountId := ds.GetByName("account_id") + u := this.getUser(accountId) + if u == nil { + u = newUserProfile() + } + u.loadFromDb(ds) + this.userHash[u.accountId] = u + if i + 1 < len(keys) { + i++ + subTask.Continue() + } else { + subTask.SetSucc() + } + }) + }).OnSucc( + func (subTask* f5.AsyncTask) { + task.SetSucc() + }).OnFail( + func (subTask* f5.AsyncTask) { + task.SetFail() + }) + }).OnSucc( + func (task* f5.LockAsyncTask) { + cb(0, "") + }).OnFail( + func (task* f5.LockAsyncTask) { + cb(1, "") }) } diff --git a/server/imserver_new/cache/user_profile.go b/server/imserver_new/cache/user_profile.go index 9250c5fd..a668ca23 100644 --- a/server/imserver_new/cache/user_profile.go +++ b/server/imserver_new/cache/user_profile.go @@ -2,6 +2,7 @@ package cache import ( "q5" + "f5" "cs" "github.com/golang/protobuf/proto" ) @@ -69,6 +70,15 @@ func (this *userProfile) FillMFUser(pbUser *cs.MFUser) { pbUser.LastLoginTime = proto.Int32(this.lastLoginTime) } +func (this *userProfile) loadFromDb(ds *f5.DataSet) { + this.accountId = ds.GetByName("account_id") + this.name = ds.GetByName("name") + this.avatarUrl = ds.GetByName("avatar") + this.head = ds.GetByName("head") + this.lastLoginTime = q5.ToInt32(ds.GetByName("last_login_time")) + this.lastSyncTime = f5.GetApp().GetNowMillis() +} + func newUserProfile() *userProfile { p := new(userProfile) return p