-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.ts
More file actions
64 lines (52 loc) · 1.91 KB
/
server.ts
File metadata and controls
64 lines (52 loc) · 1.91 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
import app from './app';
import dotenv from 'dotenv';
import { createServer } from 'http';
import { initializeFirebase } from './src/lib/firebase';
import { initializeSocketIO } from './src/lib/socket';
import { setupChatHandlers } from './src/lib/socketHandlers';
import './src/lib/queue'; // Initialize notification worker and Redis subscriber
// import { verifyCloudinaryConfig } from './config/cloudinary';
// Load environment variables
dotenv.config();
const PORT = process.env.PORT || 3000;
const DATABASE_URL = process.env.DATABASE_URL;
// Validate required environment variables
if (!DATABASE_URL) {
console.error('Error: DATABASE_URL environment variable is required');
process.exit(1);
}
// Initialize Firebase Admin SDK
try {
initializeFirebase();
} catch (error) {
console.error('Failed to initialize Firebase. Push notifications will not work.');
console.error(error);
}
// Verify Cloudinary configuration (uncomment when cloudinary config is ready)
// verifyCloudinaryConfig();
// Create HTTP server
const httpServer = createServer(app);
// Initialize Socket.IO
const io = initializeSocketIO(httpServer);
setupChatHandlers(io);
// Set Socket.IO instance in chat controller for REST API integration
import { setSocketIO } from './src/controllers/chat.controller';
setSocketIO(io);
// Export io for use in other parts of the application
export { io };
// Start the server
httpServer.listen(PORT, () => {
console.log(` Server is running on port ${PORT}`);
console.log(` Environment: ${process.env.NODE_ENV || 'development'}`);
console.log(` Health check available at: http://localhost:${PORT}/health`);
console.log(` Socket.IO ready for real-time connections`);
});
// Graceful shutdown
process.on('SIGTERM', () => {
console.log('SIGTERM signal received: closing HTTP server');
process.exit(0);
});
process.on('SIGINT', () => {
console.log('SIGINT signal received: closing HTTP server');
process.exit(0);
});