aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/services/socketService.ts
diff options
context:
space:
mode:
authorLibravatarLibravatar Biswa Kalyan Bhuyan <[email protected]> 2025-04-26 15:31:33 +0530
committerLibravatarLibravatar Biswa Kalyan Bhuyan <[email protected]> 2025-04-26 15:31:33 +0530
commit8c9677ffc5aef95964b42c03690eb5ea1b912b13 (patch)
tree8d1941b0e591e601288387c464db098e66e9b365 /app/src/services/socketService.ts
downloadrealtimeloc-8c9677ffc5aef95964b42c03690eb5ea1b912b13.tar.gz
realtimeloc-8c9677ffc5aef95964b42c03690eb5ea1b912b13.tar.bz2
realtimeloc-8c9677ffc5aef95964b42c03690eb5ea1b912b13.zip
testing location tracker
Diffstat (limited to 'app/src/services/socketService.ts')
-rw-r--r--app/src/services/socketService.ts66
1 files changed, 66 insertions, 0 deletions
diff --git a/app/src/services/socketService.ts b/app/src/services/socketService.ts
new file mode 100644
index 0000000..79b944f
--- /dev/null
+++ b/app/src/services/socketService.ts
@@ -0,0 +1,66 @@
+import { Server as SocketIOServer } from 'socket.io';
+import { Server as HTTPServer } from 'http';
+
+// Store active connections
+const activeUsers = new Map<string, string>();
+
+export function createSocketService(httpServer: HTTPServer) {
+ const io = new SocketIOServer(httpServer, {
+ cors: {
+ origin: '*',
+ methods: ['GET', 'POST']
+ }
+ });
+
+ io.on('connection', (socket) => {
+ console.log(`New client connected: ${socket.id}`);
+
+ // Handle user login/registration
+ socket.on('user:register', (userId: string) => {
+ console.log(`User registered: ${userId} (Socket: ${socket.id})`);
+ activeUsers.set(userId, socket.id);
+ // Broadcast updated user list
+ io.emit('users:update', Array.from(activeUsers.keys()));
+ });
+
+ // Handle location updates
+ socket.on('location:update', (data: { userId: string; latitude: number; longitude: number }) => {
+ console.log(`Location update from ${data.userId}: ${data.latitude}, ${data.longitude}`);
+ // Broadcast to all connected clients
+ io.emit('location:broadcast', data);
+ });
+
+ // Handle direct messages or location shares
+ socket.on('location:share', (data: { fromUserId: string; toUserId: string; latitude: number; longitude: number }) => {
+ console.log(`Location share from ${data.fromUserId} to ${data.toUserId}`);
+ const targetSocketId = activeUsers.get(data.toUserId);
+
+ if (targetSocketId) {
+ // Send to specific user
+ io.to(targetSocketId).emit('location:shared', {
+ fromUserId: data.fromUserId,
+ latitude: data.latitude,
+ longitude: data.longitude
+ });
+ }
+ });
+
+ // Handle disconnect
+ socket.on('disconnect', () => {
+ console.log(`Client disconnected: ${socket.id}`);
+ // Remove user from active users
+ for (const [userId, socketId] of activeUsers.entries()) {
+ if (socketId === socket.id) {
+ activeUsers.delete(userId);
+ break;
+ }
+ }
+ // Broadcast updated user list
+ io.emit('users:update', Array.from(activeUsers.keys()));
+ });
+ });
+
+ return io;
+}
+
+export default createSocketService; \ No newline at end of file