import { SocketEvents } from '@utils/constants'; import { JobOffer, Coordinates } from '@app-types/index'; import { mockJobOffer } from '@store/mockData/mockJobs'; type Callback = (data: any) => void; class MockSocketService { private isConnected = false; private listeners: Record = {}; private mockJobInterval: NodeJS.Timeout | null = null; private token: string | null = null; connect(token: string) { this.token = token; this.isConnected = true; console.log('[MockSocket] Connected with token:', token); } disconnect() { this.goOffline(); this.isConnected = false; this.token = null; this.listeners = {}; console.log('[MockSocket] Disconnected'); } goOnline() { if (!this.isConnected) { console.warn('[MockSocket] Cannot go online: socket not connected'); return; } console.log('[MockSocket] Partner went online. Starting job offer stream...'); // Simulate incoming job offers every 25 seconds if active if (this.mockJobInterval) clearInterval(this.mockJobInterval); this.mockJobInterval = setInterval(() => { // Send a fake new job offer const newOffer: JobOffer = { ...mockJobOffer, jobId: `job_${Date.now()}`, amount: Math.floor(Math.random() * 80) + 50, // random amount ₹50 - ₹130 distance: parseFloat((Math.random() * 4 + 0.5).toFixed(1)), // random distance 0.5km - 4.5km itemCount: Math.floor(Math.random() * 4) + 1, }; this.trigger(SocketEvents.NewJob, newOffer); }, 20000); // 20 seconds } goOffline() { if (this.mockJobInterval) { clearInterval(this.mockJobInterval); this.mockJobInterval = null; } console.log('[MockSocket] Partner went offline. Stopped job offer stream.'); } updateLocation(coords: Coordinates) { console.log('[MockSocket] Location updated:', coords); // Send to server (mocked) } // Event listener pattern on(event: string, callback: Callback) { if (!this.listeners[event]) { this.listeners[event] = []; } this.listeners[event].push(callback); } off(event: string, callback?: Callback) { if (!this.listeners[event]) return; if (callback) { this.listeners[event] = this.listeners[event].filter(cb => cb !== callback); } else { delete this.listeners[event]; } } private trigger(event: string, data: any) { const list = this.listeners[event]; if (list) { list.forEach(callback => { try { callback(data); } catch (e) { console.error(`[MockSocket] Error in listener for event ${event}:`, e); } }); } } } export const mockSocketService = new MockSocketService();