@ingjuego/kon-tools
v0.2.88
Published
Maneja las herramientas
Downloads
16
Maintainers
Readme
kon-tools-package
@ingjuego/kon-tools
Librería de componentes y hooks reusables de React Native compatible con Expo y JS puro/Node.js. Permite compartir datos y lógica entre clientes, incluyendo un carrito compartido en tiempo real vía WebSocket y utilidades para juegos en tiempo real con Socket.IO.
Estructura del proyecto
- components/: Componentes reusables (ej:
SharedCart) - hooks/: Hooks personalizados (ej:
useSharedCartWS) - models/: Tipos y modelos de datos
- src/: Módulo principal y exports
- example/: Proyecto de ejemplo para pruebas rápidas
Instalación
npm install @ingjuego/kon-toolsUso básico
En React Native/Expo
Importa y utiliza los componentes o hooks en tu app Expo:
import { SharedCart } from '@ingjuego/kon-tools/components/SharedCart';
// ...
<SharedCart url="ws://localhost:8080" />O usa el hook directamente:
import { useSharedCartWS } from '@ingjuego/kon-tools/hooks/useSharedCartWS';
const { cart, updateCart } = useSharedCartWS("ws://localhost:8080");En Node.js/JS puro (Socket.IO)
Puedes usar las clases GameServer y GameClient para juegos o apps en tiempo real:
const { GameServer, GameClient } = require('@ingjuego/kon-tools');
const { Server } = require('socket.io');
const httpServer = require('http').createServer();
const io = GameServer.createServer(httpServer);
const gameServer = new GameServer(io);
gameServer.createRoom('sala1');
// Cliente
const { io: ioClient } = require('socket.io-client');
const socket = ioClient('http://localhost:3000');
const client = new GameClient(socket);
client.joinRoom('sala1');Compartir carrito en tiempo real
El hook useSharedCartWS permite sincronizar el carrito entre todos los clientes conectados a un WebSocket propio. Puedes usar el componente SharedCart para una integración rápida.
Ejemplo de servidor WebSocket (Node.js)
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
let sharedCart = [];
wss.on('connection', ws => {
ws.send(JSON.stringify({ type: 'cart', items: sharedCart }));
ws.on('message', msg => {
const data = JSON.parse(msg);
if (data.type === 'updateCart') {
sharedCart = data.items;
wss.clients.forEach(client => {
if (client.readyState === WebSocket.OPEN) {
client.send(JSON.stringify({ type: 'cart', items: sharedCart }));
}
});
}
});
});Ejemplo de servidor Socket.IO (Node.js)
const { GameServer } = require('@ingjuego/kon-tools');
const { Server } = require('socket.io');
const httpServer = require('http').createServer();
const io = GameServer.createServer(httpServer);
const gameServer = new GameServer(io);
gameServer.createRoom('sala1');Scripts útiles
npm run build: Compila la libreríanpm run test: Ejecuta los testsnpm run lint: Linting del código
Publicación
- Asegúrate de tener una cuenta en npm.
- Actualiza la versión en
package.json. - Ejecuta
npm publishpara publicar la librería.
Compatibilidad multiplataforma
Esta librería detecta automáticamente el entorno y expone la API adecuada para React Native/Expo, Node.js y JS puro/web. Consulta la documentación y los ejemplos para cada caso de uso.
Contribuir
Pull requests y sugerencias son bienvenidas. Por favor, abre un issue para discutir cambios importantes.
Licencia
MIT
npm publish --access public
