mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-04 23:18:01 +00:00
0e550dedc6
- update electron - cleanup unused function calls - close websocket on process end - style fix on splash screen
135 lines
3.2 KiB
JavaScript
135 lines
3.2 KiB
JavaScript
// get config
|
|
import { config } from './config/config.js';
|
|
|
|
// init database
|
|
import { Low, JSONFile } from 'lowdb';
|
|
|
|
import path from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
|
|
const env = process.env.NODE_ENV || 'prod';
|
|
|
|
const file = path.join(__dirname, 'data/', config.database.filename);
|
|
const adapter = new JSONFile(file);
|
|
export const db = new Low(adapter);
|
|
|
|
// dependencies
|
|
import express from 'express';
|
|
import http from 'http';
|
|
import cors from 'cors';
|
|
import { dbModel } from './data/dataModel.js';
|
|
|
|
// Read data from JSON file, this will set db.data content
|
|
await db.read();
|
|
|
|
// If file.json doesn't exist, db.data will be null
|
|
// Set default data
|
|
// db.data ||= { events: [] }; NODE v15 - v16
|
|
if (db.data == null) {
|
|
db.data = dbModel;
|
|
db.write();
|
|
}
|
|
|
|
// get data
|
|
export const data = db.data;
|
|
|
|
// Import Routes
|
|
import { router as eventsRouter } from './routes/eventsRouter.js';
|
|
import { router as eventRouter } from './routes/eventRouter.js';
|
|
import { router as ontimeRouter } from './routes/ontimeRouter.js';
|
|
|
|
// Global Objects
|
|
import { EventTimer } from './classes/EventTimer.js';
|
|
|
|
// Create express APP
|
|
const app = express();
|
|
|
|
// setup cors for all routes
|
|
app.use(cors());
|
|
|
|
// enable pre-flight cors
|
|
app.options('*', cors());
|
|
|
|
// Implement middleware
|
|
app.use('/uploads', express.static('uploads'));
|
|
|
|
app.use(express.urlencoded({ extended: true }));
|
|
app.use(express.json({ limit: '1mb' }));
|
|
|
|
// Implement route endpoints
|
|
app.use('/events', eventsRouter);
|
|
app.use('/event', eventRouter);
|
|
app.use('/ontime', ontimeRouter);
|
|
|
|
// serve react
|
|
app.use(
|
|
express.static(
|
|
path.join(__dirname, env == 'prod' ? '../' : '../../', 'client/build')
|
|
)
|
|
);
|
|
|
|
app.get('*', (req, res) => {
|
|
res.sendFile(
|
|
path.resolve(
|
|
__dirname,
|
|
env == 'prod' ? '../' : '../../',
|
|
'client',
|
|
'build',
|
|
'index.html'
|
|
)
|
|
);
|
|
});
|
|
|
|
// Implement route for errors
|
|
app.use((err, req, res, next) => {
|
|
res.status(500).send(err.stack);
|
|
});
|
|
|
|
// create HTTP server
|
|
const server = http.createServer(app);
|
|
|
|
export const startServer = (overrideConfig = null) => {
|
|
// Setup default port
|
|
const serverPort = overrideConfig?.port || config.server.port;
|
|
|
|
// Start server
|
|
const returnMessage = `HTTP Server is listening on port ${serverPort}`;
|
|
server.listen(serverPort, '0.0.0.0', () => console.log(returnMessage));
|
|
|
|
// init timer
|
|
global.timer = new EventTimer(server, config);
|
|
global.timer.setupWithEventList(data.events);
|
|
|
|
return returnMessage;
|
|
};
|
|
|
|
// Start OSC server
|
|
import { initiateOSC, shutdownOSCServer } from './controllers/OscController.js';
|
|
|
|
export const startOSCServer = (overrideConfig = null) => {
|
|
// Setup default port
|
|
const oscInPort = overrideConfig?.port || config.osc.port;
|
|
initiateOSC(config.osc);
|
|
};
|
|
|
|
export const startOSCClient = (overrideConfig = null) => {
|
|
// Setup default port
|
|
const oscOutPort = overrideConfig?.port || config.osc.portOut;
|
|
console.log('initialise OSC Client at port: ', oscOutPort);
|
|
};
|
|
|
|
export const shutdown = () => {
|
|
console.log('Node service shutdown');
|
|
|
|
// shutdown express server
|
|
server.close();
|
|
// shutdown OSC Server
|
|
shutdownOSCServer();
|
|
// shutdown OSC Client
|
|
|
|
// shutdown timer
|
|
global.timer.shutdown();
|
|
};
|