1
0
Fork 0
cc-server-parent/packages/ws/src/decorators.ts

41 lines
1.5 KiB
TypeScript

import { inject, injectable, decorate } from "inversify";
import { interfaces } from './interfaces'
import { METADATA_KEY } from './constants'
import { getNamespaceListenerMetadata, getNamespacesMetadata } from './utils'
/**
* Socket.io Namespace
* @param name namespace name default is '/'
* @param middleware middleware array
*/
export function namespace(name?: string, ...middleware: interfaces.Middleware[]) {
return function(target: any) {
let currentMetadata: interfaces.NamespaceMetadata = {
name: name || '/',
middleware: middleware,
target: target
};
decorate(injectable(), target);
Reflect.defineMetadata(METADATA_KEY.namespace, currentMetadata, target);
const previousMetadata: interfaces.NamespaceMetadata[] = getNamespacesMetadata();
Reflect.defineMetadata(METADATA_KEY.namespace, [currentMetadata, ...previousMetadata], Reflect);
};
}
/**
* Socket.io listner
* @param name event name
*/
export function listener(name?: string, ...middleware: interfaces.ListenerMiddleware[]) {
return function(target: any, key: string, value: any) {
let currentMetadata: interfaces.ListenerMetadata = {
name: name || key,
middleware: middleware,
key: key,
target: target
};
const previousMetadata: interfaces.ListenerMetadata[] = getNamespaceListenerMetadata(target)
Reflect.defineMetadata(METADATA_KEY.listener, [currentMetadata, ...previousMetadata], target.constructor);
};
}