@rxap/nest-socket-io-client
Version:
This package provides a NestJS module for integrating a Socket.IO client. It offers a client proxy service and a provider for managing the Socket.IO client connection, allowing NestJS applications to easily interact with Socket.IO servers.
63 lines (62 loc) • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SocketIoClientProxyService = void 0;
const tslib_1 = require("tslib");
const common_1 = require("@nestjs/common");
const microservices_1 = require("@nestjs/microservices");
const crypto_1 = require("crypto");
const socket_io_client_provider_1 = require("./socket-io-client.provider");
let SocketIoClientProxyService = class SocketIoClientProxyService extends microservices_1.ClientProxy {
async connect() {
this.client.getSocket();
this.logger.debug('connect client proxy', 'SocketIoClientProxyService');
}
async close() {
this.client.getSocket().disconnect();
this.logger.debug('connect client proxy', 'SocketIoClientProxyService');
}
/**
* this method use when you use SocketIoClientProxyService.emit
* @param packet
* @returns
*/
async dispatchEvent(packet) {
this.client.getSocket().emit(packet.pattern, packet.data);
return;
}
/**
* this method will be call when use SocketIoClientProxyService.send
* can be use to implement request-response
* @param packet
* @param callback
* @returns
*/
publish(packet, callback) {
this.logger.debug(`publish to pattern '${packet.pattern}'`, 'SocketIoClientProxyService');
this.logger.verbose(`with data: ` + JSON.stringify(packet.data, undefined, 2), 'SocketIoClientProxyService');
const event = (0, crypto_1.randomBytes)(64).toString('hex');
const socket = this.client.getSocket().on(event, (data) => {
callback({ response: data });
});
this.client.getSocket()
.emit(packet.pattern, {
data: packet.data,
event,
});
return () => socket.off(event, () => {
this.logger.log('socket off', 'SocketIoClientProxyService');
});
}
};
exports.SocketIoClientProxyService = SocketIoClientProxyService;
tslib_1.__decorate([
(0, common_1.Inject)(common_1.Logger),
tslib_1.__metadata("design:type", common_1.Logger)
], SocketIoClientProxyService.prototype, "logger", void 0);
tslib_1.__decorate([
(0, common_1.Inject)(socket_io_client_provider_1.SocketIoClientProvider),
tslib_1.__metadata("design:type", socket_io_client_provider_1.SocketIoClientProvider)
], SocketIoClientProxyService.prototype, "client", void 0);
exports.SocketIoClientProxyService = SocketIoClientProxyService = tslib_1.__decorate([
(0, common_1.Injectable)()
], SocketIoClientProxyService);