import { redisClient } from "../db/redis.js"; import config from "../config/index.js"; class Publisher { publish = (channel, type, value)=>{ const message = type == null ? value : value == null ? { type: type, body: null } : { type: type, body: value }; redisClient.publish(config.redis.prefix ?? config.host, JSON.stringify({ channel: channel, message: message })); }; publishInternalEvent = (type, value)=>{ this.publish("internal", type, typeof value === "undefined" ? null : value); }; publishUserEvent = (userId, type, value)=>{ this.publish(`user:${userId}`, type, typeof value === "undefined" ? null : value); }; publishBroadcastStream = (type, value)=>{ this.publish("broadcast", type, typeof value === "undefined" ? null : value); }; publishMainStream = (userId, type, value)=>{ this.publish(`mainStream:${userId}`, type, typeof value === "undefined" ? null : value); }; publishDriveStream = (userId, type, value)=>{ this.publish(`driveStream:${userId}`, type, typeof value === "undefined" ? null : value); }; publishNoteStream = (noteId, type, value)=>{ const object = { id: noteId, body: value }; this.publish(`noteStream:${noteId}`, type, object); }; publishNoteUpdatesStream = (type, value)=>{ this.publish('noteUpdatesStream', type, value); }; publishChannelStream = (channelId, type, value)=>{ this.publish(`channelStream:${channelId}`, type, typeof value === "undefined" ? null : value); }; publishUserListStream = (listId, type, value)=>{ this.publish(`userListStream:${listId}`, type, typeof value === "undefined" ? null : value); }; publishAntennaStream = (antennaId, type, value)=>{ this.publish(`antennaStream:${antennaId}`, type, typeof value === "undefined" ? null : value); }; publishMessagingStream = (userId, otherpartyId, type, value)=>{ this.publish(`messagingStream:${userId}-${otherpartyId}`, type, typeof value === "undefined" ? null : value); }; publishGroupMessagingStream = (groupId, type, value)=>{ this.publish(`messagingStream:${groupId}`, type, typeof value === "undefined" ? null : value); }; publishMessagingIndexStream = (userId, type, value)=>{ this.publish(`messagingIndexStream:${userId}`, type, typeof value === "undefined" ? null : value); }; publishNotesStream = (note)=>{ this.publish("notesStream", null, note); }; publishAdminStream = (userId, type, value)=>{ this.publish(`adminStream:${userId}`, type, typeof value === "undefined" ? null : value); }; publishReversiStream = (userId, type, value)=>{ this.publish(`reversiStream:${userId}`, type, typeof value === "undefined" ? null : value); }; publishReversiGameStream = (gameId, type, value)=>{ this.publish(`reversiGameStream:${gameId}`, type, typeof value === "undefined" ? null : value); }; publishShogiStream = (userId, type, value)=>{ this.publish(`shogiStream:${userId}`, type, typeof value === "undefined" ? null : value); }; publishShogiGameStream = (gameId, type, value)=>{ this.publish(`shogiGameStream:${gameId}`, type, typeof value === "undefined" ? null : value); }; } const publisher = new Publisher(); export default publisher; export const publishInternalEvent = publisher.publishInternalEvent; export const publishUserEvent = publisher.publishUserEvent; export const publishBroadcastStream = publisher.publishBroadcastStream; export const publishMainStream = publisher.publishMainStream; export const publishDriveStream = publisher.publishDriveStream; export const publishNoteStream = publisher.publishNoteStream; export const publishNotesStream = publisher.publishNotesStream; export const publishNoteUpdatesStream = publisher.publishNoteUpdatesStream; export const publishChannelStream = publisher.publishChannelStream; export const publishUserListStream = publisher.publishUserListStream; export const publishAntennaStream = publisher.publishAntennaStream; export const publishMessagingStream = publisher.publishMessagingStream; export const publishGroupMessagingStream = publisher.publishGroupMessagingStream; export const publishMessagingIndexStream = publisher.publishMessagingIndexStream; export const publishAdminStream = publisher.publishAdminStream; export const publishReversiStream = publisher.publishReversiStream; export const publishReversiGameStream = publisher.publishReversiGameStream; export const publishShogiStream = publisher.publishShogiStream; export const publishShogiGameStream = publisher.publishShogiGameStream;