https://github.com/allnulled/multisocket
Manage socket.io and socket.io-client communications and events from the same JavaScript class.
https://github.com/allnulled/multisocket
Last synced: about 1 year ago
JSON representation
Manage socket.io and socket.io-client communications and events from the same JavaScript class.
- Host: GitHub
- URL: https://github.com/allnulled/multisocket
- Owner: allnulled
- Created: 2024-12-18T17:44:40.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-18T17:48:38.000Z (over 1 year ago)
- Last Synced: 2025-03-30T05:32:55.016Z (about 1 year ago)
- Language: JavaScript
- Size: 4.88 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# multisocket
Manage socket.io and socket.io-client communications and events from the same JavaScript class.
## Installation
```sh
npm i -s @allnulled/multisocket
```
## Usage
```js
const Multisocket = require('@allnulled/multisocket');
const $msServer = new Multisocket(true, 3000);
Configure_server: {
$msServer.server.register('test', (data, $eventClient) => {
$eventClient.send({
type: 'response',
message: 'Respuesta del servidor'
});
});
}
const $msClient = new Multisocket(false, 3000, 'http://localhost:3000');
Configure_client: {
$msClient.client.register('response', (data) => {
console.log('Cliente recibió:', data);
});
}
Hello: {
$msClient.client.send({
type: 'test',
message: '¡Hola servidor!'
});
}
```
## API
```js
class MultisocketClient {
constructor(multisocket) {
this.multisocket = multisocket;
this.events = {};
}
send(data, headers = {}) {
this.multisocket.socketClient.emit("MultisocketEvent", { data, headers, });
}
register(eventType, dispatcher) {
if(!(eventType in this.events)) {
this.events[eventType] = [];
}
this.events[eventType].push(dispatcher);
}
dispatch(eventItem) {
if(typeof eventItem === "string") {
console.log("MultisocketEvent on client of type message: " + eventItem);
} else {
// @TODO: complete
if (eventItem && eventItem.data) {
const eventType = eventItem.data.type;
if (eventType in this.events) {
this.events[eventType].forEach(dispatcher => dispatcher.call(this, eventItem.data));
}
}
}
}
}
class MultisocketServer {
constructor(multisocket) {
this.multisocket = multisocket;
this.events = {};
}
send(data, headers = {}) {
this.multisocket.socketClient.emit("MultisocketEvent", { data, headers, });
}
register(eventType, dispatcher) {
if(!(eventType in this.events)) {
this.events[eventType] = [];
}
this.events[eventType].push(dispatcher);
}
dispatch(eventItem, socketClient) {
if(typeof eventItem === "string") {
console.log("MultisocketEvent on server of type message: " + eventItem);
} else {
// @TODO: complete
if (eventItem && eventItem.data) {
const eventType = eventItem.data.type;
if (eventType in this.events) {
this.events[eventType].forEach(dispatcher => dispatcher.call(this, eventItem.data, socketClient));
}
}
}
}
}
class MultisocketServerEventClient {
constructor(multisocket, serverEventClient) {
this.multisocket = multisocket;
this.events = {};
this.client = serverEventClient;
}
send(data, headers = {}) {
this.client.emit("MultisocketEvent", { data, headers, });
}
register(eventType, dispatcher) {
if(!(eventType in this.events)) {
this.events[eventType] = [];
}
this.events[eventType].push(dispatcher);
}
dispatch(eventItem, socketClient) {
if(typeof eventItem === "string") {
console.log("MultisocketEvent on server of type message: " + eventItem);
} else {
// @TODO: complete
if (eventItem && eventItem.data) {
const eventType = eventItem.data.type;
if (eventType in this.events) {
this.events[eventType].forEach(dispatcher => dispatcher.call(this, eventItem.data, socketClient));
}
}
}
}
}
class Multisocket {
constructor(isServer = false, port = 3000, serverUrl = '') {
this.isServer = isServer;
this.port = port;
this.serverUrl = serverUrl;
// Propiedades para los objetos de servidor HTTP, servidor Socket.io y cliente Socket.io
this.httpServer = null;
this.socketServer = null;
this.socketClient = null;
this.client = new MultisocketClient(this);
this.server = new MultisocketServer(this);
if (this.isServer) {
this.startServer();
} else {
this.startClient();
}
}
// Inicia el servidor socket.io
startServer() {
this.httpServer = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Servidor en ejecución');
});
this.socketServer = socketIo(this.httpServer);
this.socketServer.on('connection', (socket) => {
console.log('Cliente conectado');
socket.on('MultisocketEvent', (data) => {
console.log('Mensaje del cliente:', data);
const temporaryClient = new MultisocketServerEventClient(this, socket);
this.server.dispatch(data, temporaryClient);
});
socket.emit('MultisocketEvent', '¡Hola desde el servidor!');
socket.on('disconnect', () => {
console.log('Cliente desconectado');
});
});
this.httpServer.listen(this.port, () => {
console.log(`Servidor escuchando en http://localhost:${this.port}`);
});
}
// Inicia el cliente socket.io
startClient() {
this.socketClient = ioClient(this.serverUrl);
this.socketClient.on('connect', () => {
console.log('Conectado al servidor');
this.socketClient.emit('MultisocketEvent', '¡Hola desde el cliente!');
});
this.socketClient.on('MultisocketEvent', (data) => {
console.log('Mensaje del servidor:', data);
this.client.dispatch(data);
});
this.socketClient.on('connect_error', (err) => {
console.error('Error de conexión:', err);
});
}
}
Multisocket.default = Multisocket;
module.exports = Multisocket;
```