Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module.exports = {
- initDB: function() {
- // łączymy się z bazą w tej funkcji i tworzymy strukturę bazy danych
- con = mysql.createConnection({
- host: dbHost,
- user: dbUser,
- password: dbPassword
- });
- con = mysql.createConnection({
- host: dbHost,
- user: dbUser,
- password: dbPassword,
- database: "usersDB"
- });
- sql =
- "CREATE OR REPLACE TABLE users (name VARCHAR(30), surname VARCHAR(30), password VARCHAR(30), nick VARCHAR(30), type VARCHAR(30))";
- con.query(sql);
- var sql =
- "INSERT INTO users (name, surname, password,nick,type) VALUES ('Jan', 'Kowalski', 'jkowalski', 'jkowalski','doctor')";
- con.query(sql);
- var sql =
- "INSERT INTO users (name, surname, password,nick,type) VALUES ('Krzysztof', 'Nowak', 'knowak', 'knowak','doctor')";
- con.query(sql);
- var sql =
- "INSERT INTO users (name, surname, password,nick,type) VALUES ('Michal', 'Michalczewski', '75010568946', 'mmichalczewski','patient')";
- con.query(sql);
- var sql =
- "INSERT INTO users (name, surname, password,nick,type) VALUES ('Janusz', 'Taczek', '86032305111', 'jtaczek','patient')";
- con.query(sql);
- },
- getAllUsers: function() {
- // połączenie się z bazą i pobieranie użytkowników
- con = mysql.createConnection({
- host: dbHost,
- user: dbUser,
- password: dbPassword,
- database: "usersDB"
- });
- con.connect(function(error) {
- if (error) {
- throw error;
- }
- con.query("SELECT * FROM users", function(err, result, fields) {
- if (err) {
- console.log(`Fields: ${fields}`);
- console.log(`Error stacktrace: ${err}`);
- throw err;
- }
- console.log(`Fields: ${fields}`);
- console.log(`Result: ${result}`);
- records = result;
- });
- });
- },
- findByNick: function(nick, cb) {
- // 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
- process.nextTick(function() {
- for (var i = 0, len = records.length; i < len; i++) {
- var record = records[i];
- if (record.nick === nick) {
- return cb(null, record);
- }
- }
- return cb(null, null);
- });
- },
- BasicStrategyAuth: function() {
- // funkcja sprawdza, czy to co wpiszemy pokrywa się z jakimś loginem z bazy
- passport.use(
- new BasicStrategy(function(nick, password, cb) {
- Utils.findByNick(nick, function(err, user) {
- if (err) {
- return cb(err);
- }
- if (!user) {
- return cb(null, false);
- }
- if (user.password != password) {
- return cb(null, false);
- }
- return cb(null, user);
- });
- })
- );
- },
- startChat: function() {
- // główna funkcja chat-u. Tutaj wszystko się dzeje w trakcie pisania
- io.on("connection", function(socket) {
- socket.on("chat message", function(msg) {
- io.emit("chat message", msg);
- });
- });
- var usernames = {};
- var files = {}; // tablica na pliki
- io.sockets.on("connection", function(socket) {
- username = userNameAndSurname; // zapamiętanie imienia i nazwiska użytkownika, który się zalogował aby potem go wyświetlić w chacie
- socket.username = username;
- usernames[username] = username;
- socket.emit("updatechat", "SERVER", "you have connected"); // wyświetlona zostaję informacja, gdy ktoś się połączy
- socket.broadcast.emit(
- "updatechat",
- "SERVER",
- username + " has connected"
- ); // wyświetlona zostaje informacja dla wszystkich innych użytkowników chatu, że ktoś nowy przyszedł
- io.sockets.emit("updateusers", usernames); // aktualizujemy listę uczestników chatu, gdy ktoś nowy dojdzie
- socket.on("sendchat", function(message, attachmentName) {
- // funkcja wywoływana, gdy ktoś wyśle do naszego socketu nową wiadomość. Wtedy konwersacja jest aktualizowana o tą wiadomość
- if (message && message !== "") {
- var attachment = null;
- if (attachmentName && attachmentName !== "") {
- attachmentUrl = "http://localhost:3001/files/" + attachmentName;
- attachment = { url: attachmentUrl, name: attachmentName };
- }
- io.sockets.emit("updatechat", socket.username, message, attachment);
- }
- });
- socket.on("disconnect", function() {
- // obsługa, gdy użytkownik wyjdzie z chatu
- delete usernames[socket.username]; // usunięcie osoby z listy aktywnych
- io.sockets.emit("updateusers", usernames); // aktualizacja listy
- socket.broadcast.emit(
- "updatechat",
- "SERVER",
- socket.username + " has disconnected"
- ); // wyświetlenie informację
- });
- socket.on("startfileupload", function(data) {
- // przygotowujemy odbieraie pliku
- var name = data["name"];
- files[name] = {
- // wrzucamy informacje o pliku do tablicy wszystkich plików
- FileSize: data["Size"], // rozmiar pliku
- Data: "", // buffor na dane
- Downloaded: 0 // ile ściągnięto
- };
- var place = 0;
- try {
- // sprawdzamy czy plik o danej nazwie jest już w folderze
- var Stat = fs.statSync("files/" + name);
- if (Stat.isFile()) {
- // jak jest to sprawdzamy jaka jego część została pobrana
- files[name]["Downloaded"] = Stat.size;
- place = Stat.size / 524288;
- }
- } catch (er) {}
- fs.open("files/" + name, "a", 0755, function(err, fd) {
- if (err) {
- console.log(err);
- } else {
- files[name]["Handler"] = fd; // zapisujemy uchwyt do pliku, żeby móc do niego pisać później
- socket.emit("uploadfilepart", { place: place, percent: 0 }); // pobieramy następną paczkę z plikiem
- }
- });
- });
- socket.on("filepart", function(data) {
- var name = data["name"];
- files[name]["Downloaded"] += data["Data"].length;
- files[name]["Data"] += data["Data"];
- if (files[name]["Downloaded"] == files[name]["FileSize"]) {
- // sprawdzamy czy plik jest pobrany w pełni
- fs.write(
- files[name]["Handler"],
- files[name]["Data"],
- null,
- "Binary",
- function(err, Writen) {
- socket.emit("uploadfinished"); // sygnalizujemy, że pobraliśmy cały plik
- }
- );
- } else if (files[name]["Data"].length > 10485760) {
- // jeżeli bufor osiągnie 10MB to zapisujemy do systemu plików i czyścimy go
- fs.write(
- files[name]["Handler"],
- files[name]["Data"],
- null,
- "Binary",
- function(err, Writen) {
- files[name]["Data"] = ""; // resetujemy bufor
- // prosimy o kolejną paczkę
- var place = files[name]["Downloaded"] / 524288;
- var percent =
- (files[name]["Downloaded"] / files[name]["FileSize"]) * 100;
- socket.emit("uploadfilepart", { place: place, percent: percent });
- }
- );
- } else {
- // nie został pobrany cały ani bufor nie został przepełniony więc prosimy o kolejną paczkę
- var place = files[name]["Downloaded"] / 524288;
- var percent =
- (files[name]["Downloaded"] / files[name]["FileSize"]) * 100;
- socket.emit("uploadfilepart", { place: place, percent: percent });
- }
- });
- });
- http.listen(port, function() {
- // jaki port ma nasłuchiwać nasz serwer z chat-em
- console.log("Server started, listening on port " + port);
- });
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement