UNPKG

paraemu

Version:

An working enviroment that provides a simplified interface for developers who want to fully parallelize node execution

105 lines (86 loc) 2.52 kB
(()=>{ "use strict"; const net = require('net'); const {Helper:{SendPacket, RegisterPacketReceiver}} = include( 'lib' ); module.exports = (envInfo)=>{ const {info: hostInfo, event} = envInfo; const conns = {}; event.on('--paraemu-e-network-event', (t_group, msg, srcSock)=>{ if( !t_group ){ for( let _groupId in conns ){ if( !conns.hasOwnProperty(_groupId) || srcSock === conns[_groupId] ){ continue; } SendPacket(conns[_groupId], msg); } return; } if( srcSock && srcSock.groupId === t_group ) return; if( !conns[t_group] ) return; SendPacket(conns[t_group], msg); }); net.createServer((socket)=>{ RegisterPacketReceiver(socket); socket.valid = false; socket .on('error', ()=>{ try{ socket.valid = false; } catch(e){} }) .on('message', (message)=>{ if( message.type === "paraemu-group-info" && !socket.valid ){ conns[socket.groupId = message.groupId] = socket; socket.valid = true; SendPacket(socket, { type: 'paraemu-group-info', groupId: event.groupId }); event.__emit(paraemu.SYSTEM_HOOK.PARAEMU_EVENT, { type: paraemu.SYSTEM_EVENT.CUSTOM_EVENT, sender: message.groupId, target: null, event: 'net-group-attach' }, socket); return; } if( !socket.valid ) return; switch( message.type ){ case paraemu.SYSTEM_EVENT.CUSTOM_EVENT: case paraemu.SYSTEM_EVENT.DELIVERY_EVENT: event.__emit(paraemu.SYSTEM_HOOK.PARAEMU_EVENT, message, socket); break; default: break; } }) .on('close', (hasError)=>{ socket.valid = false; if( socket.groupId ){ delete conns[socket.groupId]; event.__emit(paraemu.SYSTEM_HOOK.PARAEMU_EVENT, { type: paraemu.SYSTEM_EVENT.CUSTOM_EVENT, sender: socket.groupId, target: null, event: 'net-group-detach' }, socket); } }); }) .on('error', (err)=>{ event.__emit(paraemu.SYSTEM_HOOK.PARAEMU_EVENT, { type: paraemu.SYSTEM_EVENT.CUSTOM_EVENT, sender: event.groupId, target: event.groupId, event: 'net-connection-error', eventData: [err] }); }) .listen(hostInfo.port || 23400, hostInfo.host || '127.0.0.1', (e)=>{ event.__emit(paraemu.SYSTEM_HOOK.PARAEMU_EVENT, { type: paraemu.SYSTEM_EVENT.CUSTOM_EVENT, sender: event.groupId, target: event.groupId, event: 'net-connection-ready' }); }); }; })();