优化:抽象推送方法

This commit is contained in:
luying
2022-04-08 20:38:54 +08:00
parent a64faac7cd
commit f486a8d8a5
38 changed files with 475 additions and 1257 deletions

View File

@@ -0,0 +1,130 @@
import { Channel, pinus } from "pinus";
import { CHANNEL_PREFIX, PUSH_BATCH, PUSH_INTERVAL, PUSH_ROUTE, STATUS } from "../consts";
import { resResult } from "../pubUtils/util";
import { getCityChannelSid, getGuildChannelSid, getWorldChannelSid, groupRoomId } from "./chatService";
import { getRoleOnlineInfo } from "./redisService";
import { errlogger, infologger } from '../util/logger';
export async function sendMessageToServerWithSuc(serverId: number, route: string, data: any, isBatch = false) {
await sendMessageToServer(serverId, route, resResult(STATUS.SUCCESS, data), isBatch);
}
export async function sendMessageToServer(serverId: number, route: string, data: any, isBatch = false) {
let channelSid = await getWorldChannelSid(serverId);
let roomId = groupRoomId(CHANNEL_PREFIX.WORLD, serverId);
await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, data, isBatch);
}
export async function sendMessageToGuildWithSuc(guildCode: string, route: string, data: any) {
await sendMessageToGuild(guildCode, route, resResult(STATUS.SUCCESS, data));
}
export async function sendMessageToGuild(guildCode: string, route: string, data: any) {
let channelSid = await getGuildChannelSid(guildCode);
let roomId = groupRoomId(CHANNEL_PREFIX.GUILD, guildCode);
await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, data);
}
export async function sendMessageToCityWithSuc(cityId: number, route: string, data: any) {
await sendMessageToCity(cityId, route, resResult(STATUS.SUCCESS, data));
}
export async function sendMessageToCity(cityId: number, route: string, data: any) {
let channelSid = await getCityChannelSid(cityId);
let roomId = groupRoomId(CHANNEL_PREFIX.CITY, cityId);
await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, data);
}
export async function sendMessageToUserWithSuc(roleId: string, route: string, data: any, sid?: string) {
await sendMessageToUser(roleId, route, resResult(STATUS.SUCCESS, data), sid);
}
export async function sendMessageToUser(roleId: string, route: string, data: any, sid?: string) {
let uids = [];
if (!sid) {
let onlineUser = await getRoleOnlineInfo(roleId);
sid = onlineUser.sid;
}
if (!!sid) {
uids.push({ uid: roleId, sid });
pinus.app.get('channelService').pushMessageByUids(route, data, uids);
}
}
export async function sendMessageToUsersWithSuc(route: string, data: any, uids: { uid: string, sid: string }[]) {
await sendMessageToUsers(route, resResult(STATUS.SUCCESS, data), uids);
}
// 推送给个人的方法收束于这个函数
export async function sendMessageToUsers(route: string, data: any, uids: { uid: string, sid: string }[]) {
if(uids.length > 0) {
infologger.debug(`pushMessage route: ${route} data: ${data} members: ${uids.map(obj => obj.uid).join()}`);
pinus.app.get('channelService').pushMessageByUids(route, data, uids);
}
}
export async function sendMessageToTeam(teamCode: string, route: string, data: any) {
const channel = pinus.app.get('channelService').getChannel(teamCode);
sendMessageToChannel(channel, route, resResult(STATUS.SUCCESS, data));
}
/**
*
* @param user
*/
export function addUserToTeamChannel(teamCode: string, isCreate: boolean, roleId: string, sid: string) {
let channel = pinus.app.get('channelService').getChannel(teamCode, isCreate);
addUserToChannel(channel, roleId, sid);
return channel
}
export function addUserToChannel(channel: Channel, roleId: string, sid: string) {
const users = channel.getMembers();
if (users.indexOf(roleId) === -1) {
channel.add(roleId, sid);
}
}
export function sendMessgeToChannelByBatch(channel: Channel, route: string, data: any) {
let members = channel.getMembers();
if(members.length > PUSH_BATCH) {
let n = Math.ceil(members.length / PUSH_BATCH); // 一共多少批
// console.log(n)
let i = -1;
let interval = setInterval(() => {
if (++i < n) {
let uidlist = members.slice(i * PUSH_BATCH, (i + 1) * PUSH_BATCH - 1);
let uids: { uid: string, sid: string }[] = [];
for (let uid of uidlist) {
uids.push(channel.getMember(uid));
}
sendMessageToUsers(route, resResult(STATUS.SUCCESS, data), uids);
} else {
clearInterval(interval);
}
}, PUSH_INTERVAL);
} else {
channel.pushMessage(route, resResult(STATUS.SUCCESS, data));
}
}
// 抽下下来pushMessage收束
export function sendMessageToChannel(channel: Channel, route: string, data: any) {
infologger.debug(`pushMessage route: ${route} data: ${data} members: ${channel.getMembers().join()}`);
channel.pushMessage(route, data);
}
export function delTeamChannel(teamCode: string) {
let channel = pinus.app.get('channelService').getChannel(teamCode);
if(!!channel) channel.destroy();
}
export function removeFromTeamChannel(teamCode: string, roleId: string) {
let channel = pinus.app.get('channelService').getChannel(teamCode);
if(!channel) return null;
let users: string[] = channel.getMembers();
if (users.indexOf(roleId) !== -1) {
channel.removeMember(roleId);
}
}