From b2785450acd57f3469cb27a047c64b41b7c44dcd Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 21 Jan 2021 20:52:32 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E9=82=AE=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servers/battle/handler/guildHandler.ts | 29 +++++++++++++++++++ shared/db/GuildRec.ts | 2 +- shared/db/Mail.ts | 7 +++-- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/game-server/app/servers/battle/handler/guildHandler.ts b/game-server/app/servers/battle/handler/guildHandler.ts index b6914f2a9..990720682 100644 --- a/game-server/app/servers/battle/handler/guildHandler.ts +++ b/game-server/app/servers/battle/handler/guildHandler.ts @@ -13,6 +13,7 @@ import { GuildListInfo } from '../../../pubUtils/interface'; import { UserGuildApplyModel } from '../../../db/UserGuildApply'; import { hasStructureConsume, getStructureConsume, gameData } from '../../../pubUtils/data'; import { GuildRecModel } from '../../../db/GuildRec'; +import { MailModel } from '../../../db/Mail'; export default function (app: Application) { return new GuildHandler(app); @@ -688,4 +689,32 @@ export class GuildHandler { return resResult(STATUS.SUCCESS, { list }); } + + // 团长发送消息给军团内所有成员的邮箱 + async sendMail(msg: { code: string, info: string }, session: BackendSession) { + + const roleId = session.get('roleId'); + const roleName = session.get('roleName'); + const serverId = session.get('serverId'); + const { code, info } = msg; + + const checkResult = await checkAuth(GUILD_OPERATE.SEND_MAIL, roleId, code); + if (!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH); + + const guild = await GuildModel.findByCode(code, serverId); + if(!guild) return resResult(STATUS.GUILD_NOT_FOUND); + + const { members } = guild; + //下发邮件 + for(let roleId of members) { + let mail = await MailModel.addMail({roleId, goods: [], sendName: roleName, mailId: 1, sendInfo: info}); + let key = 'login_roleId_' + roleId; + let sid = await getRedis(key); + if (!!sid) { + pinus.app.rpc.connector.connectorRemote.pushMessage.toServer(sid, roleId, 'onMailsAdd', [mail]); + } + } + + return resResult(STATUS.SUCCESS, { isSuccess: true }); + } } \ No newline at end of file diff --git a/shared/db/GuildRec.ts b/shared/db/GuildRec.ts index 1af41641e..c818ff5f9 100644 --- a/shared/db/GuildRec.ts +++ b/shared/db/GuildRec.ts @@ -35,7 +35,7 @@ export default class GuildRec extends BaseModel { } public static async getGuildRec(guildCode: string) { - const result: GuildRecType[] = await GuildRecModel.find({ guildCode }).lean(); + const result: GuildRecType[] = await GuildRecModel.find({ guildCode }).sort({createTime: -1}).lean(); return result; } } diff --git a/shared/db/Mail.ts b/shared/db/Mail.ts index a99172ff1..f3b9c5641 100644 --- a/shared/db/Mail.ts +++ b/shared/db/Mail.ts @@ -20,14 +20,17 @@ export default class Mail extends BaseModel { @prop({ required: true, default: nowSeconds() }) sendTime: number; - @prop({ required: true }) + @prop({ required: true, default: "" }) sendName: string; + @prop({ required: true, default: "" }) + sendInfo: string; + public static async addMails( mails: Array) { await MailModel.insertMany(mails); } - public static async addMail(params:{roleId: string, goods: Array, sendName: string, mailId: number, sendTime?: number}) { + public static async addMail(params:{roleId: string, goods: Array, sendName: string, mailId: number, sendInfo?: string, sendTime?: number}) { const doc = new MailModel(); const mail = Object.assign(doc.toJSON(), params); await MailModel.create(mail); From 65320fb9e0edb377b4455f05b0d922400a9e3cab Mon Sep 17 00:00:00 2001 From: luying Date: Fri, 22 Jan 2021 09:46:40 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=B8=96=E7=95=8C=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servers/battle/handler/guildHandler.ts | 23 ++++++++ .../app/servers/chat/remote/chatRemote.ts | 58 +++++++++++++------ .../servers/connector/handler/entryHandler.ts | 5 +- 3 files changed, 65 insertions(+), 21 deletions(-) diff --git a/game-server/app/servers/battle/handler/guildHandler.ts b/game-server/app/servers/battle/handler/guildHandler.ts index 990720682..09bd62e95 100644 --- a/game-server/app/servers/battle/handler/guildHandler.ts +++ b/game-server/app/servers/battle/handler/guildHandler.ts @@ -14,6 +14,7 @@ import { UserGuildApplyModel } from '../../../db/UserGuildApply'; import { hasStructureConsume, getStructureConsume, gameData } from '../../../pubUtils/data'; import { GuildRecModel } from '../../../db/GuildRec'; import { MailModel } from '../../../db/Mail'; +import { getRedis } from '../../../services/redisService'; export default function (app: Application) { return new GuildHandler(app); @@ -717,4 +718,26 @@ export class GuildHandler { return resResult(STATUS.SUCCESS, { isSuccess: true }); } + + + // 团长发送世界频道 + async recruit(msg: { code: string, info: string }, session: BackendSession) { + + const roleId = session.get('roleId'); + // const roleName = session.get('roleName'); + const sid = session.get('sid'); + const serverId = session.get('serverId'); + const { code, info } = msg; + + const checkResult = await checkAuth(GUILD_OPERATE.RECRUIT, roleId, code); + if (!checkResult) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH); + + const guild = await GuildModel.findByCode(code, serverId); + if(!guild) return resResult(STATUS.GUILD_NOT_FOUND); + + // 发送世界频道消息 + this.app.rpc.chat.chatRemote.sendWorldMessage.toServer('chat-server-1', serverId, { info }); + + return resResult(STATUS.SUCCESS, { isSuccess: true }); + } } \ No newline at end of file diff --git a/game-server/app/servers/chat/remote/chatRemote.ts b/game-server/app/servers/chat/remote/chatRemote.ts index 97e9edda1..025da8211 100644 --- a/game-server/app/servers/chat/remote/chatRemote.ts +++ b/game-server/app/servers/chat/remote/chatRemote.ts @@ -1,4 +1,4 @@ -import { Application, ChannelService, FrontendSession, RemoterClass } from 'pinus'; +import { Application, ChannelService, FrontendSession, RemoterClass, pinus } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts'; @@ -27,27 +27,28 @@ export class ChatRemote { private channelService: ChannelService; /** - * Add user into chat channel. + * 加入世界频道(分服). * - * @param {String} uid unique id for user + * @param {String} roleId roleId * @param {String} sid server id - * @param {String} name channel name - * @param {boolean} flag channel parameter + * @param {String} serverId 区id + * @param {boolean} flag 是否创建新channel * */ - public async add(uid: string, sid: string, name: string, flag: boolean) { + public async addWorldChannel(roleId: string, serverId: number, flag: boolean = true) { + const name = `world${serverId}`; + const sid = this.app.getServerId(); let channel = this.channelService.getChannel(name, flag); - let username = uid.split('*')[0]; let param = { - user: username + roleId }; - channel.pushMessage('onAdd', resResult(STATUS.SUCCESS, param)); + channel.pushMessage('onWorldAdd', resResult(STATUS.SUCCESS, param)); if (!!channel) { - channel.add(uid, sid); + channel.add(roleId, sid); } - return this.get(name, flag); + return this.getWorldChannel(name); } /** @@ -59,7 +60,7 @@ export class ChatRemote { * @return {Array} users uids in channel * */ - private get(name: string, flag: boolean) { + private getWorldChannel(name: string, flag: boolean = true): Array { let users: string[] = []; let channel = this.channelService.getChannel(name, flag); if (!!channel) { @@ -72,23 +73,42 @@ export class ChatRemote { } /** - * Kick user out chat channel. + * 踢出世界频道. * - * @param {String} uid unique id for user + * @param {String} roleId roleId * @param {String} sid server id - * @param {String} name channel name + * @param {String} serverId 区id * */ - public async kick(uid: string, sid: string, name: string) { + public async kickWorldChannel(roleId: string, serverId: number) { + const name = `world${serverId}`; + const sid = this.app.getServerId(); + let channel = this.channelService.getChannel(name, false); // leave channel if (!!channel) { - channel.leave(uid, sid); + channel.leave(roleId, sid); } - let username = uid.split('*')[0]; + let param = { - user: username + roleId }; channel.pushMessage('onLeave', resResult(STATUS.SUCCESS, param)); } + + /** + * 向世界频道全服发送消息 + * + * @param serverId 区id + * @param param 信息 + */ + public async sendWorldMessage(serverId: number, param: any) { + const name = `world${serverId}`; + + let channel = this.channelService.getChannel(name, false); + // leave channel + if (!!channel) { + channel.pushMessage('onWorldMessage', resResult(STATUS.SUCCESS, param)); + } + } } \ 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 d36e80502..e6d660480 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -78,7 +78,8 @@ export class EntryHandler { // put user into channel // console.log(JSON.stringify(self.app.rpc.battle)) // await self.app.rpc.battle.battleRemote.add.route(session)(role.roleId, self.app.get('serverId'), role.serverId, true); - // let users = await self.app.rpc.chat.chatRemote.add.route(session)(role.roleId, self.app.get('serverId'), rid, true); + + await self.app.rpc.chat.chatRemote.addWorldChannel.route(session)(role.roleId, serverId); let heros = await HeroModel.findByRole(role.roleId); let equips = await EquipModel.findbyRole(role.roleId); let items = await ItemModel.findbyRole(role.roleId); @@ -118,7 +119,7 @@ export class EntryHandler { let channel = channelService.getChannel(roleId, true); channel.leave(roleId, sid); // this.app.rpc.battle.battleRemote.kick.route(session)(roleId, this.app.get('serverId'), serverId); - // this.app.rpc.chat.chatRemote.kick.route(session, true)(session.uid, this.app.get('serverId'), session.get('rid')); + this.app.rpc.chat.chatRemote.kickWorldChannel.route(session, true)(roleId, serverId); } From f8d7967e3439c73a10e8c7e534e8211839d4ec95 Mon Sep 17 00:00:00 2001 From: luying Date: Fri, 22 Jan 2021 11:01:26 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix=20=E6=8E=A8=E9=80=81sid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app/servers/chat/remote/chatRemote.ts | 6 ++---- game-server/app/servers/connector/handler/entryHandler.ts | 4 ++-- game-server/config/servers.ts | 2 -- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/game-server/app/servers/chat/remote/chatRemote.ts b/game-server/app/servers/chat/remote/chatRemote.ts index 025da8211..685b0d191 100644 --- a/game-server/app/servers/chat/remote/chatRemote.ts +++ b/game-server/app/servers/chat/remote/chatRemote.ts @@ -35,9 +35,8 @@ export class ChatRemote { * @param {boolean} flag 是否创建新channel * */ - public async addWorldChannel(roleId: string, serverId: number, flag: boolean = true) { + public async addWorldChannel(roleId: string, serverId: number, sid: string, flag: boolean = true) { const name = `world${serverId}`; - const sid = this.app.getServerId(); let channel = this.channelService.getChannel(name, flag); let param = { roleId @@ -80,9 +79,8 @@ export class ChatRemote { * @param {String} serverId 区id * */ - public async kickWorldChannel(roleId: string, serverId: number) { + public async kickWorldChannel(roleId: string, sid: string, serverId: number) { const name = `world${serverId}`; - const sid = this.app.getServerId(); let channel = this.channelService.getChannel(name, false); // leave channel diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index e6d660480..09a89603b 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -79,7 +79,7 @@ export class EntryHandler { // console.log(JSON.stringify(self.app.rpc.battle)) // await self.app.rpc.battle.battleRemote.add.route(session)(role.roleId, self.app.get('serverId'), role.serverId, true); - await self.app.rpc.chat.chatRemote.addWorldChannel.route(session)(role.roleId, serverId); + await self.app.rpc.chat.chatRemote.addWorldChannel.route(session)(role.roleId, serverId, self.app.get('serverId')); let heros = await HeroModel.findByRole(role.roleId); let equips = await EquipModel.findbyRole(role.roleId); let items = await ItemModel.findbyRole(role.roleId); @@ -119,7 +119,7 @@ export class EntryHandler { let channel = channelService.getChannel(roleId, true); 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, serverId); + this.app.rpc.chat.chatRemote.kickWorldChannel.route(session, true)(roleId, sid, serverId); } diff --git a/game-server/config/servers.ts b/game-server/config/servers.ts index 7f4e6463e..7f270589e 100644 --- a/game-server/config/servers.ts +++ b/game-server/config/servers.ts @@ -53,8 +53,6 @@ module.exports = { ], 'chat': [ {'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050}, - {'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051}, - {'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052} ], 'role': [ {'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053}