diff --git a/game-server/app/servers/battle/handler/guildHandler.ts b/game-server/app/servers/battle/handler/guildHandler.ts index 34d08b6b3..f9afc5d40 100644 --- a/game-server/app/servers/battle/handler/guildHandler.ts +++ b/game-server/app/servers/battle/handler/guildHandler.ts @@ -15,7 +15,7 @@ import { UserGuildApplyModel } from '../../../db/UserGuildApply'; import { hasStructureConsume, getStructureConsume, gameData } from '../../../pubUtils/data'; import { GuildRecModel } from '../../../db/GuildRec'; import { sendMail } from '../../../services/mailService'; -import { existsRank, initSingleRankWithServer, getRank, setRank, redisUserInfoUpdate, redisUserInfoAdd, removeFromRank, getMyRank, isRoleOnline } from '../../../services/redisService'; +import { existsRank, initSingleRankWithServer, getRank, setRank, redisUserInfoUpdate, redisUserInfoAdd, removeFromRank, getMyRank, isRoleOnline, getRedis } from '../../../services/redisService'; import { lockData } from '../../../services/redLockService'; import { DATA_NAME } from '../../../consts/dataName'; import { openGuildRefine } from '../../../services/guildRefineService'; @@ -25,7 +25,9 @@ export default function (app: Application) { } export class GuildHandler { + channelService: ChannelService; constructor(private app: Application) { + this.channelService = app.get('channelService'); } // 创建军团 @@ -431,13 +433,17 @@ export class GuildHandler { const roleList = await RoleModel.findRoleByField('roleId', roleIds); let result = new Array(); + let uids = []; for(let role of roleList) { if(!role.hasGuild) { await UserGuildApplyModel.createUserGuildApply(role, guild, GUILD_APPLY_TYPE.INVITE); result.push(role.roleId); - } + let hisSid = await getRedis(`login_roleId_${role.roleId}`); + uids.push({ uid: role.roleId, sid: hisSid }) + } } - + this.channelService.pushMessageByUids('onGuildInvite', resResult(STATUS.SUCCESS, { code }), uids); + return resResult(STATUS.SUCCESS, { roleIds: result }); } diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index e0cd378c3..db6752adc 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -1,4 +1,4 @@ -import { Application, BackendSession } from "pinus"; +import { Application, BackendSession, ChannelService } from "pinus"; import { resResult, getRandEelm, getResStr, shouldRefresh } from "../../../pubUtils/util"; import { STATUS, ROLE_SELECT, FRIEND_DROP_TYPE, FRIEND_RELATION_TYPE, POPULATE_TYPE, BLOCK_OPEATE, CONSUME_TYPE, ITID, HERO_SELECT, EQUIP_SELECT, REDIS_KEY } from "../../../consts"; import { RoleModel, RoleType } from "../../../db/Role"; @@ -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, getServerName, getMyRank } from "../../../services/redisService"; +import { isRoleOnline, getServerName, getMyRank, getRedis } from "../../../services/redisService"; import { increaseFrdCnt, getRecommendType, sortByBeSentHeart } from "../../../services/friendService"; import { FriendPointModel } from "../../../db/FriendPoint"; import { gameData } from "../../../pubUtils/data"; @@ -28,8 +28,10 @@ export default function (app: Application) { } export class FriendHandler { + channelService: ChannelService; constructor(private app: Application) { + this.channelService = this.app.get('channelService'); } // 获取推荐好友列表 @@ -74,7 +76,6 @@ export class FriendHandler { if(list2.length < FRIEND.FRIEND_RECONMMEND_NUM - myServerLen) { list1 = getRandEelm(myServerList, FRIEND.FRIEND_RECONMMEND_NUM - list2.length); } - console.log let list = list1.concat(list2); @@ -115,6 +116,7 @@ export class FriendHandler { let myFriendRelation = await FriendRelationModel.findFriendByRole(roleId, POPULATE_TYPE.NOT); let str = '', resultRoleIds = new Array(); + let uids = []; for(let hisRoleId of roleIds) { let type = getRecommendType(myFriendRelation, roleId, hisRoleId); if(type == FRIEND_RELATION_TYPE.HAS_FRIEND) { @@ -132,7 +134,11 @@ export class FriendHandler { await FriendApplyModel.createApply(hisRoleId, role); resultRoleIds.push(hisRoleId); + let hisSid = await getRedis(`login_roleId_${hisRoleId}`); + uids.push({ uid: hisRoleId, sid: hisSid }); } + console.log(JSON.stringify(uids)) + this.channelService.pushMessageByUids('onFriendApply', resResult(STATUS.SUCCESS, { roleId }), uids); return resResult(STATUS.SUCCESS, { isSuccess: str == '', @@ -336,8 +342,8 @@ export class FriendHandler { friend = await RoleModel.findByRoleId(hisRoleId); } - await FriendRelationModel.moveFromFriend(hisRoleId, role, friendShip, false); //从对方好友删除 - await FriendRelationModel.moveFromFriend(roleId, friend, friendShip, true); // 删除好友关系并拉黑 + await FriendRelationModel.moveFromFriend(hisRoleId, role, friendShip, false, !!curFriend); //从对方好友删除 + await FriendRelationModel.moveFromFriend(roleId, friend, friendShip, true, !!curFriend); // 删除好友关系并拉黑 let param = new BlackListParam(friend); let isOnline = await isRoleOnline(friend.roleId); @@ -370,8 +376,8 @@ export class FriendHandler { friend = curFriend.role; friendShip = curFriend.friendShip; - await FriendRelationModel.moveFromFriend(hisRoleId, role, friendShip, false); //从对方好友删除 - await FriendRelationModel.moveFromFriend(roleId, friend, friendShip, false); // 删除好友关系并拉黑 + await FriendRelationModel.moveFromFriend(hisRoleId, role, friendShip, false, !!curFriend); //从对方好友删除 + await FriendRelationModel.moveFromFriend(roleId, friend, friendShip, false, !!curFriend); // 删除好友关系并拉黑 frdRoleIds.push(roleId); @@ -447,6 +453,8 @@ export class FriendHandler { let todaySendInc = 0; let list = new Array(); + + let uids = []; for(let relation of canSendList) { if(todaySendCnt + FRIEND.FRIEND_FRIENDPOINT_ADD > max) break; @@ -460,7 +468,11 @@ export class FriendHandler { todaySendCnt += FRIEND.FRIEND_FRIENDPOINT_ADD; todaySendInc += FRIEND.FRIEND_FRIENDPOINT_ADD; + + let hisSid = await getRedis(`login_roleId_${relation.roleId}`); + uids.push({ uid: relation.roleId, sid: hisSid }) } + this.channelService.pushMessageByUids('onFriendSendHeart', resResult(STATUS.SUCCESS, {roleId}), uids); if(todaySendInc <= 0) return resResult(STATUS.FRIEND_HAS_SENT); // 更新情谊值 @@ -583,7 +595,7 @@ export class FriendHandler { let dbHeroes = await HeroModel.findByRole(oppoRoleId); let role = await RoleModel.findByRoleId(oppoRoleId, null, true); - let { topFive } = role; + let { topFive, topFiveCe } = role; let heroes = new Array(); for(let {hid, lv, star, colorStar, quality } of dbHeroes) { @@ -597,7 +609,7 @@ export class FriendHandler { } let rank = await getMyRank(REDIS_KEY.PVP_RANK, 0, oppoRoleId);//去redis中获取排名 - result = new PlayerDetail({...role, heroes}); + result = new PlayerDetail({...role, defCe: topFiveCe, heroes}); result.setWarStar(role.warStar, rank); return resResult(STATUS.SUCCESS, result); diff --git a/shared/db/FriendRelation.ts b/shared/db/FriendRelation.ts index 6511ca0a6..ca4ff0655 100644 --- a/shared/db/FriendRelation.ts +++ b/shared/db/FriendRelation.ts @@ -62,22 +62,30 @@ export default class FriendRelation extends BaseModel { return result; } - public static async moveFromFriend(roleId: string, friend: RoleType, friendShip: FriendShipType, toBlack: boolean ) { - let update = { - $pull: { friends: { roleId: friend.roleId } } + public static async moveFromFriend(roleId: string, friend: RoleType, friendShip: FriendShipType, toBlack: boolean, hasFriend: boolean ) { + let update = {} + let setOnInsert = {}; + if(hasFriend) { + update['$pull'] = { friends: { roleId: friend.roleId } }; + } else { + setOnInsert['friends'] = []; } if(toBlack) { update['$push'] = { blacklist: { roleId: friend.roleId, role: friend._id, friendShip: friendShip? friendShip._id: null } }; + } else { + setOnInsert['blacklist'] = []; } + update['$setOnInsert'] = setOnInsert; - let result: FriendRelationType = await FriendRelationModel.findOneAndUpdate({ roleId }, update, { new: true }); + let result: FriendRelationType = await FriendRelationModel.findOneAndUpdate({ roleId }, update, { upsert: true, new: true }); return result } public static async removeFromBlack(roleId: string, frdRoleId: string ) { let result: FriendRelationType = await FriendRelationModel.findOneAndUpdate({ roleId }, { - $pull: { blacklist: { roleId: frdRoleId } } - }, { new: true }); + $pull: { blacklist: { roleId: frdRoleId } }, + $setOnInsert: { friends: [] } + }, { upsert: true, new: true }); return result } diff --git a/shared/pubUtils/dicParam.ts b/shared/pubUtils/dicParam.ts index d5659b061..40442e1a8 100644 --- a/shared/pubUtils/dicParam.ts +++ b/shared/pubUtils/dicParam.ts @@ -60,7 +60,7 @@ export const FRIEND = { FRIEND_CLOSEPOINT_ADD: 5, // 每赠送/领取一次增加的亲密度 FRIEND_FRIENDPOINT_ADD: 1, // 每领取一次爱心会增加的情谊值 FRIEND_RECONMMEND_LEVEL: 5, // 系统推荐玩家等级要求浮动 - FRIEND_RECONMMEND_ACTIVETIME: 24, // 系统推荐玩家活跃时间要求(小时) + FRIEND_RECONMMEND_ACTIVETIME: 1000, // 系统推荐玩家活跃时间要求(小时) FRIEND_BLACKLIST_MAX: 100, // 黑名单人数上限 FRIEND_MANAGE_APPLICATION: 50, // 好友显示收到的申请条数上限 FRIEND_RECEIVE_SINGLE: 1, // 向单个好友每日最多赠送多少爱心