This commit is contained in:
殷勇 2023-09-26 16:25:21 +08:00
parent 2f23b0be33
commit 01911660fd
5 changed files with 111 additions and 61 deletions

View File

@ -85,6 +85,14 @@ func (this *App) registerDataSources() {
mt.Table.GameDb.GetById(0).GetPasswd(), mt.Table.GameDb.GetById(0).GetPasswd(),
mt.Table.GameDb.GetById(0).GetDatabase(), mt.Table.GameDb.GetById(0).GetDatabase(),
30) 30)
f5.GetGoStyleDb().RegisterDataSource(
GAME_DB,
mt.Table.GameDb.GetById(0).GetHost(),
mt.Table.GameDb.GetById(0).GetPort(),
mt.Table.GameDb.GetById(0).GetUser(),
mt.Table.GameDb.GetById(0).GetPasswd(),
mt.Table.GameDb.GetById(0).GetDatabase(),
30)
f5.GetJsStyleDb().RegisterDataSource( f5.GetJsStyleDb().RegisterDataSource(
FRIEND_DB, FRIEND_DB,
mt.Table.FriendDb.GetById(0).GetHost(), mt.Table.FriendDb.GetById(0).GetHost(),
@ -93,4 +101,12 @@ func (this *App) registerDataSources() {
mt.Table.FriendDb.GetById(0).GetPasswd(), mt.Table.FriendDb.GetById(0).GetPasswd(),
mt.Table.FriendDb.GetById(0).GetDatabase(), mt.Table.FriendDb.GetById(0).GetDatabase(),
30) 30)
f5.GetGoStyleDb().RegisterDataSource(
FRIEND_DB,
mt.Table.FriendDb.GetById(0).GetHost(),
mt.Table.FriendDb.GetById(0).GetPort(),
mt.Table.FriendDb.GetById(0).GetUser(),
mt.Table.FriendDb.GetById(0).GetPasswd(),
mt.Table.FriendDb.GetById(0).GetDatabase(),
30)
} }

View File

@ -3,54 +3,110 @@ package main
import ( import (
"f5" "f5"
"fmt" "fmt"
"mt"
"q5" "q5"
) )
var tableName = make(map[string]string)
func (cm *CacheMgr) LoadFromDB() { func (cm *CacheMgr) LoadFromDB() {
tableName["user"] = fmt.Sprintf("%s.t_user", mt.Table.GameDb.GetById(0).GetDatabase()) uniAccountIds := Set{}
tableName["friendships"] = fmt.Sprintf("%s.t_friend_ships", mt.Table.FriendDb.GetById(0).GetDatabase()) uniAccountIds = make(Set)
tableName["guild_member"] = fmt.Sprintf("%s.t_guild_members", mt.Table.FriendDb.GetById(0).GetDatabase())
// 加载所有好友信息 // Load friendships
cm.loadAllFriendUserProfile() {
// 加载所有工会成员信息 lastIdx := int64(0)
cm.loadAllGuildUserProfile() done := false
for !done {
f5.GetGoStyleDb().SyncSelectCustomQuery(
FRIEND_DB,
fmt.Sprintf("SELECT idx, account1_id, account2_id FROM t_friend_ships WHERE idx > %d limit 1000", lastIdx),
func(err error, rows *f5.DataSet) {
if err != nil {
f5.GetSysLog().Info("LoadFromDB FRIENDSHIP err:%v \n", err)
panic(err)
}
empty := true
for rows.Next() {
empty = false
account1Id := q5.ToString(*rows.GetByName("account1_id"))
account2Id := q5.ToString(*rows.GetByName("account2_id"))
if !uniAccountIds.Has(account1Id) {
cm.loadUserProfile(account1Id)
}
uniAccountIds.Add(account1Id)
if !uniAccountIds.Has(account2Id) {
cm.loadUserProfile(account2Id)
}
uniAccountIds.Add(account2Id)
lastIdx = q5.ToInt64(*rows.GetByName("idx"))
}
if empty {
done = true
}
},
)
}
}
// Load guild members
{
lastIdx := int64(0)
done := false
for !done {
f5.GetGoStyleDb().SyncSelectCustomQuery(
FRIEND_DB,
fmt.Sprintf("SELECT idx, account_id FROM t_guild_members WHERE idx > %d", lastIdx),
func(err error, rows *f5.DataSet) {
if err != nil {
f5.GetSysLog().Info("LoadFromDB GUILD err:%v \n", err)
panic(err)
}
empty := true
for rows.Next() {
empty = false
accountId := q5.ToString(*rows.GetByName("account_id"))
if !uniAccountIds.Has(accountId) {
cm.loadUserProfile(accountId)
}
uniAccountIds.Add(accountId)
lastIdx = q5.ToInt64(*rows.GetByName("idx"))
}
if empty {
done = true
}
},
)
}
}
uniAccountIds = nil
} }
// TODO 重加载数据1000 迭代 func (cm *CacheMgr) loadUserProfile(accountId string) {
func (cm *CacheMgr) loadAllFriendUserProfile() { //select a.account_id, a.name, a.head_id, a.head_frame, a.star_num, a.`rank`, a.last_login_time
sql := fmt.Sprintf("SELECT account_id, name, head_id, head_frame, star_num, rank, last_login_time FROM ( SELECT account1_id AS account_id, name, head_id, head_frame, star_num, rank, last_login_time FROM %s AS fs JOIN %s AS u ON fs.account1_id = u.account_id UNION SELECT account2_id AS account_id, name, head_id, head_frame, star_num, rank, last_login_time FROM %s AS fs JOIN %s AS u ON fs.account2_id = u.account_id) AS friend_info_table;", tableName["friendships"], tableName["user"], tableName["friendships"], tableName["user"]) sql := fmt.Sprintf("select * from t_user where account_id='%s'", accountId)
cm.loadUsersProfile(sql) f5.GetGoStyleDb().SyncSelectCustomQuery(
} GAME_DB,
// loadGuildFromDB 加载公会成员信息
func (cm *CacheMgr) loadAllGuildUserProfile() {
sql := fmt.Sprintf("select a.account_id, a.name, a.head_id, a.head_frame, a.star_num, a.`rank`, a.last_login_time from %s a,%s b where a.account_id = b.account_id", tableName["user"], tableName["guild_member"])
cm.loadUsersProfile(sql)
}
func (cm *CacheMgr) loadUsersProfile(sql string) {
f5.GetJsStyleDb().SelectCustomQuery(
FRIEND_DB,
sql, sql,
func(err error, rows *f5.DataSet) { func(err error, rows *f5.DataSet) {
if err != nil { if err != nil {
f5.GetSysLog().Info("loadUsersProfile err:%v \n", err) f5.GetSysLog().Info("loadUsersProfile err:%v \n", err)
return panic(err)
} }
for rows.Next() { for rows.Next() {
accountId := q5.ToString(*rows.GetByIndex(0)) aId := q5.ToString(*rows.GetByName("account_id"))
onlineStatus := playerMgr.GetOnlineStatus(accountId) onlineStatus := playerMgr.GetOnlineStatus(accountId)
profile := &PlayerProfile{ profile := &PlayerProfile{
AccountId: accountId, AccountId: aId,
Username: q5.ToString(*rows.GetByIndex(1)), Username: q5.ToString(*rows.GetByName("name")),
Avatar: q5.ToInt32(*rows.GetByIndex(2)), Avatar: q5.ToInt32(*rows.GetByName("head_id")),
AvatarHead: q5.ToInt32(*rows.GetByIndex(3)), AvatarHead: q5.ToInt32(*rows.GetByName("head_frame")),
Star: q5.ToInt32(*rows.GetByIndex(4)), Star: q5.ToInt32(*rows.GetByName("star_num")),
Rank: q5.ToInt32(*rows.GetByIndex(5)), Rank: q5.ToInt32(*rows.GetByName("rank")),
LastLoginTime: q5.ToInt32(*rows.GetByIndex(6)), LastLoginTime: q5.ToInt32(*rows.GetByName("last_login_time")),
OnlineStatus: onlineStatus, OnlineStatus: onlineStatus,
} }
cm.AddCacheProfile(1, profile) cm.AddCacheProfile(1, profile)
@ -89,7 +145,7 @@ func (cm *CacheMgr) GetProfileByAccountId(accountId string, cb func(err error, p
} }
cb(nil, profile) cb(nil, profile)
} }
cb(nil, nil) cb(fmt.Errorf("no rows"), nil)
}, },
) )
} }

View File

@ -140,7 +140,7 @@ func (fm *FriendsMgr) loadFriendships() {
where, where,
func(err error, rows *f5.DataSet) { func(err error, rows *f5.DataSet) {
if err != nil { if err != nil {
return panic(err)
} }
userMap := make(map[string]*User) userMap := make(map[string]*User)
for rows.Next() { for rows.Next() {

View File

@ -37,7 +37,7 @@ func (gm *GuildMgr) loadGuildFromDB() {
func (gm *GuildMgr) loadGuildFromDBResult(err error, rows *f5.DataSet) { func (gm *GuildMgr) loadGuildFromDBResult(err error, rows *f5.DataSet) {
if err != nil { if err != nil {
f5.GetSysLog().Info("loadGuildFromDBResult err:%v \n", err) f5.GetSysLog().Info("loadGuildFromDBResult err:%v \n", err)
return panic(err)
} }
for rows.Next() { for rows.Next() {
guildId := q5.ToInt64(*rows.GetByIndex(1)) guildId := q5.ToInt64(*rows.GetByIndex(1))
@ -80,7 +80,7 @@ func (gm *GuildMgr) loadGuildMemberFromDB() {
func (gm *GuildMgr) loadGuildMemberFromDBResult(err error, rows *f5.DataSet) { func (gm *GuildMgr) loadGuildMemberFromDBResult(err error, rows *f5.DataSet) {
if err != nil { if err != nil {
f5.GetSysLog().Info("loadGuildMemberFromDBResult err:%v \n", err) f5.GetSysLog().Info("loadGuildMemberFromDBResult err:%v \n", err)
return panic(err)
} }
for rows.Next() { for rows.Next() {
var ( var (
@ -121,7 +121,7 @@ func (gm *GuildMgr) loadPendingReqsFromDB() {
func (gm *GuildMgr) loadPendingReqsFromDBResult(err error, rows *f5.DataSet) { func (gm *GuildMgr) loadPendingReqsFromDBResult(err error, rows *f5.DataSet) {
if err != nil { if err != nil {
f5.GetSysLog().Info("loadPendingReqsFromDBResult err:%v \n", err) f5.GetSysLog().Info("loadPendingReqsFromDBResult err:%v \n", err)
return panic(err)
} }
for rows.Next() { for rows.Next() {
var ( var (

View File

@ -17,28 +17,6 @@ func TestInit(t *testing.T) {
fmt.Printf("test init") fmt.Printf("test init")
} }
func TestCreateGuild(t *testing.T) {
guildMgr.CreateGuild(
randomGuildName(),
leaderId,
func(errCode int32, errMsg string, guildId int64) {
newGuildId = guildId
fmt.Println("Created guild:", guildId)
})
}
func TestGuildMember(t *testing.T) {
guildMgr.ApplyToGuild(
newGuildId, member1Id,
func(errCode int32, errMsg string) {
if errCode != 0 {
t.Errorf("Error:%s", errMsg)
}
fmt.Println("Applied to guild")
},
)
}
func randomGuildName() string { func randomGuildName() string {
return q5.RandomString(6) return q5.RandomString(6)
} }