Skip to content

Commit 1b67bf5

Browse files
committed
remove socket.io
1 parent 291dadc commit 1b67bf5

9 files changed

Lines changed: 387 additions & 474 deletions

File tree

client/src/components/AppHeader.js

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,8 @@ import {
1515
import CIcon from '@coreui/icons-react'
1616
import PropTypes from 'prop-types'
1717
import { cilBell, cilMenu, cilSun, cilMoon, cilContrast } from '@coreui/icons'
18-
import io from 'socket.io-client'
1918
import { AppHeaderDropdown } from './header/index'
2019

21-
const socket = io(VITE_SOCKET_URL, {
22-
transports: ['websocket', 'polling'],
23-
withCredentials: true,
24-
})
25-
2620
const AppHeader = ({ admin = false }) => {
2721
const headerRef = useRef()
2822
const dispatch = useDispatch()
@@ -33,28 +27,45 @@ const AppHeader = ({ admin = false }) => {
3327
const [dropdownVisible, setDropdownVisible] = useState(false)
3428

3529
useEffect(() => {
30+
const socket = new WebSocket(VITE_SOCKET_URL.replace(/^http/, 'ws'))
31+
3632
document.addEventListener('scroll', () => {
3733
headerRef.current &&
3834
headerRef.current.classList.toggle('shadow-sm', document.documentElement.scrollTop > 0)
3935
})
4036

41-
// Listen for real-time shipment updates
42-
socket.on('shipmentUpdate', (update) => {
43-
if (update.critical) {
44-
setNotifications((prev) => [
45-
{
46-
...update,
47-
message: update.message,
48-
},
49-
...prev,
50-
])
51-
setUnreadCount((prev) => prev + 1)
37+
socket.addEventListener('open', () => {
38+
console.log('WebSocket connection opened')
39+
})
40+
41+
socket.addEventListener('message', (event) => {
42+
try {
43+
const message = JSON.parse(event.data)
44+
45+
if (message.type === 'shipmentUpdate') {
46+
const update = message.data
47+
setNotifications((prev) => [
48+
{
49+
...update,
50+
message: `Shipment ${update.trackingNumber} updated to ${update.status}`,
51+
},
52+
...prev,
53+
])
54+
setUnreadCount((prev) => prev + 1)
55+
}
56+
} catch (error) {
57+
console.error('WebSocket message error:', error)
5258
}
5359
})
5460

55-
return () => socket.off('shipmentUpdate')
56-
}, [])
61+
socket.addEventListener('close', () => {
62+
console.log('WebSocket connection closed')
63+
})
5764

65+
return () => {
66+
socket.close()
67+
}
68+
}, [])
5869
const toggleDropdown = () => {
5970
setDropdownVisible(!dropdownVisible)
6071
setUnreadCount(0) //

client/src/views/dashboard/ShipmentInfo/ShipmentInfo.js

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import React, { useState, useEffect } from 'react'
22
import PropTypes from 'prop-types'
33
import { motion, AnimatePresence } from 'framer-motion'
4-
import { io } from 'socket.io-client'
54
import './ShipmentInfo.scss'
65
import packageimg from './../../../assets/brand/package.jpg'
76

@@ -10,32 +9,58 @@ const ShipmentInfo = ({ data }) => {
109
const [showDetails, setShowDetails] = useState(false)
1110

1211
useEffect(() => {
13-
const socket = io('https://backend-core2.axleshift.com', {
14-
transports: ['websocket', 'polling'],
15-
})
16-
socket.emit('joinRoom', data.trackingNumber)
12+
const socket = new WebSocket('wss://backend-core2.axleshift.com')
1713

18-
socket.on('shipmentLocationUpdate', (update) => {
19-
setShipmentData((prev) => ({ ...prev, ...update }))
14+
socket.addEventListener('open', () => {
15+
// Join tracking when socket opens
16+
socket.send(JSON.stringify({
17+
type: 'joinTracking',
18+
trackingNumber: data.trackingNumber,
19+
}))
2020
})
2121

22-
socket.on('statusChanged', ({ newStatus }) => {
23-
setShipmentData((prev) => ({
24-
...prev,
25-
status: newStatus,
26-
events: [
27-
...prev.events,
28-
{
22+
socket.addEventListener('message', (event) => {
23+
try {
24+
const message = JSON.parse(event.data)
25+
26+
if (message.type === 'shipmentLocationUpdate') {
27+
const update = message.data
28+
setShipmentData((prev) => ({
29+
...prev,
30+
...update,
31+
}))
32+
}
33+
34+
if (message.type === 'statusChanged') {
35+
const { newStatus } = message.data
36+
setShipmentData((prev) => ({
37+
...prev,
2938
status: newStatus,
30-
date: new Date().toISOString(),
31-
time: new Date().toLocaleTimeString(),
32-
location: `${prev.latitude}, ${prev.longitude}`,
33-
},
34-
],
35-
}))
39+
events: [
40+
...prev.events,
41+
{
42+
status: newStatus,
43+
date: new Date().toISOString(),
44+
time: new Date().toLocaleTimeString(),
45+
location: `${prev.latitude}, ${prev.longitude}`,
46+
},
47+
],
48+
}))
49+
}
50+
} catch (error) {
51+
console.error('WebSocket message handling error:', error)
52+
}
3653
})
3754

38-
return () => socket.disconnect()
55+
return () => {
56+
if (socket.readyState === WebSocket.OPEN) {
57+
socket.send(JSON.stringify({
58+
type: 'leaveTracking',
59+
trackingNumber: data.trackingNumber,
60+
}))
61+
}
62+
socket.close()
63+
}
3964
}, [data.trackingNumber])
4065
return (
4166
<div className="shipment-container">

client/src/views/dashboard/Track/TrackingForm.js

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import React, { useState, useEffect, useRef } from 'react'
22
import PropTypes from 'prop-types'
33
import axios from '../../../api/axios.js'
4-
import io from 'socket.io-client'
54
import 'leaflet/dist/leaflet.css'
65
import ShipmentInfo from '../ShipmentInfo/ShipmentInfo.js'
76
import { GoogleMap, useJsApiLoader, Marker, DirectionsRenderer } from '@react-google-maps/api'
87
import { VITE_APP_GOOGLE_MAP, VITE_SOCKET_URL } from '../../../config.js'
98

109
const GOOGLE_MAPS_LIBRARIES = ['places']
10+
1111
const MapCenterUpdater = ({ lat, lng, map }) => {
1212
useEffect(() => {
1313
if (map && lat && lng) {
@@ -32,40 +32,57 @@ const TrackingForm = () => {
3232
const [socket, setSocket] = useState(null)
3333
const markerRef = useRef(null)
3434
const [directions, setDirections] = useState(null)
35-
const isSocketInitialized = useRef(false)
3635
const { isLoaded } = useJsApiLoader({
3736
googleMapsApiKey: VITE_APP_GOOGLE_MAP,
3837
libraries: GOOGLE_MAPS_LIBRARIES,
3938
})
4039

4140
useEffect(() => {
42-
const newSocket = io(VITE_SOCKET_URL, { autoConnect: false })
43-
setSocket(newSocket)
41+
const ws = new WebSocket(VITE_SOCKET_URL)
42+
setSocket(ws)
43+
4444
return () => {
45-
newSocket.disconnect()
45+
ws.close()
4646
}
4747
}, [])
4848

4949
useEffect(() => {
50-
if (!trackingNumber || !socket || isSocketInitialized.current) return
51-
52-
socket.connect()
53-
socket.emit('joinTracking', trackingNumber)
54-
isSocketInitialized.current = true
55-
56-
socket.on('shipmentLocationUpdate', (updatedShipment) => {
57-
setShipmentData((prevData) => ({
58-
...prevData,
59-
latitude: updatedShipment.latitude,
60-
longitude: updatedShipment.longitude,
61-
updated_at: new Date(updatedShipment.updated_at),
62-
}))
50+
if (!socket || socket.readyState !== WebSocket.OPEN) return
51+
52+
const joinTracking = () => {
53+
const joinMessage = JSON.stringify({
54+
action: 'joinTracking',
55+
trackingNumber,
56+
})
57+
socket.send(joinMessage)
58+
}
59+
60+
socket.addEventListener('open', joinTracking)
61+
62+
socket.addEventListener('message', (event) => {
63+
const message = JSON.parse(event.data)
64+
65+
if (message.type === 'shipmentLocationUpdate') {
66+
const updatedShipment = message.data
67+
setShipmentData((prevData) => ({
68+
...prevData,
69+
latitude: updatedShipment.latitude,
70+
longitude: updatedShipment.longitude,
71+
updated_at: new Date(updatedShipment.updated_at),
72+
}))
73+
}
6374
})
6475

6576
return () => {
66-
socket.emit('leaveTracking', trackingNumber)
67-
socket.off('shipmentLocationUpdate')
68-
isSocketInitialized.current = false
77+
if (socket.readyState === WebSocket.OPEN) {
78+
const leaveMessage = JSON.stringify({
79+
action: 'leaveTracking',
80+
trackingNumber,
81+
})
82+
socket.send(leaveMessage)
83+
}
84+
socket.removeEventListener('open', joinTracking)
85+
socket.removeEventListener('message', () => {})
6986
}
7087
}, [trackingNumber, socket])
7188

client/src/views/driver/drivermanagement.js

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect, useState } from 'react'
1+
import React, { useEffect, useState, useRef } from 'react'
22
import {
33
CCard,
44
CCardBody,
@@ -12,16 +12,16 @@ import {
1212
CTableDataCell,
1313
CSpinner,
1414
} from '@coreui/react'
15-
import io from 'socket.io-client'
1615

1716
const DriverManagement = () => {
1817
const [shipments, setShipments] = useState([])
1918
const [loading, setLoading] = useState(true)
19+
const socketRef = useRef(null)
2020

2121
useEffect(() => {
2222
const fetchShipments = async () => {
2323
try {
24-
const res = await fetch('http://localhost:5052/driver/shipments')
24+
const res = await fetch('https://backend-core2.axleshift.com/driver/shipments')
2525
const data = await res.json()
2626
setShipments(data)
2727
} catch (error) {
@@ -33,31 +33,46 @@ const DriverManagement = () => {
3333

3434
fetchShipments()
3535

36-
const socket = io('http://localhost:5052', {
37-
transports: ['websocket', 'polling'],
38-
})
36+
// Connect to WebSocket
37+
socketRef.current = new WebSocket('wss://backend-core2.axleshift.com')
3938

40-
// Listen for shipment location updates
41-
socket.on('shipmentLocationUpdate', (data) => {
42-
// Update the state with the new location data
43-
setShipments((prevShipments) =>
44-
prevShipments.map((shipment) =>
45-
shipment.trackingNumber === data.trackingNumber
46-
? {
47-
...shipment,
48-
latitude: data.latitude,
49-
longitude: data.longitude,
50-
updated_at: data.updated_at,
51-
driverUsername: data.driverUsername,
52-
}
53-
: shipment,
54-
),
55-
)
56-
})
39+
socketRef.current.onopen = () => {
40+
console.log('WebSocket connected (DriverManagement)')
41+
}
42+
43+
socketRef.current.onmessage = (event) => {
44+
const message = JSON.parse(event.data)
45+
46+
if (message.type === 'shipmentLocationUpdate') {
47+
const { trackingNumber, latitude, longitude, updated_at, driverUsername } = message.data
48+
49+
setShipments((prevShipments) =>
50+
prevShipments.map((shipment) =>
51+
shipment.trackingNumber === trackingNumber
52+
? {
53+
...shipment,
54+
latitude,
55+
longitude,
56+
updated_at,
57+
driverUsername,
58+
}
59+
: shipment
60+
)
61+
)
62+
}
63+
}
64+
65+
socketRef.current.onerror = (error) => {
66+
console.error('WebSocket error:', error)
67+
}
68+
69+
socketRef.current.onclose = () => {
70+
console.log('WebSocket disconnected')
71+
}
5772

58-
// Cleanup the socket connection when the component unmounts
73+
// Cleanup
5974
return () => {
60-
socket.disconnect()
75+
socketRef.current?.close()
6176
}
6277
}, [])
6378

@@ -66,7 +81,7 @@ const DriverManagement = () => {
6681
<CCol>
6782
<CCard className="mb-4 shadow-sm">
6883
<CCardBody>
69-
<h4 className="mb-3">Active Shipments </h4>
84+
<h4 className="mb-3">Active Shipments</h4>
7085
{loading ? (
7186
<CSpinner color="primary" />
7287
) : (

0 commit comments

Comments
 (0)