军团:军团推送sid引用聊天系统

This commit is contained in:
luying
2021-03-18 17:57:45 +08:00
parent 442a53359e
commit 46a625761c
5 changed files with 66 additions and 106 deletions

View File

@@ -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 });
}

View File

@@ -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) {
}
}

View File

@@ -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);

View File

@@ -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";

View File

@@ -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;
}