Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module.exports = {
  2.   initDB: function() {
  3.     // łączymy się z bazą w tej funkcji i tworzymy strukturę bazy danych
  4.     con = mysql.createConnection({
  5.       host: dbHost,
  6.       user: dbUser,
  7.       password: dbPassword
  8.     });
  9.     con = mysql.createConnection({
  10.       host: dbHost,
  11.       user: dbUser,
  12.       password: dbPassword,
  13.       database: "usersDB"
  14.     });
  15.     sql =
  16.       "CREATE OR REPLACE TABLE users (name VARCHAR(30), surname VARCHAR(30), password VARCHAR(30), nick VARCHAR(30), type VARCHAR(30))";
  17.     con.query(sql);
  18.     var sql =
  19.       "INSERT INTO users (name, surname, password,nick,type) VALUES ('Jan', 'Kowalski', 'jkowalski', 'jkowalski','doctor')";
  20.     con.query(sql);
  21.     var sql =
  22.       "INSERT INTO users (name, surname, password,nick,type) VALUES ('Krzysztof', 'Nowak', 'knowak', 'knowak','doctor')";
  23.     con.query(sql);
  24.     var sql =
  25.       "INSERT INTO users (name, surname, password,nick,type) VALUES ('Michal', 'Michalczewski', '75010568946', 'mmichalczewski','patient')";
  26.     con.query(sql);
  27.     var sql =
  28.       "INSERT INTO users (name, surname, password,nick,type) VALUES ('Janusz', 'Taczek', '86032305111', 'jtaczek','patient')";
  29.     con.query(sql);
  30.   },
  31.   getAllUsers: function() {
  32.     // połączenie się z bazą i pobieranie użytkowników
  33.     con = mysql.createConnection({
  34.       host: dbHost,
  35.       user: dbUser,
  36.       password: dbPassword,
  37.       database: "usersDB"
  38.     });
  39.  
  40.     con.connect(function(error) {
  41.       if (error) {
  42.         throw error;
  43.       }
  44.  
  45.       con.query("SELECT * FROM users", function(err, result, fields) {
  46.         if (err) {
  47.           console.log(`Fields: ${fields}`);
  48.           console.log(`Error stacktrace: ${err}`);
  49.           throw err;
  50.         }
  51.  
  52.         console.log(`Fields: ${fields}`);
  53.         console.log(`Result: ${result}`);
  54.         records = result;
  55.       });
  56.     });
  57.   },
  58.   findByNick: function(nick, cb) {
  59.     // sprawdzenie, czy któryś z loginów użytkowników z bazy pokrywa się w tym co zostało wpisane w okienku z logowania. Funkcja ta jest wywoływana w funkcji niżej
  60.     process.nextTick(function() {
  61.       for (var i = 0, len = records.length; i < len; i++) {
  62.         var record = records[i];
  63.         if (record.nick === nick) {
  64.           return cb(null, record);
  65.         }
  66.       }
  67.       return cb(null, null);
  68.     });
  69.   },
  70.   BasicStrategyAuth: function() {
  71.     // funkcja sprawdza, czy to co wpiszemy pokrywa się z jakimś loginem z bazy
  72.     passport.use(
  73.       new BasicStrategy(function(nick, password, cb) {
  74.         Utils.findByNick(nick, function(err, user) {
  75.           if (err) {
  76.             return cb(err);
  77.           }
  78.           if (!user) {
  79.             return cb(null, false);
  80.           }
  81.           if (user.password != password) {
  82.             return cb(null, false);
  83.           }
  84.           return cb(null, user);
  85.         });
  86.       })
  87.     );
  88.   },
  89.   startChat: function() {
  90.     // główna funkcja chat-u. Tutaj wszystko się dzeje w trakcie pisania
  91.     io.on("connection", function(socket) {
  92.       socket.on("chat message", function(msg) {
  93.         io.emit("chat message", msg);
  94.       });
  95.     });
  96.     var usernames = {};
  97.     var files = {}; // tablica na pliki
  98.     io.sockets.on("connection", function(socket) {
  99.       username = userNameAndSurname; // zapamiętanie imienia i nazwiska użytkownika, który się zalogował aby potem go wyświetlić w chacie
  100.       socket.username = username;
  101.       usernames[username] = username;
  102.       socket.emit("updatechat", "SERVER", "you have connected"); // wyświetlona zostaję informacja, gdy ktoś się połączy
  103.       socket.broadcast.emit(
  104.         "updatechat",
  105.         "SERVER",
  106.         username + " has connected"
  107.       ); // wyświetlona zostaje informacja dla wszystkich innych użytkowników chatu, że ktoś nowy przyszedł
  108.       io.sockets.emit("updateusers", usernames); // aktualizujemy listę uczestników chatu, gdy ktoś nowy dojdzie
  109.       socket.on("sendchat", function(message, attachmentName) {
  110.         // funkcja wywoływana, gdy ktoś wyśle do naszego socketu nową wiadomość. Wtedy konwersacja jest aktualizowana o tą wiadomość
  111.         if (message && message !== "") {
  112.           var attachment = null;
  113.           if (attachmentName && attachmentName !== "") {
  114.             attachmentUrl = "http://localhost:3001/files/" + attachmentName;
  115.             attachment = { url: attachmentUrl, name: attachmentName };
  116.           }
  117.           io.sockets.emit("updatechat", socket.username, message, attachment);
  118.         }
  119.       });
  120.  
  121.       socket.on("disconnect", function() {
  122.         // obsługa, gdy użytkownik wyjdzie z chatu
  123.         delete usernames[socket.username]; // usunięcie osoby z listy aktywnych
  124.         io.sockets.emit("updateusers", usernames); // aktualizacja listy
  125.         socket.broadcast.emit(
  126.           "updatechat",
  127.           "SERVER",
  128.           socket.username + " has disconnected"
  129.         ); // wyświetlenie informację
  130.       });
  131.  
  132.       socket.on("startfileupload", function(data) {
  133.         // przygotowujemy odbieraie pliku
  134.         var name = data["name"];
  135.         files[name] = {
  136.           // wrzucamy informacje o pliku do tablicy wszystkich plików
  137.           FileSize: data["Size"], // rozmiar pliku
  138.           Data: "", // buffor na dane
  139.           Downloaded: 0 // ile ściągnięto
  140.         };
  141.         var place = 0;
  142.         try {
  143.           // sprawdzamy czy plik o danej nazwie jest już w folderze
  144.           var Stat = fs.statSync("files/" + name);
  145.           if (Stat.isFile()) {
  146.             // jak jest to sprawdzamy jaka jego część została pobrana
  147.             files[name]["Downloaded"] = Stat.size;
  148.             place = Stat.size / 524288;
  149.           }
  150.         } catch (er) {}
  151.         fs.open("files/" + name, "a", 0755, function(err, fd) {
  152.           if (err) {
  153.             console.log(err);
  154.           } else {
  155.             files[name]["Handler"] = fd; // zapisujemy uchwyt do pliku, żeby móc do niego pisać później
  156.             socket.emit("uploadfilepart", { place: place, percent: 0 }); // pobieramy następną paczkę z plikiem
  157.           }
  158.         });
  159.       });
  160.       socket.on("filepart", function(data) {
  161.         var name = data["name"];
  162.         files[name]["Downloaded"] += data["Data"].length;
  163.         files[name]["Data"] += data["Data"];
  164.         if (files[name]["Downloaded"] == files[name]["FileSize"]) {
  165.           // sprawdzamy czy plik jest pobrany w pełni
  166.           fs.write(
  167.             files[name]["Handler"],
  168.             files[name]["Data"],
  169.             null,
  170.             "Binary",
  171.             function(err, Writen) {
  172.               socket.emit("uploadfinished"); // sygnalizujemy, że pobraliśmy cały plik
  173.             }
  174.           );
  175.         } else if (files[name]["Data"].length > 10485760) {
  176.           // jeżeli bufor osiągnie 10MB to zapisujemy do systemu plików i czyścimy go
  177.           fs.write(
  178.             files[name]["Handler"],
  179.             files[name]["Data"],
  180.             null,
  181.             "Binary",
  182.             function(err, Writen) {
  183.               files[name]["Data"] = ""; // resetujemy bufor
  184.  
  185.               // prosimy o kolejną paczkę
  186.               var place = files[name]["Downloaded"] / 524288;
  187.               var percent =
  188.                 (files[name]["Downloaded"] / files[name]["FileSize"]) * 100;
  189.               socket.emit("uploadfilepart", { place: place, percent: percent });
  190.             }
  191.           );
  192.         } else {
  193.           // nie został pobrany cały ani bufor nie został przepełniony więc prosimy o kolejną paczkę
  194.           var place = files[name]["Downloaded"] / 524288;
  195.           var percent =
  196.             (files[name]["Downloaded"] / files[name]["FileSize"]) * 100;
  197.           socket.emit("uploadfilepart", { place: place, percent: percent });
  198.         }
  199.       });
  200.     });
  201.  
  202.     http.listen(port, function() {
  203.       // jaki port ma nasłuchiwać nasz serwer z chat-em
  204.       console.log("Server started, listening on port " + port);
  205.     });
  206.   }
  207. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement