diff --git a/game-server/app/servers/battle/handler/guildHandler.ts b/game-server/app/servers/battle/handler/guildHandler.ts index 767fbba22..0558d8d56 100644 --- a/game-server/app/servers/battle/handler/guildHandler.ts +++ b/game-server/app/servers/battle/handler/guildHandler.ts @@ -1,6 +1,6 @@ import { Application, BackendSession, pinus, ChannelService } from 'pinus'; import { resResult, getRandEelm, getRefTime, shouldRefresh, sortArrRandom } from '../../../pubUtils/util'; -import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME, MAIL_TYPE, REDIS_KEY, CHAT_SERVER, GUILD_SELECT, USER_GUILD_SELECT } from '../../../consts'; +import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME, MAIL_TYPE, REDIS_KEY, GUILD_SELECT, USER_GUILD_SELECT } from '../../../consts'; import { UserGuildModel } from '../../../db/UserGuild'; import { checkAuth, joinGuild, getGuildWithRefActive, getUserGuildWithRefActive, addActive, settleGuildWeekly } from '../../../services/guildService'; import { GuildModel, GuildType } from '../../../db/Guild'; @@ -21,7 +21,7 @@ import { openGuildRefine } from '../../../services/guildRefineService'; import { unlockTrain } from '../../../services/guildTrainService'; import { removeBossRank } from '../../../services/guildBossService'; import { removeTrainRank } from '../../../services/guildTrainService'; -import { pushGuildNoticeUpdateMsg, pushGuildUpStructureMsg } from '../../../services/chatService'; +import { pushGuildNoticeUpdateMsg, pushGuildUpStructureMsg, addRoleToGuildChannel, getGuildChannelSid } from '../../../services/chatService'; export default function (app: Application) { return new GuildHandler(app); } @@ -77,11 +77,13 @@ export class GuildHandler { let rank = await getMyRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, guild.code); // 加入channel - this.app.rpc.chat.guildRemote.enterChannel.toServer(CHAT_SERVER, guild.code, roleId, sid); + + addRoleToGuildChannel(roleId, sid, guild.code); // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, guild.code, GUILD_REC_TYPE.JOIN_GUILD, [roleName]); - this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER, rec); + let chatSid = await getGuildChannelSid(guild.code); + this.app.rpc.chat.guildRemote.addRec.toServer(chatSid, rec); // 返回 const result = { ...guild, rank, myInfo: { ...userGuild, isOnline: true}}; @@ -128,7 +130,8 @@ export class GuildHandler { const select = ['code', 'name', 'notice', 'introduce', 'ceLimit', 'isAuto', 'icon']; const guild = await GuildModel.updateInfo(code, { name, notice, introduce, ceLimit, isAuto }, {}, select.join(' ')); - this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { name, notice, introduce, ceLimit, isAuto }); + let chatSid = await getGuildChannelSid(code); + this.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, code, { name, notice, introduce, ceLimit, isAuto }); await redisUserInfoUpdate(REDIS_KEY.GUILD_INFO, code, [{ field: 'name', value: name }]); if (notice) { @@ -216,22 +219,23 @@ export class GuildHandler { } guild = await GuildModel.updateInfo(code, updateObject, { managerCnt: managerCntInc }, 'managerCnt code name'); // 如果有转让团长设置leader - + let chatSid = await getGuildChannelSid(code); + // 添加动态 if(auth == GUILD_AUTH.MANAGER) { const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.SET_MANAGER, [role.roleName]); - this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { managerCnt: guild.managerCnt }); - this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER, rec); + this.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, code, { managerCnt: guild.managerCnt }); + this.app.rpc.chat.guildRemote.addRec.toServer(chatSid, rec); await sendMail(MAIL_TYPE.GUILD_BE_SET_MANAGER, memberRoleId, roleName, [guild.name]); } else if (auth == GUILD_AUTH.LEADER) { const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.SET_LEADER, [roleName, role.roleName]); - this.app.rpc.chat.guildRemote.changeLeader.toServer(CHAT_SERVER, code, guild.managerCnt, role, roleId); - this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER, rec); + this.app.rpc.chat.guildRemote.changeLeader.toServer(chatSid, code, guild.managerCnt, role, roleId); + this.app.rpc.chat.guildRemote.addRec.toServer(chatSid, rec); await sendMail(MAIL_TYPE.GUILD_BE_SET_LEADER, memberRoleId, roleName, [guild.name]); } else { - this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER,code, { managerCnt: guild.managerCnt }); + this.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid,code, { managerCnt: guild.managerCnt }); await sendMail(MAIL_TYPE.GUILD_BE_SET_MEMBER, memberRoleId, roleName, [guild.name]); } @@ -268,7 +272,7 @@ export class GuildHandler { // 打开公会页面,加入channel if(userGuild.guildCode) { - this.app.rpc.chat.guildRemote.enterChannel.toServer(CHAT_SERVER, userGuild.guildCode, roleId, sid); + addRoleToGuildChannel(roleId, sid, guild.code); } // 获取排行榜 @@ -319,8 +323,10 @@ export class GuildHandler { // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.JOIN_GUILD, [roleName]); // 更新人数增加 - this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { memberCnt: joinResult.memberCnt, guildCe: joinResult.guildCe }); - this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); + let chatSid = await getGuildChannelSid(code); + + this.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, code, { memberCnt: joinResult.memberCnt, guildCe: joinResult.guildCe }); + this.app.rpc.chat.guildRemote.addRec.toServer(chatSid,rec); hasGuild = true; } else { // 不自动加入,插入申请表 @@ -374,12 +380,12 @@ export class GuildHandler { for(let { roleId } of applyList) { const joinResult = await joinGuild(code, guild.name, guild.lv, roleId, serverId); if(joinResult.status == -1) continue; - + let chatSid = await getGuildChannelSid(code); // 更新人数增加 - this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { memberCnt: joinResult.memberCnt, guildCe: joinResult.guildCe }); + this.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, code, { memberCnt: joinResult.memberCnt, guildCe: joinResult.guildCe }); // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.JOIN_GUILD, [joinResult.roleName]); - this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); + this.app.rpc.chat.guildRemote.addRec.toServer(chatSid,rec); roleIds.push(roleId); } @@ -513,11 +519,12 @@ export class GuildHandler { return joinResult.resResult; } + let chatSid = await getGuildChannelSid(code); // 更新人数增加 - this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { memberCnt: joinResult.memberCnt, guildCe: joinResult.guildCe }); + this.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, code, { memberCnt: joinResult.memberCnt, guildCe: joinResult.guildCe }); // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.JOIN_GUILD, [joinResult.roleName]); - this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER, rec); + this.app.rpc.chat.guildRemote.addRec.toServer(chatSid, rec); code = guild.code; } @@ -592,7 +599,8 @@ export class GuildHandler { // 删除channel - this.app.rpc.chat.guildRemote.dismiss.toServer(CHAT_SERVER,code); + let chatSid = await getGuildChannelSid(code); + this.app.rpc.chat.guildRemote.dismiss.toServer(chatSid,code); await removeFromRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, code); return resResult(STATUS.SUCCESS, { code, status: guild.status }); @@ -624,8 +632,9 @@ export class GuildHandler { await removeTrainRank(code, roleId, guild.trainId); // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.QUIT_GUILD, [roleName]); - this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); - this.app.rpc.chat.guildRemote.memberQuit.toServer(CHAT_SERVER,code, roleId, guild, sid); + let chatSid = await getGuildChannelSid(code); + this.app.rpc.chat.guildRemote.addRec.toServer(chatSid,rec); + this.app.rpc.chat.guildRemote.memberQuit.toServer(chatSid,code, roleId, guild, sid); return resResult(STATUS.SUCCESS, { hasGuild: role.hasGuild }); } @@ -659,12 +668,13 @@ export class GuildHandler { //删除排名信息 await removeBossRank(code, roleId); await removeTrainRank(code, roleId, guild.trainId); + let chatSid = await getGuildChannelSid(code); - this.app.rpc.chat.guildRemote.memberQuit.toServer(CHAT_SERVER,code, roleId, guild); + this.app.rpc.chat.guildRemote.memberQuit.toServer(chatSid,code, roleId, guild); // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.QUIT_GUILD, [role.roleName]); - this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); + this.app.rpc.chat.guildRemote.addRec.toServer(chatSid,rec); await sendMail(MAIL_TYPE.GUILD_BE_KICK, memberRoleId, roleName, [guild.name]); return resResult(STATUS.SUCCESS, { memberCnt: guild.memberCnt }); @@ -715,10 +725,11 @@ export class GuildHandler { const guild = await GuildModel.updateInfo(code, { leader: topUser._id }, { managerCnt: managerCntInc }, 'managerCnt name'); // 如果有转让团长设置leader // 添加动态 + let chatSid = await getGuildChannelSid(code); const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.IMPEACH, [ oldRoleName, topUser.roleName]); - this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); + this.app.rpc.chat.guildRemote.addRec.toServer(chatSid,rec); - this.app.rpc.chat.guildRemote.changeLeader.toServer(CHAT_SERVER,code, guild.managerCnt, topUser, leaderRoleId); + this.app.rpc.chat.guildRemote.changeLeader.toServer(chatSid,code, guild.managerCnt, topUser, leaderRoleId); await sendMail(MAIL_TYPE.GUILD_BE_IMPEACH, leaderRoleId, roleName, [guild.name]); await sendMail(MAIL_TYPE.GUILD_BE_SET_LEADER, topUser.roleId, roleName, [guild.name]); @@ -771,13 +782,14 @@ export class GuildHandler { const resultStructure = result.structure.find(cur => cur.id == id); // 修改信息 - this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER,code, { ...result }); + let chatSid = await getGuildChannelSid(code); + this.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid,code, { ...result }); await redisUserInfoUpdate(REDIS_KEY.GUILD_INFO, code, [{field: 'lv', value: result.lv } ]); // 添加动态 const structureName = GUILD_STRUCTURE_NAME.get(id); const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.STRUCTURE_UP, [structureName, resultStructure.lv.toString()]); - this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); + this.app.rpc.chat.guildRemote.addRec.toServer(chatSid,rec); // 军团频道聊天消息 pushGuildUpStructureMsg(roleId, roleName, result, resultStructure); @@ -922,7 +934,9 @@ export class GuildHandler { const { guild, userGuild } = result; let { activeDaily, activeWeekly } = guild; - this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { activeDaily, activeWeekly }); + let chatSid = await getGuildChannelSid(code); + + this.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, code, { activeDaily, activeWeekly }); return resResult(STATUS.SUCCESS, { activeDaily, activeWeekly, myInfo: userGuild }); } @@ -939,7 +953,8 @@ export class GuildHandler { const { code, count } = msg; const guild = await GuildModel.updateInfo(code, {}, { fund: count }, 'fund'); - this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, {fund: guild.fund}); + let chatSid = await getGuildChannelSid(code); + this.app.rpc.chat.guildRemote.updateInfo.toServer(chatSid, code, {fund: guild.fund}); return resResult(STATUS.SUCCESS, { code, fund: guild.fund }); } diff --git a/game-server/app/servers/chat/remote/guildRemote.ts b/game-server/app/servers/chat/remote/guildRemote.ts index 55fd77b67..f80032a22 100644 --- a/game-server/app/servers/chat/remote/guildRemote.ts +++ b/game-server/app/servers/chat/remote/guildRemote.ts @@ -1,10 +1,10 @@ -import { Application, ChannelService, FrontendSession, RemoterClass, pinus } from 'pinus'; +import { Application, ChannelService } from 'pinus'; import { resResult } from '../../../pubUtils/util'; -import { STATUS } from '../../../consts'; +import { STATUS, CHANNEL_PREFIX } from '../../../consts'; import { GuildType } from '../../../db/Guild'; import { RoleType } from '../../../db/Role'; import { GuildRecType } from '../../../db/GuildRec'; -import { UserGuildModel } from '../../../db/UserGuild'; +import { leaveGuildChannel, groupRoomId } from '../../../services/chatService'; export default function (app: Application) { return new GuildRemote(app); @@ -24,6 +24,8 @@ export class GuildRemote { private DEMOTION = 'onDemotion'; private PROMOTION = 'onPromotion'; private GUILD_REC_ADD = 'onGuildRecAdd'; + private GUILD_ACT_RANK = 'onGuildGateRankUpdate'; // 军团活动排行榜 + private GUILD_GATE_ACT_HP = 'onGuildGateHpUpdate'; // 军团活动蛮夷入侵排行榜 /** * 封装,军团相关channel名: 'guild'+guildCode @@ -31,7 +33,7 @@ export class GuildRemote { * @param create 是否创建channel */ private getChannel(guildCode: string, create: boolean = false) { - let channelName = `guild${guildCode}`; + let channelName = groupRoomId(CHANNEL_PREFIX.GUILD, guildCode); let channel = this.channelService.getChannel(channelName, create); return channel } @@ -71,74 +73,6 @@ export class GuildRemote { } return channel } - - /** - * 玩家上线 - * @param roleId 玩家id - * @param sid 玩家所在服 connector - */ - public async enterMyChannel(roleId: string, sid: string) { - let myGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode'); - if(!!myGuild) { - this.enterChannel(myGuild.guildCode, roleId, sid); - } - } - - /** - * 加入军团channel - * @param guildCode 军团code - * @param roleId 玩家id - * @param sid 玩家所在服 connector - */ - public enterChannel(guildCode: string, roleId: string, sid: string) { - let channel = this.getChannel(guildCode, true); - - // TODO: 后续可能添加上下线通知功能 - // let param = { - // roleId - // }; - // channel.pushMessage('onMemberAdd', resResult(STATUS.SUCCESS, param)); - - let users = channel.getMembers(); - if (users.indexOf(roleId) === -1) { - channel.add(roleId, sid); - } - } - - /** - * 玩家下线 - * @param roleId 玩家id - * @param sid 玩家所在服 connector - */ - public async leaveMyChannel(roleId: string, sid: string) { - let myGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode'); - if(!!myGuild) { - this.leaveChannel(myGuild.guildCode, roleId, sid); - } - } - - /** - * 退出军团channel - * @param guildCode 军团code - * @param roleId 玩家id - * @param sid 玩家所在服 connector - */ - public leaveChannel(guildCode: string, roleId: string, sid?: string) { - let channel = this.getChannel(guildCode, false); - if(!sid) { - sid = channel && channel.getMember(roleId)['sid']; - } - // leave channel - if (!!channel) { - channel.leave(roleId, sid); - } - - // TODO: 后续可能添加上下线通知功能 - // let param = { - // roleId - // }; - // channel.pushMessage('onMemberLeave', resResult(STATUS.SUCCESS, param)); - } /** * 踢出某个成员 @@ -155,7 +89,7 @@ export class GuildRemote { }, sid); // 更新人数减少 this.updateInfo(guildCode, { memberCnt: guild.memberCnt, guildCe: guild.guildCe }); - this.leaveChannel(guildCode, roleId, sid); + leaveGuildChannel(roleId, sid); } /** @@ -222,4 +156,12 @@ export class GuildRemote { let { guildCode, type, params, createTime } = guildRecType; this.pushMessage(guildCode, this.GUILD_REC_ADD, {type, params, createTime}); } + + /** + * 向军团推送排行榜名次 + * @param guildCode + */ + public pushRank(guildCode: string) { + + } } \ No newline at end of file diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 09aa0acbf..5f76233be 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -95,7 +95,6 @@ export class EntryHandler { addRoleToSysChannel(role.roleId, self.app.get('serverId'), role.serverId); addRoleToWorldChannel(role.roleId, self.app.get('serverId'), role.serverId); await self.app.rpc.chat.chatRemote.addWorldChannel.route(session)(role.roleId, serverId, self.app.get('serverId')); - await self.app.rpc.chat.guildRemote.enterMyChannel.route(session)(role.roleId, self.app.get('serverId')); let heros = await HeroModel.findByRole(role.roleId, [], HERO_SELECT.ENTRY, true); let equips = await EquipModel.findbyRole(role.roleId); let items = await ItemModel.findbyRole(role.roleId); @@ -171,7 +170,6 @@ export class EntryHandler { channel.leave(roleId, sid); // this.app.rpc.battle.battleRemote.kick.route(session)(roleId, this.app.get('serverId'), serverId); this.app.rpc.chat.chatRemote.kickWorldChannel.route(session, true)(roleId, sid, serverId); - this.app.rpc.chat.guildRemote.leaveMyChannel.route(session)(roleId, sid); await leaveSysChannel(roleId, sid, serverId); await leaveWorldChannel(roleId, sid, serverId); await leaveGuildChannel(roleId, sid); diff --git a/game-server/app/servers/guild/handler/gateActivityHandler.ts b/game-server/app/servers/guild/handler/gateActivityHandler.ts index 1bf1ee15e..64906f260 100644 --- a/game-server/app/servers/guild/handler/gateActivityHandler.ts +++ b/game-server/app/servers/guild/handler/gateActivityHandler.ts @@ -5,7 +5,6 @@ import { STATUS, GUILD_ACTIVITY_TYPE, GUILD_POINT_WAYS, ENEMIES_TYPE, GET_POINT_ import { GameModel } from "../../../db/Game"; import { ServerlistModel } from "../../../db/Serverlist"; import { UserGuildActivityRecModel, Record } from "../../../db/UserGuildActivityRec"; -import { GateMembersRec } from "../../../domain/battleField/guildActivity"; import { GUILDACTIVITY } from "../../../pubUtils/dicParam"; import { GuildActivityRecordModel } from "../../../db/GuildActivityRec"; import { RoleModel, RoleType } from "../../../db/Role"; diff --git a/game-server/app/services/chatChannelService.ts b/game-server/app/services/chatChannelService.ts index adc6db961..7aa70283c 100644 --- a/game-server/app/services/chatChannelService.ts +++ b/game-server/app/services/chatChannelService.ts @@ -62,3 +62,9 @@ export async function leaveGuildChannel(roleId: string, sid: string) { const roomId = groupRoomId(CHANNEL_PREFIX.GUILD, guildCode); await leaveChannel(roomId, roleId, sid); } + +export async function getGuildChannelSid(guildCode: string) { + const roomId = groupRoomId(CHANNEL_PREFIX.GUILD, guildCode); + const channelSid = await channelServer(roomId); + return channelSid; +}