File size: 1,170 Bytes
ffb4c35 | 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 | import React, { createContext, useContext, useEffect, useState } from 'react';
import io from 'socket.io-client';
import { useAuth } from './AuthContext';
const SocketContext = createContext();
export const useSocket = () => {
const context = useContext(SocketContext);
if (!context) {
throw new Error('useSocket must be used within a SocketProvider');
}
return context;
};
export const SocketProvider = ({ children }) => {
const [socket, setSocket] = useState(null);
const { user } = useAuth();
useEffect(() => {
if (user) {
const newSocket = io(process.env.REACT_APP_SOCKET_URL || 'http://localhost:8080', {
auth: {
token: localStorage.getItem('token')
}
});
newSocket.on('connect', () => {
console.log('Connected to server');
});
newSocket.on('disconnect', () => {
console.log('Disconnected from server');
});
setSocket(newSocket);
return () => {
newSocket.close();
};
}
}, [user]);
const value = {
socket
};
return (
<SocketContext.Provider value={value}>
{children}
</SocketContext.Provider>
);
}; |