-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
121 lines (103 loc) · 3.68 KB
/
app.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
require('dotenv').config();
const express = require('express');
const fs = require('fs');
//const admin = require('firebase-admin');
const app = express();
const server = require('http').createServer(app);
const port = process.env.PORT || 3000
const io = require('socket.io')(server,{
cors: {
origin: "http://localhost:3000",
methods: ["GET", "POST"],
credentials:true
}
});
const path = require('path');
const cors = require('cors');
const NameChecker = require('./NameChecker');
const MentionChecker = require('./MentionChecker');
const User = require('./User');
const RouterLoader = require('./routerLoader');
const EntityExtractor = require('./entity-extractor');
//init view engine
app.set('view engine','pug');
//initialize name checker
const nameChecker=new NameChecker();
//init entity extractor
const entityExtractor = new EntityExtractor();
//init mention checker
const mentionChecker=new MentionChecker(nameChecker);
//add body-parser middleware
app.use(express.urlencoded({extended: true}));
app.use(express.json());
//set index page to static HTML file, using index.html
app.use(express.static(path.join(__dirname + '/public')))
//add CORS for processing req.body JSON
app.use(cors());
//load routes for REST API
const routerLoader = new RouterLoader(app);
routerLoader.loadRoutes();
io.on('connection',socket=>{
fs.readFile("log.txt","utf8",(err,data)=>{
if (err) {
console.error(err)
return
}
var dataArray=data.split("\n");
//console.log(`data from log.txt:`);
//console.log(dataArray);
io.to(socket.id).emit('previous_messages',dataArray);
});
//get 'chat' event from client and broadcast the message
socket.on('chat',message =>{
//message=mentionChecker.formatMentions(message);
var broadcastMessage;
if (socket.username === undefined){
broadcastMessage = message;
}
else{
broadcastMessage=`${socket.username}: ${message}`;
}
io.emit('chat',broadcastMessage);
entityExtractor.analyze(message)
.then(entities=>{
io.emit('entities',JSON.stringify(entities));
})
fs.appendFile("log.txt",`${broadcastMessage}\n`,function(err) {
if (err) throw err;
// if no error
//console.log("Data is appended to file successfully.");
});
});
//response to username update submission
//todo: refactor these socket.on() event handlers into their own functions
socket.on('submitUsername',(username)=>{
//check if username is already in use
if(nameChecker.getIDFromName(username)===null){
nameChecker.addIDAndName(socket.id,username);
if (socket.hasOwnProperty("username")){
io.emit('chat-config',`${socket.username} has changed their name to "${username}".`);
}
else{
io.emit('chat-config',`${username} is ready to chat.`)
}
socket.username=username;
io.to(socket.id).emit('username_update',`Username successfully changed to ${username}.`,username);
}
else{
console.log(`${username} is already in use`);
io.to(socket.id).emit('username_update',`"${username}" is already in use.`,null);
}
});
socket.on('disconnect',()=>{
if(nameChecker.getNameFromID(socket.id)!==null){
io.emit('chat-config',`${socket.username} has disconnected.`);
nameChecker.removeID(socket.id);
}
})
socket.on('login',(uid)=>{
})
})
server.listen(port, () => {
console.log(`Server running on port: ${port}`);
});