add websocket server to this dir. fix stuff for client
This commit is contained in:
102
websocket_server/dist/server.js
vendored
Normal file
102
websocket_server/dist/server.js
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const express_1 = __importDefault(require("express"));
|
||||
const socket_io_1 = require("socket.io");
|
||||
const http_1 = require("http");
|
||||
const pg_1 = require("pg");
|
||||
const dotenv_1 = __importDefault(require("dotenv"));
|
||||
dotenv_1.default.config();
|
||||
const app = (0, express_1.default)();
|
||||
const httpServer = (0, http_1.createServer)(app);
|
||||
// Create new Socket.IO server
|
||||
const io = new socket_io_1.Server(httpServer);
|
||||
const PORT = process.env.PORT || 3030;
|
||||
const pgClient = new pg_1.Client({
|
||||
connectionString: process.env.DATABASE_URL,
|
||||
});
|
||||
const handleNotification = (msg) => {
|
||||
var _a;
|
||||
const payload = JSON.parse((_a = msg.payload) !== null && _a !== void 0 ? _a : '{}');
|
||||
switch (msg.channel) {
|
||||
case 'new_message':
|
||||
handleNewMessage(payload);
|
||||
break;
|
||||
case 'countdown_update':
|
||||
handleCountdownUpdate(payload);
|
||||
break;
|
||||
case 'relationship_status_change':
|
||||
handleRelationshipStatusChange(payload);
|
||||
break;
|
||||
case 'profile_picture_update':
|
||||
handleProfilePictureUpdate(payload);
|
||||
break;
|
||||
default:
|
||||
console.log('Unhandled notification:', msg);
|
||||
}
|
||||
};
|
||||
const handleNewMessage = (payload) => {
|
||||
const { receiverId, text, id } = payload;
|
||||
io.to(`user:${receiverId}`).emit('new_message', payload);
|
||||
console.log(`Message sent to room ${receiverId} with text: "${text}"`);
|
||||
};
|
||||
const handleCountdownUpdate = (payload) => {
|
||||
const { relationshipId, countdown } = payload;
|
||||
io.to(`relationship:${relationshipId}`).emit('countdown_update', countdown);
|
||||
console.log(`Countdown update sent to room ${relationshipId}`);
|
||||
};
|
||||
const handleRelationshipStatusChange = (payload) => {
|
||||
const { relationshipId, status } = payload;
|
||||
io.to(`relationship:${relationshipId}`).emit('relationship_status_change', status);
|
||||
console.log(`Relationship status change sent to room ${relationshipId}, status: ${status}`);
|
||||
};
|
||||
const handleProfilePictureUpdate = (payload) => {
|
||||
const { userId, profilePictureUrl } = payload;
|
||||
io.to(`user:${userId}`).emit('profile_picture_update', profilePictureUrl);
|
||||
console.log(`Profile picture update sent to room ${userId}`);
|
||||
};
|
||||
// Connect the PostgreSQL client
|
||||
pgClient.connect()
|
||||
.then(() => {
|
||||
console.log('Connected to PostgreSQL');
|
||||
// Listen for NOTIFY events on the 'new_message' channel
|
||||
pgClient.query('LISTEN new_message');
|
||||
pgClient.query('LISTEN countdown_update');
|
||||
pgClient.query('LISTEN relationship_status_change');
|
||||
pgClient.query('LISTEN profile_picture_update');
|
||||
pgClient.on('notification', handleNotification);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('Failed to connect to PostgreSQL:', err);
|
||||
});
|
||||
// Handle WebSocket connections
|
||||
io.on('connection', (socket) => {
|
||||
console.log('WebSocket client connected:', socket.id);
|
||||
socket.on('join', (roomInfo) => {
|
||||
//console.log('Attempting to join room:', roomInfo);
|
||||
if (typeof roomInfo === 'object') {
|
||||
if (roomInfo.userId) {
|
||||
socket.join(`user:${roomInfo.userId}`);
|
||||
console.log(`User ${roomInfo.userId} joined room`);
|
||||
}
|
||||
else if (roomInfo.relationshipId) {
|
||||
socket.join(`relationship:${roomInfo.relationshipId}`);
|
||||
console.log(`Relationship ${roomInfo.relationshipId} joined room`);
|
||||
}
|
||||
}
|
||||
//console.log('Socket object at connection:', socket);
|
||||
});
|
||||
socket.on('error', (error) => {
|
||||
console.error('WebSocket error:', error);
|
||||
});
|
||||
// Handle disconnection of WebSocket clients
|
||||
socket.on('disconnect', () => {
|
||||
console.log('WebSocket client disconnected:', socket.id);
|
||||
});
|
||||
});
|
||||
// Start the WebSocket server
|
||||
httpServer.listen(PORT, () => {
|
||||
console.log(`WebSocket server is running on port ${PORT}`);
|
||||
});
|
Reference in New Issue
Block a user