Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // package.json
- {
- "name": "Serwer SWDR",
- "version": "0.0.1",
- "description": "Serwer obsługujący ruch w symulatorze Train Driver 2",
- "author": "Marcin, Xarrek, Radmorek",
- "license": "",
- "dependencies": {
- "body-parser": "1.17.1",
- "socket.io": "2.0.1",
- "mysql": "2.13.0"
- }
- }
- // server.js
- 'use strict';
- const app = require('http').createServer(handler)
- const io = require('socket.io')(app);
- const mysql = require('mysql');
- const crypto = require('crypto')
- const sock_port = 5424; // port potwierdzony przez uetama
- const connection = mysql.createConnection({
- host : 'localhost',
- user : 'swdr',
- password : '< MySQL password >',
- database : '<your database name>'
- });
- // łączenie z DB
- /*connection.connect(function(err){
- if(!err) {
- console.log("Database is connected");
- } else {
- console.error("Error connecting database: " + err.stack);
- return;
- }
- });*/
- // włączenie serwera
- app.listen(sock_port);
- // HTTP
- function handler (req, res) {
- req.on('error', function(err) {
- console.error("Request error: " + err.stack);
- });
- if(req.headers.pass === "TD2_krmnbi6t") {
- switch (req.headers.action) {
- case "message":
- // wyślij do rooma (jak na razie tylko europe, bo SWDR.cs nie rozrórznia serwerów) wiadomośc od użytkownika
- // nagłówki: 'login':BackendCommunication.userId 'tresc':tekst wiadomości
- res.end("message!");
- break;
- case "crash_train":
- // wyślij do rooma (-||-) wiadomoś o crashu
- // nagłówki: 'nr':numer pociągu
- break;
- case "del_train":
- // usuwa z tabeli 'td_pociagi' pociąg
- // nagłówki: 'nr':numer pociągu
- break;
- case "eap_pwl":
- // włączenie przeciwwtórności liniowej (czytaj: podanie semafora)
- // nagłówki: 'sc':kod scenerii, 'sz':szlak, 'tor':tor
- break;
- case "eap_zaj":
- // wyjechanie pociągu na szlak
- // -||-
- break;
- case "eap_ko":
- // wjazd pociągu na stacje
- // -||-
- break;
- default:
- }
- }
- else {
- res.writeHead(200);
- res.end('Authentication failed');
- }
- //console.log(req.headers); // test
- //console.log(req.body);
- res.writeHead(200);
- res.end();
- }
- // SOCKET
- io.on('connection', function (socket) {
- // załorzenia: każde nowe połączenie dołącza do roomu global
- // użytkownik loguje się na serwer oraz na stacje, wtedy dołącza do odpowiedniego roomu np. room "Europe" (tylko dla zalogowanych)
- // wiadomości emitowane mogą byc do wszystkich, wszystkich w roomie, albo konkretnego użytkownika
- // serwer wysyła jak i otrzymuje komendy w formacie Komenda, <Dane w JSON>
- // np. addRJ, delRJ, sendPublicMessage, sendPrivateMessage, sendBSCommand, setStationStatus, sendTD2Message
- // ta sama nazwa komendy w komunikacji Serwer->Klient jak i Klient-Serwer bo np. newRJ w przyp. Serwer-Klient oznacza dopisz do listy RJ, a w przp. Klient-Serwer oznacza "wygenerowałem RJ, dodaj je"
- // przykładowa komunikacja:
- // Klient1-Serwer: addRJ, { stacja1....... }
- // Serwer-Klient1: addRJ, { stacja1....... }
- // Serwer-Klient2: addRJ, { stacja1....... }
- // Serwer-KlientN: addRJ, { stacja1....... }
- // (...)
- socket.on('login',function(data){
- data.login = data.login.trim();
- if(data.login !== "" && typeof data.login != 'undefined' && data.password !== "" && typeof data.password != 'undefined' ) {
- connection.query('SELECT password FROM table WHERE name = ?', [data.name], function(error, rows, fields) {
- if(error) throw error;
- var hash = crypto.createHash('sha1');
- hash = crypto.update(data.name);
- if(hash === rows.password) {
- // log in
- } else {
- // emit to user: authentication failed
- }
- });
- } else {
- console.error("Password or login can't be empty (or undefined)");
- }
- });
- socket.on('disconnect', function () {
- });
- socket.on('test', function () {
- socket.broadcast.emit('test', "this is a test");
- });
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement