game2006go/server/imserver/friendsdbmgr.go
2023-09-12 17:32:05 +08:00

273 lines
6.7 KiB
Go

package main
import (
"f5"
"fmt"
"q5"
)
func (fm *FriendsMgr) upsertFriendRequest(account1Id string, account2Id string, isFriendship string, cb func(error)) {
where := [][]string{
{"sender_account_id", account1Id},
{"receiver_account_id", account2Id},
}
insertKv := [][]string{
{"sender_account_id", account1Id},
{"receiver_account_id", account2Id},
{"is_friendship", isFriendship},
}
updateKv := [][]string{
{"is_friendship", isFriendship},
}
f5.GetJsStyleDb().Upsert(
FRIEND_DB,
"t_friend_pending_request",
where,
updateKv,
insertKv,
func(err error, lastInsertId int64, rowsAffected int64) {
cb(err)
},
)
}
func (fm *FriendsMgr) upsertFriendShip(account1Id string, account2Id string, isDeleteFriendship int, cb func(error)) {
where := [][]string{
{"account1_id", account1Id},
{"account2_id", account2Id},
}
insertKv := [][]string{
{"account1_id", account1Id},
{"account2_id", account2Id},
{"is_delete_friendship", q5.ToString(isDeleteFriendship)},
}
updateKv := [][]string{
{"is_delete_friendship", q5.ToString(isDeleteFriendship)},
}
f5.GetJsStyleDb().Upsert(
FRIEND_DB,
"t_friend_ships",
where,
updateKv,
insertKv,
func(err error, lastInsertId int64, rowsAffected int64) {
cb(err)
},
)
}
func (fm *FriendsMgr) updateFriendShip(account1Id string, account2Id string, fields [][]string, cb func(error)) {
where := [][]string{
{"account1_id", account1Id},
{"account2_id", account2Id},
}
f5.GetJsStyleDb().Update(
FRIEND_DB,
"t_friend_ships",
fields,
where,
func(err error, lastInsertId int64, rowsAffected int64) {
cb(err)
},
)
}
func (fm *FriendsMgr) upsertBlacklist(account1Id string, account2Id string, isRemoved int, cb func(error)) {
where := [][]string{
{"account_id", account1Id},
}
insertKv := [][]string{
{"account_id", account1Id},
{"blocked_account_id", account2Id},
{"is_removed", q5.ToString(isRemoved)},
}
updateKv := [][]string{
{"is_removed", q5.ToString(isRemoved)},
}
f5.GetJsStyleDb().Upsert(
FRIEND_DB,
"t_friend_blacklist",
where,
updateKv,
insertKv,
func(err error, lastInsertId int64, rowsAffected int64) {
cb(err)
//if err != nil {
// fmt.Printf("error:%v\n", err)
//}
//fmt.Printf("lastInsertId:%d\n", lastInsertId)
//fmt.Printf("rowsAffected:%d\n", rowsAffected)
},
)
}
func (fm *FriendsMgr) findPlayer(accountId string, cb func(err error, profile *PlayerProfile)) {
fields := []string{"account_id", "name", "head_id", "head_frame", "rank", "last_login_time"}
where := [][]string{
{"account_id", accountId},
}
f5.GetJsStyleDb().SelectOne(
GAME_DB,
"t_user",
fields,
where,
func(err error, rows *f5.DataSet) {
if err != nil {
cb(err, nil)
return
}
profile := &PlayerProfile{}
if rows.Next() {
profile = &PlayerProfile{
AccountId: q5.ToString(*rows.GetByIndex(0)),
Username: q5.ToString(*rows.GetByIndex(1)),
Avatar: q5.ToInt32(*rows.GetByIndex(2)),
AvatarHead: q5.ToInt32(*rows.GetByIndex(3)),
Rank: q5.ToInt32(*rows.GetByIndex(4)),
}
}
cb(nil, profile)
},
)
}
func (fm *FriendsMgr) findUsersByUsername(username string, cb func(err error, profiles []*PlayerProfile)) {
fields := []string{"account_id", "name", "head_id", "head_frame", "rank", "last_login_time"}
var where [][]string
usernameLike := fmt.Sprintf("%%%s%%", username)
likeWhere := [][]string{
{"name", usernameLike},
}
f5.GetJsStyleDb().SelectLike(
GAME_DB,
"t_user",
fields,
where,
likeWhere,
MaxSearchResults,
func(err error, rows *f5.DataSet) {
if err != nil {
cb(err, nil)
return
}
profiles := make([]*PlayerProfile, 0, 20)
for rows.Next() {
profile := &PlayerProfile{
AccountId: q5.ToString(*rows.GetByIndex(0)),
Username: q5.ToString(*rows.GetByIndex(1)),
Avatar: q5.ToInt32(*rows.GetByIndex(2)),
AvatarHead: q5.ToInt32(*rows.GetByIndex(3)),
Rank: q5.ToInt32(*rows.GetByIndex(4)),
}
profiles = append(profiles, profile)
}
cb(nil, profiles)
},
)
}
// loadFriendships 加载好友关系表
func (fm *FriendsMgr) loadFriendships(user *User, where [][]string) {
fields := []string{"account1_id", "account2_id"}
f5.GetJsStyleDb().Select(
FRIEND_DB,
"t_friend_ships",
fields,
where,
func(err error, rows *f5.DataSet) {
if err != nil {
return
}
for rows.Next() {
account1Id := q5.ToString(*rows.GetByIndex(0))
account2Id := q5.ToString(*rows.GetByIndex(1))
if user.AccountId == account1Id {
user2 := NewUser(account2Id)
friendMgr.AddUser(account2Id, user2)
friendship1 := &Friendship{}
friendship1.User1 = user
friendship1.User2 = user2
fm.AddFriendshipToMap(user.AccountId, friendship1)
cacheMgr.LoadPlayerProfile(account2Id, func(playerProfile *PlayerProfile) {})
} else {
user2 := NewUser(account1Id)
friendMgr.AddUser(account1Id, user2)
friendship := &Friendship{}
friendship.User1 = user
friendship.User2 = user2
fm.AddFriendshipToMap(user.AccountId, friendship)
cacheMgr.LoadPlayerProfile(account1Id, func(playerProfile *PlayerProfile) {})
}
}
},
)
}
// loadPendingRequests 加载等待验证好友请求
func (fm *FriendsMgr) loadPendingRequests(user *User) {
fields := []string{"sender_account_id", "receiver_account_id", "createtime"}
// 还未成功好友关系的 请求列表
where := [][]string{
{"receiver_account_id", user.AccountId},
{"is_friendship", "0"},
}
f5.GetJsStyleDb().Select(
FRIEND_DB,
"t_friend_pending_request",
fields,
where,
func(err error, rows *f5.DataSet) {
if err != nil {
return
}
for rows.Next() {
senderAccountId := q5.ToString(*rows.GetByIndex(0))
//receiverAccountId := q5.ToString(*rows.GetByIndex(1))
requestTime := q5.ToInt32(*rows.GetByIndex(2))
// load profile
cacheMgr.LoadPlayerProfile(senderAccountId, func(playerProfile *PlayerProfile) {})
friendRequest := &FriendRequest{
AccountId: senderAccountId,
IsFriendship: 0,
RequestTime: requestTime,
}
user.FriendRequest[senderAccountId] = friendRequest
}
},
)
}
// loadPendingRequests 加载等待验证好友请求
func (fm *FriendsMgr) loadBlacklist(user *User) {
fields := []string{"account_id", "blocked_account_id"}
where := [][]string{
{"account_id", user.AccountId},
{"is_removed", "0"},
}
f5.GetJsStyleDb().Select(
FRIEND_DB,
"t_friend_blacklist",
fields,
where,
func(err error, rows *f5.DataSet) {
if err != nil {
return
}
for rows.Next() {
account2Id := q5.ToString(*rows.GetByIndex(1))
friendBlackList := &FriendBlackList{
AccountId: account2Id,
IsRemoved: 0,
}
user.FriendBlackList[account2Id] = friendBlackList
}
},
)
}