-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
150 lines (125 loc) · 4.04 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//import Set from "core-js-pure/features/set";
// Setup basic express server
var express = require('express');
var app = express();
var path = require('path');
const quirc = require("node-quirc");
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
var allMessages = [];
//file reading
const fs = require('fs');
const neatCsv = require('neat-csv');
const { parse } = require('path');
const msFilePath = path.join(__dirname, 'middle_school.csv');
server.listen(port, () => {
console.log('Server listening at port %d', port);
});
let classData = {
'5': [],
'6': [],
'7': [],
'8': [],
};
fs.readFile(msFilePath, async (error, data) => {
if (error) {
return console.log('error reading middle school roster');
}
const parsedData = await neatCsv(data);
for (let student of parsedData) {
classData[student['Grade']].push(student['First Name'] + ' ' + student['Last Name']);
}
});
// Routing
app.use(express.static(path.join(__dirname, 'public')));
// Chatroom
var numUsers = 0;
io.on('connection', (socket) => {
let addedUser = false;
// when the client emits 'new message', this listens and executes
socket.on('new message', (data) => {
allMessages.push({
username: socket.username,
message: data,
})
// we tell the client to execute 'new message'
socket.broadcast.emit('new message', {
username: socket.username,
message: data
});
});
// when the client emits 'add user', this listens and executes
socket.on('add user', (username) => {
if (addedUser) return;
// we store the username in the socket session for this client
socket.username = username;
++numUsers;
addedUser = true;
socket.emit('login', {
numUsers: numUsers,
allMessages: allMessages,
classData: classData[username],
});
// echo globally (all clients) that a person has connected
socket.broadcast.emit('user joined', {
username: socket.username,
numUsers: numUsers,
});
});
// when the client emits 'typing', we broadcast it to others
socket.on('typing', () => {
socket.broadcast.emit('typing', {
username: socket.username
});
});
// when the client emits 'stop typing', we broadcast it to others
socket.on('stop typing', () => {
socket.broadcast.emit('stop typing', {
username: socket.username
});
});
socket.on('student arrived', (img) => {
console.log("student arrived recieved");
let buffer = Buffer.from(img.split(',')[1], 'base64');
quirc.decode(buffer).then((codes) => {
// do something with codes.
let name = codes[0].data.toString('utf8');
console.log(name);
let message = {
username: "Student Arrived",
message: name,
};
allMessages.push(message);
socket.broadcast.emit('new message', message);
socket.emit('qr read', name);
}).catch((err) => {
console.error(`decode failed: ${err.message}`);
socket.emit('qr failed')
});
})
socket.on('student arrived manual', (data) => {
let message = {
username: "Student Arrived",
message: data,
};
allMessages.push(message);
console.log("Sending student", data);
socket.broadcast.emit('new message', message)
})
socket.on('clear all messages', () => {
console.log("clearing all students");
allMessages = []
})
// when the user disconnects.. perform this
socket.on('disconnect', () => {
if (addedUser) {
--numUsers;
// echo globally that this client has left
socket.broadcast.emit('user left', {
username: socket.username,
numUsers: numUsers
});
}
});
});