Files
ZYZ/game-server/app/servers/chat/remote/guildRemote.ts
T

186 lines
5.9 KiB
TypeScript

import { Application, ChannelService } from 'pinus';
import { resResult } from '../../../pubUtils/util';
import { STATUS, CHANNEL_PREFIX } from '../../../consts';
import { GuildType } from '../../../db/Guild';
import { RoleType } from '../../../db/Role';
import { GuildRecType } from '../../../db/GuildRec';
import { leaveGuildChannel, groupRoomId } from '../../../services/chatService';
import { GuildGateRankParam } from '../../../domain/battleField/guildActivity';
export default function (app: Application) {
return new GuildRemote(app);
}
export class GuildRemote {
constructor(private app: Application) {
this.app = app;
this.channelService = app.get('channelService');
}
private channelService: ChannelService;
private MEMBER_QUIT = 'onMemberQuit';
private DISMISS = 'onDismiss';
private GUILD_INFO_UPDATE = 'onGuildInfoUpdate';
private DEMOTION = 'onDemotion';
private PROMOTION = 'onPromotion';
private GUILD_REC_ADD = 'onGuildRecAdd';
private GUILD_ACT_RANK = 'onGuildGateRankUpdate'; // 军团活动排行榜
private GUILD_GATE_ACT_HP = 'onGuildGateHpUpdate'; // 军团活动蛮夷入侵排行榜
private GUILD_ACTIVITY_END = 'onGuildActivityEnd';
/**
* 封装,军团相关channel名: 'guild'+guildCode
* @param guildCode 军团code
* @param create 是否创建channel
*/
private getChannel(guildCode: string, create: boolean = false) {
let channelName = groupRoomId(CHANNEL_PREFIX.GUILD, guildCode);
let channel = this.channelService.getChannel(channelName, create);
return channel
}
/**
* 封装,向单人发推送
* @param guildCode 军团code
* @param path 推送地址
* @param roleId 玩家id
* @param message 推送信息
* @param sid 玩家服
*/
private pushMessageByUids(guildCode: string, path: string, roleId: string, message: {code: string, roleId?: string}, sid?: string) {
let channel = this.getChannel(guildCode);
let uids = [];
if(!sid) {
sid = channel && channel.getMember(roleId)['sid'];
}
if(sid) {
uids.push({roleId, sid});
this.channelService.pushMessageByUids(path, resResult(STATUS.SUCCESS, message), uids);
}
return channel
}
/**
* 封装,向channel发推送
* @param guildCode 军团code
* @param path 推送地址
* @param message 推送信息
*/
private pushMessage(guildCode: string, path: string, message: any) {
let channel = this.getChannel(guildCode);
if(!!channel) {
channel.pushMessage(path, resResult(STATUS.SUCCESS, message));
}
return channel
}
/**
* 踢出某个成员
* @param guildCode 军团code
* @param roleId 踢出玩家roleId
* @param guild 军团信息
* @param sid 玩家sid
*/
public memberQuit (guildCode: string, roleId: string, guild: GuildType, sid?: string) {
// 被踢出公会
this.pushMessageByUids(guildCode, this.MEMBER_QUIT, roleId, {
code: guildCode,
roleId
}, sid);
// 更新人数减少
this.updateInfo(guildCode, { memberCnt: guild.memberCnt, guildCe: guild.guildCe });
leaveGuildChannel(roleId, sid);
}
/**
* 解散军团
* @param guildCode 军团code
*/
public dismiss(guildCode: string) {
let channel = this.pushMessage(guildCode, this.DISMISS, {code: guildCode});
if(!!channel) {
channel.destroy();
}
}
/**
* 更新军团信息
* @param guildCode 军团code
* @param info 军团相关信息
*/
public updateInfo (guildCode: string, info: any) {
this.pushMessage(guildCode, this.GUILD_INFO_UPDATE, info);
}
/**
* 更换团长信息
* @param guildCode 军团code
* @param managerCnt 管理员人数
* @param newLeader 新的团长
* @param oldLeaderId 旧团长
*/
public changeLeader (guildCode: string, managerCnt: number, newLeader: RoleType, oldLeaderId: string) {
let { roleId, roleName, frame, head, spine, lv, quitTime } = newLeader;
this.updateInfo(guildCode, {managerCnt, leader: { roleId, roleName, frame, head, spine, lv, quitTime }});
this.demotion(guildCode, oldLeaderId);
this.promotion(guildCode, roleId);
}
/**
* 向旧团长推送降职信息
* @param guildCode 军团code
* @param roleId 旧团长id
*/
public demotion (guildCode: string, roleId: string) {
this.pushMessageByUids(guildCode, this.DEMOTION, roleId, {
code: guildCode
});
}
/**
* 向新团长推送升职信息
* @param guildCode 军团code
* @param roleId 新团长id
*/
public promotion (guildCode: string, roleId: string) {
this.pushMessageByUids(guildCode, this.PROMOTION, roleId, {
code: guildCode
});
}
/**
* 添加动态
* @param guildRecType 动态
*/
public addRec (guildRecType: GuildRecType) {
let { guildCode, type, params, createTime } = guildRecType;
this.pushMessage(guildCode, this.GUILD_REC_ADD, {type, params, createTime});
}
/**
* 向军团推送城门血量
* @param guildCode
*/
public pushGateHp(guildCode: string, msg: GuildGateRankParam) {
this.pushMessage(guildCode, this.GUILD_GATE_ACT_HP, msg);
}
/**
* 向军团推送排行榜名次
* @param guildCode
*/
public pushRank(guildCode: string, msg: GuildGateRankParam) {
this.pushMessage(guildCode, this.GUILD_ACT_RANK, msg);
}
/**
* @description 向军团推送结束活动
* @param guildCode
*/
public async sendGuildActivityEnd(guildCode: string) {
console.log("MSG END")
this.pushMessage(guildCode, this.GUILD_ACTIVITY_END, {});
}
}