UNPKG

torinet

Version:
72 lines (57 loc) 2.32 kB
const io = require("socket.io-client"); const ip = require("ip"); const EventEmitter = require("events").EventEmitter; const aes256 = require("aes256"); function connect (login, password = "%NONE%", server, onServer, onSuccess, onFail) { console.log(`http://${server}:13785`) const socket = io(`http://${server}:13785`); const connectEmitter = new EventEmitter(); let localState = {}; socket.on("state", (state) => { localState = state; connectEmitter.emit("state", state); }); socket.on("newMessage", (message) => { connectEmitter.emit("message", message); }) socket.on("disconnect", () => { if (localState.next === ip.address()) { let newState = {...localState}; newState.connections = []; for (let connection of localState.connections) { if (connection.ip !== server) { newState.connections.push(connection); } } const server = require("./server")(newState.name, login, newState.password, newState); onServer(server); } else { connect(login, password, localState.next); } }); const ctx = { onState: (callback) => connectEmitter.on("state", (data) => callback(data)), onJoin: (callback) => socket.on("joined", (user) => callback(user)), onLeave: (callback) => socket.on("leave", (user) => callback(user)), onMessage: (callback) => { connectEmitter.on("message", (message) => { sender = message.sender; text = password !== "%NONE%" ? aes256.decrypt(password, message.text) : message.text; callback(sender, text); }) }, pushMessage: (text) => { if (password !== "%NONE%") { socket.emit("pushMessage", aes256.encrypt(password, text)) } else { socket.emit("pushMessage", text); } }, disconnect: () => socket.disconnect() }; socket.emit("auth", { name: login, password }); socket.on("checkAuth", (response) => response.success ? onSuccess(ctx) : onFail()); } module.exports = connect;