-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
120 lines (97 loc) · 3 KB
/
app.js
File metadata and controls
120 lines (97 loc) · 3 KB
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
/***********************************************************
* app.js
*
* Author: Lena Gieseke
*
* Date: December 2018
* Update: January 2021
*
* Purpose: Browser-based representation
* of word magnets on a fridge.
*
* Usage:
*
* Notes: SOLUTION
*
*********************************************************/
// Loading the modules
// TODO 1
const express = require('express');
// TODO 3a
const socketio = require('socket.io');
// TODO 10a
const mongoose = require('mongoose');
//Establish database connection
// TODO 10b
const pw = '3g@Xx%3wXJYjATi5#&Bp';
const pwURI = encodeURIComponent(pw);
const dbURL = 'mongodb+srv://jho-01:' + pwURI + '@mongocluster01.aecoh.mongodb.net/fridge_magnets?retryWrites=true&w=majority';
mongoose.connect(dbURL, {useNewUrlParser: true, useUnifiedTopology: true})
.then(() => console.log('Connection established with: ',dbURL ))
.catch(err => console.error('Unable to connect with the mongoDB server. Error: ', err.message));
// TODO 11
let MagnetSchema = new mongoose.Schema(
{
index: Number,
x: Number,
y: Number,
});
let Magnet = mongoose.model('magnet', MagnetSchema);
// APPLICATION ////////////////////////////////////////
// TODO 2
const port = process.env.PORT || 3000;
const app = express();
const server = app
.use(express.static('public'))
.listen(port, () => console.log(`Started server on port ${port}`));
// TODO 3b
const io = socketio(server);
//on = addEventListener
io.on('connection', socket =>
{
console.log('New client connected');
// TODO 13
socket.on('clientSetupReady', () =>
{
console.log('Client ready');
Magnet.find()
.then(docs =>
{
if(docs.length == 0)
{
// TODO 14
console.log('Init Database');
}
else
{
// TODO 17
console.log('Init Client');
}
})
.catch(err => console.error(err));
});
// TODO 7
socket.on('clientMagnetMove', (data) =>
{
console.log('Moved', data);
// TODO 8
socket.broadcast.emit('serverBroadcastMagnetMove', data);
// TODO 16
Magnet.findOne({index:Number(data.index)})
.then(docs =>
{
if(docs !== null) //update
{
docs.x = data.x;
docs.y = data.y;
docs.save();
} else {
let tmpMagnet = new Magnet(data);
tmpMagnet.save()
.then(doc => console.log('New Magnet Saved to db', doc))
.catch(err => console.error(err));
}
})
.catch(err => console.error(err));
});
});