diff --git a/game-server/app.ts b/game-server/app.ts index 7a471fd7c..e621efc3c 100644 --- a/game-server/app.ts +++ b/game-server/app.ts @@ -68,6 +68,7 @@ app.configure(function() { redlockCacheService.init(); // TODO 重启 1 次只需要初始化 1 次,判断方法可以优化 if (app.serverId === 'master-server-1') { + redisService.readDataBase(); redisService.initAllRank(); redisService.clearComBtlQueue(); updateTeamStatus(COM_TEAM_STATUS.DEFAULT, COM_TEAM_STATUS.LOOSE); diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index 91f3d870f..9359f7bad 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -7,7 +7,7 @@ import { FriendApplyModel } from "../../../db/FriendApply"; import { FriendApplyParams, FriendListParam, FriendRecommendParams, BlackListParam, FriendValueListParam } from "../../../domain/roleField/friend"; import { FriendShipModel, FriendShipType } from "../../../db/FriendShip"; import { FriendRelationModel, Relation } from "../../../db/FriendRelation"; -import { isRoleOnline } from "../../../services/redisService"; +import { isRoleOnline, getServerName } from "../../../services/redisService"; import { increaseFrdCnt, getRecommendType, sortByBeSentHeart } from "../../../services/friendService"; import { FriendPointModel } from "../../../db/FriendPoint"; import { gameData } from "../../../pubUtils/data"; @@ -46,6 +46,11 @@ export class FriendHandler { if(type == FRIEND_RELATION_TYPE.NORMAL) { let param = new FriendRecommendParams(role); param.setType(type); + + let { serverId, userInfo: { serverType }} = role; + let serverName = await getServerName(serverType, serverId); + param.setServerName(serverId, serverName); + paramAllList.push(param); } } @@ -70,6 +75,11 @@ export class FriendHandler { let type = getRecommendType(myFriendRelation, roleId, role.roleId); let param = new FriendRecommendParams(role); param.setType(type); + + let { serverId, userInfo: { serverType }} = role; + let serverName = await getServerName(serverType, serverId); + param.setServerName(serverId, serverName); + list.push(param); } @@ -122,6 +132,11 @@ export class FriendHandler { for(let apply of list) { let friend = apply.friend; let param = new FriendApplyParams(apply.applyCode, friend); + + let { serverId, userInfo: { serverType }} = friend; + let serverName = await getServerName(serverType, serverId); + param.setServerName(serverId, serverName); + result.push(param); } return resResult(STATUS.SUCCESS, { @@ -173,6 +188,10 @@ export class FriendHandler { let isOnline = await isRoleOnline(friend.roleId); param.setOnline(isOnline); + let { serverId, userInfo: { serverType }} = friend; + let serverName = await getServerName(serverType, serverId); + param.setServerName(serverId, serverName); + list.push(param); resultApplyCodeList.push(apply.applyCode); } @@ -200,18 +219,22 @@ export class FriendHandler { let myRelation = await FriendRelationModel.findFriendByRole(roleId, POPULATE_TYPE.FRIEND); let friendList = myRelation?myRelation.friends: []; for(let friend of friendList) { - let role = friend.role; + let friendRole = friend.role; let friendShip = friend.friendShip; - if(!role || !friendShip) continue; + if(!friendRole || !friendShip) continue; let fs = friend.friendShip; let ref = shouldRefresh(fs.refTime, new Date(), 0); if(ref) { - friendShip = await FriendShipModel.refreshSendAndReceive(roleId, role.roleId); + friendShip = await FriendShipModel.refreshSendAndReceive(roleId, friendRole.roleId); } - let param = new FriendListParam(role, roleId, friendShip); - let isOnline = await isRoleOnline(role.roleId); + let param = new FriendListParam(friendRole, roleId, friendShip); + let { serverId, userInfo: { serverType }} = friendRole; + let serverName = await getServerName(serverType, serverId); + param.setServerName(serverId, serverName); + + let isOnline = await isRoleOnline(friendRole.roleId); param.setOnline(isOnline); list.push(param); @@ -238,11 +261,15 @@ export class FriendHandler { let myRelation = await FriendRelationModel.findFriendByRole(roleId, POPULATE_TYPE.BLACKLIST); let blacklist = myRelation?myRelation.blacklist: []; for(let bl of blacklist) { - let role = bl.role; - if(!role) continue; - let param = new BlackListParam(role); - let isOnline = await isRoleOnline(role.roleId); + let friendRole = bl.role; + if(!friendRole) continue; + let param = new BlackListParam(friendRole); + let isOnline = await isRoleOnline(friendRole.roleId); param.setOnline(isOnline); + + let { serverId, userInfo: { serverType }} = friendRole; + let serverName = await getServerName(serverType, serverId); + param.setServerName(serverId, serverName); list.push(param); @@ -264,8 +291,8 @@ export class FriendHandler { let role = await RoleModel.findByRoleId(roleId); - let str = '', list = new Array(); - if(type == BLOCK_OPEATE.ADD) { + let str = '', list = new Array(), frdRoleIds = new Array(), blackRoleIds = new Array(); + if(type == BLOCK_OPEATE.ADD) { // 拉黑 let myRelation = await FriendRelationModel.findFriendByRole(roleId, POPULATE_TYPE.FRIEND); let friends = myRelation?myRelation.friends: []; let blacklist = myRelation?myRelation.blacklist: []; @@ -294,11 +321,42 @@ export class FriendHandler { await FriendRelationModel.moveFromFriend(roleId, friend, friendShip, true); // 删除好友关系并拉黑 let param = new BlackListParam(friend); - let isOnline = await isRoleOnline(role.roleId); + let isOnline = await isRoleOnline(friend.roleId); param.setOnline(isOnline); - list.push(param); - } else if(type == BLOCK_OPEATE.REMOVE || type == BLOCK_OPEATE.REMOVE_AND_APPLY){ + let { serverId, userInfo: { serverType }} = friend; + let serverName = await getServerName(serverType, serverId); + param.setServerName(serverId, serverName); + + list.push(param); + frdRoleIds.push(roleId); + } else if (type == BLOCK_OPEATE.REMOVE_FRIEND) { // 仅移除 + + let myRelation = await FriendRelationModel.findFriendByRole(roleId, POPULATE_TYPE.FRIEND); + let friends = myRelation?myRelation.friends: []; + let curFriend = friends.find(cur => cur.roleId == hisRoleId); + if(!curFriend) { + return resResult(STATUS.FRIEND_NOT_FOUND); + } + + role = await RoleModel.increaseFriendCnt(roleId, -1); // 减少好友 + if(!role) { + return resResult(STATUS.FRIEND_NOT_FOUND) + } + await RoleModel.increaseFriendCnt(hisRoleId, -1); // 对方好友减少 + + let friend: RoleType, friendShip: FriendShipType; + + await FriendShipModel.clearValue([roleId, hisRoleId]); + friend = curFriend.role; + friendShip = curFriend.friendShip; + + await FriendRelationModel.moveFromFriend(hisRoleId, role, friendShip, false); //从对方好友删除 + await FriendRelationModel.moveFromFriend(roleId, friend, friendShip, false); // 删除好友关系并拉黑 + + frdRoleIds.push(roleId); + + } else if(type == BLOCK_OPEATE.REMOVE_BLACK || type == BLOCK_OPEATE.REMOVE_AND_APPLY){ let myRelation = await FriendRelationModel.findFriendByRole(roleId, POPULATE_TYPE.BLACKLIST); let blacklist = myRelation?myRelation.blacklist: []; @@ -322,6 +380,7 @@ export class FriendHandler { await FriendApplyModel.createApply(hisRoleId, role); } } + blackRoleIds.push(roleId); } else { return resResult(STATUS.WRONG_PARMS); @@ -330,6 +389,7 @@ export class FriendHandler { let { friendCnt = 0, blockCnt = 0 } = role; return resResult(STATUS.SUCCESS, { + frdRoleIds, blackRoleIds, isSuccess: str == '', msg: str, list, diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index 8c9e07703..30bdca247 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -378,3 +378,28 @@ export async function sremAsync(key:string, member:string) { await client.sremAsync(key, member); } /**************** 寻宝相关 end */ + +/**************** 数据库表存入缓存 */ + +export async function readDataBase() { + await setServerList(); +} + +async function setServerList() { + const client: Redis.RedisClient = pinus.app.get('redis'); + const serverList = await GameModel.getAllServerList(); + await client.delAsync(REDIS_KEY.DB_GAME); + + for(let { id, serverType, name } of serverList) { + // console.log(roleId); + await client.hsetAsync(REDIS_KEY.DB_GAME, `${serverType}_${id}`, name); + } +} + +export async function getServerName(serverType: string, serverId: number) { + const client: Redis.RedisClient = pinus.app.get('redis'); + let name = await client.hgetAsync(REDIS_KEY.DB_GAME, `${serverType}_${serverId}`); + return name +} + +/**************** 数据库表end */ \ No newline at end of file diff --git a/shared/consts/constModules/selectConst.ts b/shared/consts/constModules/selectConst.ts index f2f072cfe..099de3796 100644 --- a/shared/consts/constModules/selectConst.ts +++ b/shared/consts/constModules/selectConst.ts @@ -1,10 +1,10 @@ export enum ROLE_SELECT { // 初始登录数据 - ENTRY = 'serverId userInfo.uid userInfo.tel ce topFiveCe teraphs roleId roleName tili lv exp gold coin vLv title hasGuild', + ENTRY = 'serverId userInfo.uid userInfo.tel userInfo.serverType ce topFiveCe teraphs roleId roleName tili lv exp gold coin vLv title hasGuild', // 玩家列表显示基础数据 - SHOW_SIMPLE = 'roleId roleName ce headHid sHid lv title job quitTime vLv guildName', - SHOW_FRIEND_APPLY_LIST = 'roleId roleName ce headHid sHid lv title job quitTime vLv guildName friendCnt recFrdApplyCnt', + SHOW_SIMPLE = 'roleId roleName ce headHid sHid lv title job quitTime vLv guildName serverId userInfo.serverType', + SHOW_FRIEND_APPLY_LIST = 'roleId roleName ce headHid sHid lv title job quitTime vLv guildName friendCnt recFrdApplyCnt serverId userInfo.serverType', HANDLE_APPLY = 'roleId friendCnt lv', ATTR = 'globalCeAttr', GET_LV = 'lv', diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index a9afbb6ef..1ab9e3efb 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -223,6 +223,7 @@ export const REDIS_KEY = { PVP_RANK: "pvpRank", // pvp排行榜 GUILD_INFO: "guildInfo", // 公会信息 GUILD_ACTIVE_RANK: "guildActiveRank", // 公会周活跃排行榜 + DB_GAME: 'db_game' } // 各排行榜对应hash的key @@ -380,6 +381,7 @@ export enum POPULATE_TYPE { export enum BLOCK_OPEATE { ADD = 1, - REMOVE = 2, - REMOVE_AND_APPLY = 3 + REMOVE_BLACK = 2, + REMOVE_AND_APPLY = 3, + REMOVE_FRIEND = 4 } \ No newline at end of file diff --git a/shared/domain/roleField/friend.ts b/shared/domain/roleField/friend.ts index db7c7dbe5..8150cbbe2 100644 --- a/shared/domain/roleField/friend.ts +++ b/shared/domain/roleField/friend.ts @@ -1,7 +1,6 @@ import { RoleType } from "../../db/Role"; import { FriendShipType } from "../../db/FriendShip"; import * as friendUtil from '../../pubUtils/friendUtil' -import { Relation } from "../../db/FriendRelation"; export class FriendParams { roleId: string; @@ -11,6 +10,8 @@ export class FriendParams { sHid: number; ce: number; title: number; + serverId: number; + serverName: string; constructor(role: RoleType) { this.roleId = role.roleId; @@ -21,6 +22,11 @@ export class FriendParams { this.ce = role.ce; this.title = role.title; } + + setServerName(serverId: number, serverName: string) { + this.serverId = serverId; + this.serverName = serverName; + } } export class FriendRecommendParams extends FriendParams {