BloodyInside's picture
firsty
947c08e
raw
history blame
2.52 kB
import Storage from '@/constants/module/storage'; // Adjust the import path as needed
import uuid from 'react-native-uuid';
import NetInfo from '@react-native-community/netinfo';
const connectWebSocket = (socketBaseContext: string, socket_id: string | number[], onOpen: (event: any) => void, onMessage: (event: any) => void): Promise<WebSocket> => {
return new Promise((resolve, reject) => {
const _socket = new WebSocket(`${socketBaseContext}/ws/queue/request_chapter/${socket_id}`);
_socket.onopen = (event: any) => {
onOpen(event);
resolve(_socket);
};
_socket.onmessage = onMessage;
const handleReconnect = () => {
console.log('WebSocket closed or error. Attempting to reconnect...');
setTimeout(() => {
connectWebSocket(socketBaseContext, socket_id, onOpen, onMessage).then(resolve).catch(reject);
}, 3000); // Wait 3 seconds before attempting to reconnect
};
// _socket.onclose = handleReconnect;
_socket.onerror = (error: any) => {
console.error('WebSocket error:', error);
_socket.close();
handleReconnect();
};
});
};
export const createSocket = async (
socketBaseContext: string,
socket: any,
onOpen: (event: any) => void,
onMessage: (event: any) => void
) => {
const stored_socket_info = await Storage.get("SOCKET_INFO");
let socket_id: string | number[];
if (stored_socket_info) {
socket_id = stored_socket_info.id;
} else {
socket_id = uuid.v4();
await Storage.store("SOCKET_INFO", { id: socket_id });
}
const _socket = await connectWebSocket(socketBaseContext, socket_id, onOpen, onMessage);
socket.current = _socket;
return _socket;
};
export const setupSocketNetworkListener = (
socketBaseContext: string,
socket:any,
onOpen: (event: any) => void,
onMessage: (event: any) => void
) => {
var previousIsConnected:any = null;
return NetInfo.addEventListener(state => {
if (previousIsConnected === state.isConnected){
previousIsConnected = state.isConnected;
}else if (state.isConnected) {
previousIsConnected = state.isConnected;
console.log("Socket Network listener started.")
console.log('Internet connected. Connecting WebSocket...');
createSocket(socketBaseContext, socket, onOpen, onMessage)
}
});
};