-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.js
123 lines (83 loc) · 3.48 KB
/
main.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
//development functions:
//for fun
global.thisLine = () => {
const e = new Error();
const regex = /\((.*):(\d+):(\d+)\)$/
const match = regex.exec(e.stack.split("\n")[2]);
return ":" + match[2];
}
global.echo = (filename, ...objects) => {
let file = filename.replace(__dirname, "");
console.log(file + " ", ...objects);
};
//end development functions
const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
const bodyParser = require('body-parser');
//multer
import storage from './src/multer-storage';
const multer = require('multer');
const upload = multer({ storage: storage(multer) });
require('dotenv').config();
import expressAdapter from './src/express-callback';
import socketAdapter from './src/socket-callback';
//socket controllers
import { listPropById } from './src/socket-controllers/prop';
//controllers
import { listSceneProps, postPropBackground, listNotActiveProps, postSceneProps, postPropModel } from './src/controllers/prop';
import { listSessions, postSession, listActiveSession, putSession } from './src/controllers/session';
import { postScene, listAllScenes } from './src/controllers/scene';
import { listAllUsers, postUser } from './src/controllers/user';
import { listHeartbeat, postHeartbeat } from './src/controllers/heartbeat';
app.use(express.static(`${process.cwd()}/frontend/angular/dist/HU3Deck`));
app.use(express.static(`${process.cwd()}/frontend/vr`));
app.use(bodyParser.urlencoded({ extended: true }));
//session
app.get('/sessions/:id', expressAdapter(listSessions));
app.get('/session/active', expressAdapter(listActiveSession));
app.post('/sessions/create', expressAdapter(postSession));
app.post('/session/update', expressAdapter(putSession));
//scene
app.get('/scenes', expressAdapter(listAllScenes));
app.post('/scenes/create', expressAdapter(postScene));
app.get('/scene/:id/props', expressAdapter(listSceneProps));
app.post('/scene/:id/assignprops', expressAdapter(postSceneProps));
//user
app.get('/users', expressAdapter(listAllUsers));
app.post('/users/create', expressAdapter(postUser));
//heartbeat
app.get('/heartbeat/:id', expressAdapter(listHeartbeat));
app.post('/heartbeat/create', expressAdapter(postHeartbeat));
//prop
const backgroundPropFileFields = upload.fields([
{ name: 'backgroundFile', maxCount: 1 },
{ name: 'audioFile', maxCount: 1 }
]);
app.post('/prop/createBackground', backgroundPropFileFields, expressAdapter(postPropBackground));
app.get('/scene/:id/props/notactive', expressAdapter(listNotActiveProps));
const modelPropFileFields = upload.fields([
{ name: 'modelFile', maxCount: 1 },
{ name: 'audioFile', maxCount: 1 }
]);
app.post('/prop/createModel', modelPropFileFields, expressAdapter(postPropModel));
app.get('/vr-environment', (req, res) => {
res.sendFile(`${__dirname}/frontend/vr/index.html`);
});
app.get('/*', (req, res) => {
res.sendFile(`${process.cwd()}/frontend/angular/dist/HU3Deck/index.html`);
});
io.on('connection', s => {
console.log('a user connected');
s.on("reload", data => {
io.emit("reload", data);
});
s.on("set volume", socketAdapter(io, "change volume", async data => data))
s.on("show prop", socketAdapter(io, "create prop", listPropById ));
s.on("hide prop", socketAdapter(io, "remove prop", async data => data ));
s.on("reset scene", socketAdapter(io, "remake scene", async data => data));
});
http.listen(3000, () => {
console.log(`listening on *:${process.env.PORT}`);
});