import {EnumMap} from "@onebro/oba-common"; import {Server,Socket,Namespace} from "socket.io"; export type SocketUser = {id:string;username:string;role:string;}; export type SocketUserMsg = {room?:string;username:string,message:string;}; export type SocketUserTyping = {isTyping:boolean;username:string;}; export type SocketEventName = "user_connected"|"user_disconnected"|"room"|"chat_message"|"info_message"|"typing"; export type SocketEventPayloadObj = EnumMap; export interface SocketEventPayloads extends SocketEventPayloadObj { user_connected:SocketUser; user_disconnected:SocketUser; room:string; chat_message:SocketUserMsg; info_message:SocketUserMsg; typing:SocketUserTyping;} export type SocketActionType = void|boolean|Namespace|Socket; export type SocketAction = (data:T) => SocketActionType|Promise; export type SocketActionCreator = (io:Server,s:Socket) => SocketAction; export type SocketEvent = {name:SocketEventName;action?:SocketActionCreator;}; export interface AppMasterSocketsConfig {events:SocketEvent[];} export interface AppMasterSocketsType extends Server {}