/
app.js
133 lines (101 loc) · 3.7 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
122
123
124
125
126
127
128
129
130
131
132
133
let express = require('express')
var router = express.Router();
let request = require('request') // "Request" library
let querystring = require('querystring')
let cookieParser = require('cookie-parser')
var cookieSession = require('cookie-session')
const ENV = process.env.ENV || "development";
const knexConfig = require("./knexfile");
const knex = require("knex")(knexConfig[ENV]);
const morgan = require('morgan');
const knexLogger = require('knex-logger');
require('dotenv').config()
let app = express()
app.set('view engine', 'ejs');
let PORT = process.env.PORT || 8080
let client_id = process.env.clientID // Your client id
let client_secret = process.env.clientSecret; // Your secret
let redirect_uri = `https://spotifytuner.herokuapp.com/spotify/callback` // Your redirect uri
let app_uri = `https://spotifytuner.herokuapp.com`
app.use(express.static(__dirname + '/public'))
.use(cookieParser());
const cors = require('cors');
app.use(cors());
app.options('*', cors());
// var allowCrossDomain = function(req, res, next) {
// res.Header('Access-Control-Allow-Origin', "http://spotifytuner.herokuapp.com");
// res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
// res.header('Access-Control-Allow-Headers', 'Content-Type');
// res.header('Access-Control-Allow-Credentials', true);
// next();
// }
// app.use(allowCrossDomain)
app.use(morgan('dev'));
app.use(cookieSession({
name: 'session',
keys: ['userId']
}))
app.set('trust proxy', 1) // trust first proxy
const DataHelpers = require("./lib/data-helpers.js")(knex);
const spotifyRoutes = require("./routes/spotify");
const userRoutes = require("./routes/users");
const trackRoutes = require("./routes/tracks");
const artistRoutes = require("./routes/artists");
const absArtistRoutes = require("./routes/absArtists");
app.use("/spotify", spotifyRoutes(DataHelpers));
app.use("/users", userRoutes(DataHelpers));
app.use("/tracks", trackRoutes(DataHelpers));
app.use("/artists", artistRoutes(DataHelpers));
app.use("/absArtists", absArtistRoutes(DataHelpers))
app.listen(PORT, () => { //listen on the port 8080 and let node know server started running
console.log(`Example listening on port ${PORT}`);
});
const SocketServer = require('ws').Server;
const uuidv1 = require('uuid/v1');
const messageParse = require('./active-server/messageParse.js')
const db = require('./active-server/ActivePlaylistsDB.js')
const http = require('http');
const server = http.createServer(app)
.listen(8080, () => console.log(`Listening on ${ PORT }`));
const wss = new SocketServer({ server });
const sendUpdate = (callback) => {
db.updateRoomData(sockets, callback)
}
wss.broadcast = function broadcast(data, reciever, type, error, ws, callback) {
message = {
reciever: reciever,
type: type,
data: data,
error: error
}
wss.clients.forEach(function each(client){
if(client.readyState === ws.OPEN){
client.send(JSON.stringify(message))
}
})
if(callback) {
sockets[ws.id] = callback()
sendUpdate(() => {
messageParse({type: "getPlaylists"}, ws, wss.broadcast)
})
}
}
wss.on('connection', (ws) => {
ws.id = uuidv1()
console.log("Client Connected: ", ws.id)
sockets[ws.id] = ws
ws.on('message', (data) => {
// console.log("recieved message")
// console.log(data)
messageParse(JSON.parse(data), sockets[ws.id], wss.broadcast)
})
// Set up a callback for when a client closes the socket. This usually means they closed their browser.
ws.on('close', () => {
console.log('Client disconnected id: ', ws.id)
messageParse("leaveRoom", ws, wss.broadcast)
delete sockets[ws.id]
sendUpdate(() => {
messageParse({type: "getPlaylists"}, ws, wss.broadcast)
})
});
});