Advertisement
Guest User

Untitled

a guest
May 25th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // package.json
  2.  
  3. {
  4.     "name": "Serwer SWDR",
  5.     "version": "0.0.1",
  6.     "description": "Serwer obsługujący ruch w symulatorze Train Driver 2",
  7.     "author": "Marcin, Xarrek, Radmorek",
  8.     "license": "",
  9.     "dependencies": {
  10.         "body-parser": "1.17.1",
  11.         "socket.io": "2.0.1",
  12.             "mysql": "2.13.0"
  13.     }
  14. }
  15.  
  16.  
  17. // server.js
  18. 'use strict';
  19.  
  20. const app   = require('http').createServer(handler)
  21. const io    = require('socket.io')(app);
  22. const mysql = require('mysql');
  23. const crypto = require('crypto')
  24.  
  25. const sock_port  = 5424; // port potwierdzony przez uetama
  26. const connection = mysql.createConnection({
  27.   host     : 'localhost',
  28.   user     : 'swdr',
  29.   password : '< MySQL password >',
  30.   database : '<your database name>'
  31. });
  32.  
  33. // łączenie z DB
  34. /*connection.connect(function(err){
  35. if(!err) {
  36.     console.log("Database is connected");
  37. } else {
  38.     console.error("Error connecting database: " + err.stack);
  39.     return;
  40. }
  41. });*/
  42.  
  43. // włączenie serwera
  44. app.listen(sock_port);
  45.  
  46. // HTTP
  47. function handler (req, res) {
  48.     req.on('error', function(err) {
  49.       console.error("Request error: " + err.stack);
  50.     });
  51.  
  52.     if(req.headers.pass === "TD2_krmnbi6t") {
  53.       switch (req.headers.action) {
  54.         case "message":
  55.           // wyślij do rooma (jak na razie tylko europe, bo SWDR.cs nie rozrórznia serwerów) wiadomośc od użytkownika
  56.           // nagłówki: 'login':BackendCommunication.userId 'tresc':tekst wiadomości
  57.           res.end("message!");
  58.           break;
  59.         case "crash_train":
  60.           // wyślij do rooma (-||-) wiadomoś o crashu
  61.           // nagłówki: 'nr':numer pociągu
  62.           break;
  63.         case "del_train":
  64.         // usuwa z tabeli 'td_pociagi' pociąg
  65.         // nagłówki: 'nr':numer pociągu
  66.           break;
  67.  
  68.         case "eap_pwl":
  69.         // włączenie przeciwwtórności liniowej (czytaj: podanie semafora)
  70.         // nagłówki: 'sc':kod scenerii, 'sz':szlak, 'tor':tor
  71.           break;
  72.         case "eap_zaj":
  73.         // wyjechanie pociągu na szlak
  74.         // -||-
  75.           break;
  76.         case "eap_ko":
  77.         // wjazd pociągu na stacje
  78.         // -||-
  79.           break;
  80.         default:
  81.  
  82.       }
  83.     }
  84.     else {
  85.       res.writeHead(200);
  86.       res.end('Authentication failed');
  87.     }
  88.  
  89.     //console.log(req.headers);  // test
  90.     //console.log(req.body);
  91.     res.writeHead(200);
  92.     res.end();
  93. }
  94.  
  95. // SOCKET
  96. io.on('connection', function (socket) {
  97.   // załorzenia: każde nowe połączenie dołącza do roomu global
  98.   // użytkownik loguje się na serwer oraz na stacje, wtedy dołącza do odpowiedniego roomu np. room "Europe" (tylko dla zalogowanych)
  99.   // wiadomości emitowane mogą byc do wszystkich, wszystkich w roomie, albo konkretnego użytkownika
  100.  
  101.   // serwer wysyła jak i otrzymuje komendy w formacie Komenda, <Dane w JSON>
  102.   // np. addRJ, delRJ, sendPublicMessage, sendPrivateMessage, sendBSCommand, setStationStatus, sendTD2Message
  103.   // 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"
  104.  
  105.   // przykładowa komunikacja:
  106.   // Klient1-Serwer: addRJ, { stacja1....... }
  107.   // Serwer-Klient1: addRJ, { stacja1....... }
  108.   // Serwer-Klient2: addRJ, { stacja1....... }
  109.   // Serwer-KlientN: addRJ, { stacja1....... }
  110.   // (...)
  111.  
  112.   socket.on('login',function(data){
  113.     data.login = data.login.trim();
  114.     if(data.login !== "" && typeof data.login != 'undefined' && data.password !== "" && typeof data.password != 'undefined' ) {
  115.       connection.query('SELECT password FROM table WHERE name = ?', [data.name], function(error, rows, fields) {
  116.         if(error) throw error;
  117.  
  118.         var hash = crypto.createHash('sha1');
  119.         hash = crypto.update(data.name);
  120.        
  121.         if(hash === rows.password) {
  122.           // log in
  123.         } else {
  124.           // emit to user: authentication failed
  125.         }
  126.       });
  127.     } else {
  128.       console.error("Password or login can't be empty (or undefined)");
  129.     }
  130.   });
  131.   socket.on('disconnect', function () {
  132.  
  133.   });
  134.  
  135.   socket.on('test', function () {
  136.      socket.broadcast.emit('test', "this is a test");
  137.   });
  138. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement