const WebSocket = require('ws'); // Websocket Frame const sql = require('mysql'); // SQL frame const db = require('./bin/config/sql.json'); // SQL Config const net = require('net'); // TCP Connection const readline = require('readline'); // Console Input const colors = require('colors'); // Console Colours let config = require('./bin/config/server.json'); // Server Config // Socket let socket = require('./bin/classes/websocket'); // Requires Websocket Object let wss = socket(WebSocket, config); // Asignes Websocket //Classes let crypt = require('./bin/classes/decrypt'); // Cryption Class let IsJsonString = require('./bin/classes/IsJsonString'); // JSON Validator let listener = require('./bin/classes/listener'); // Event Listener // Database Definition var db_con = sql.createConnection({ host : db.host, user : db.user, password : db.pw, database : db.name }); // Console Input const rl = readline.createInterface({input: process.stdin, output: process.stdout}); wss.on('connection', (ws) => { ws.on('message', function incoming(data) { if(IsJsonString(data)){ let payload = JSON.parse(data); //console.log('WSS: ' + payload['event']); let events = [ {name:'login', function() {ws_login(payload, db_con, ws, crypt)}}, {name:'logout', function() {ws_logout(payload, db_con, ws)}}, ]; listener(events,payload.event); /** * logout: * Removes Session Key * and sends packet to redirect from the user area * ends connection * register: * User Folder Structure: * Usersroot(named like the user) I--> space (where files get stored) * I--> meta (Where user infos get stored) * Ends Connection * Database Oriented Data Management * getData * Sends Requested data * * Ends Connection * writeData * Wrights Data to the Database * Check if user id is given * Ends Connection * Physical Data management * updload * Takes Uploaded Data and places it in the Users Space * Ends Connection * download * Serves Requested Files from the Users Space * Ends Connection */ } }); }); let server = net.createServer((socket) => { socket.on('data', (data) => { if(IsJsonString(data)){ let payload = JSON.parse(data); console.log('TCP: ' + payload['event']); if(IsJsonString(data)){ let payload = JSON.parse(data); let events = [ {name:'login', function() { tcp_login(payload, db_con, socket, crypt) } }, {name:'test', function() { console.log('test 1111') } }, ]; listener(events,payload.event); } } }); }); // ======================================================================== // * The Console Input * // ======================================================================== rl.on('line', (input) => { //TODO: change all Console output to following Format console.log(colors.grey(`test ${colors.yellow("text")}`)); let messageArray = input.split(" "); let cmd = messageArray[0]; let args = messageArray.slice(0); console.log(args); switch(args[0].toLowerCase()){ case 'help': console.log(colors.grey('=================================== ') + colors.yellow('Help') + colors.grey(' ===================================')); console.log(colors.yellow('Help:') + colors.grey(' Shows a list of all avaiable Comamnds.')); console.log(colors.yellow('Shutdown:') + colors.grey(' shuts down the Server.')); console.log(colors.grey('============================================================================')); break; case 'shutdown': rl.question(colors.grey('Are you sure you want to shut down the Server?')+'\n'+colors.yellow('(Yes, y) = Yes, (No, n) = No: '), (reply) => { let answer = reply.toLowerCase(); //Askes if the Server should be shutdown if(answer === 'yes' || answer === 'y'){ process.exit(0); }else if(answer === 'no' || answer === 'n'){ return; }else{ return; } }); break; case 'maintance': let config = file.import('./bin/config/server.json'); switch(args[1]){ default: console.log(colors.grey(`Please Enter a Parameter you can use <${colors.yellow("enable")}, ${colors.yellow("disable")}, ${colors.yellow("current")}>`)); break; case 'disable': rl.question(colors.grey('Are you sure you want disable Maintance Mode?')+'\n'+colors.yellow('(Yes, y) = Yes, (No, n) = No: '), (reply) => { let answer = reply.toLowerCase(); //Askes if the Server should be shutdown if(answer === 'yes' || answer === 'y'){ config.maintance = 'true'; console.log(colors.green('Maintance Mode disabled')); file.save('./bin/config/server.json', config); }else if(answer === 'no' || answer === 'n'){ return; }else{ return; } file.save('./bin/config/server.json', config); }); break; case 'enable': rl.question(colors.grey('Are you sure you want disable Maintance Mode?')+'\n'+colors.yellow('(Yes, y) = Yes, (No, n) = No: '), (reply) => { let answer = reply.toLowerCase(); //Askes if the Server should be shutdown if(answer === 'yes' || answer === 'y'){ config.maintance = 'false'; console.log(colors.green('Maintance Mode disabled')); file.save('./bin/config/server.json', config); }else if(answer === 'no' || answer === 'n'){ return; }else{ return; } file.save('./bin/config/server.json', config); }); break; case 'current': if(config.maintance == 'true'){ console.log(colors.grey('Maintance Mode is ')+colors.yellow('Activated')); }else{ console.log(colors.grey('Maintance Mode is ')+colors.yellow('Deactivated')); } break; } break; default: console.log(colors.grey('Invalid Command.. Type ')+colors.yellow('Help')+colors.grey(', to get a list of avaiable Comamnds.')); break; } }); // ========================================= // * Starts Services with all needed ports * // ========================================= //Gets core-node Connections server.listen(1337, '127.0.0.1', () => { console.log(colors.grey('TCP Server online on Port: ') + colors.yellow(config.tcpserver)); console.log(colors.grey('WSS Server online on Port: ') + colors.yellow(config.websocket)); }); // ================================== // * Checks if the Port is avaiable * // * If Yes Run else Restart * // ================================== server.on('error', (e) => { if (e.code === 'EADDRINUSE') { console.log('Address in use, retrying...'); setTimeout(() => { server.close(); // Gets Server Connections server.listen(config.tcpserver, '127.0.0.1', () => { console.log('Server online on Port:' + config.tcpserver); }); }, 1000); } });