Revert "[#451] added websocket connexion"
This reverts commit 47525a5e21.
This commit is contained in:
@@ -1,67 +0,0 @@
|
||||
import { useEffect, useRef } from "react";
|
||||
import { useAppSelector } from "../app/hooks";
|
||||
import { createWebSocketConnection } from "./createWebSocketConnection";
|
||||
import { registerToCalendars } from "./websocketAPI/registerToCalendars";
|
||||
|
||||
export function WebSocketGate() {
|
||||
const socketRef = useRef<WebSocket | null>(null);
|
||||
|
||||
const isAuthenticated = useAppSelector((state) =>
|
||||
Boolean(state.user.userData && state.user.tokens)
|
||||
);
|
||||
|
||||
const calendarList = useAppSelector((state) => state.calendars.list);
|
||||
|
||||
// Manage WebSocket connection
|
||||
useEffect(() => {
|
||||
if (!isAuthenticated) {
|
||||
if (socketRef.current) {
|
||||
socketRef.current.close();
|
||||
socketRef.current = null;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
const connect = async () => {
|
||||
try {
|
||||
const socket = await createWebSocketConnection();
|
||||
socketRef.current = socket;
|
||||
} catch (error) {
|
||||
console.error("Failed to create WebSocket connection:", error);
|
||||
}
|
||||
};
|
||||
|
||||
connect();
|
||||
|
||||
return () => {
|
||||
if (socketRef.current) {
|
||||
socketRef.current.close();
|
||||
socketRef.current = null;
|
||||
}
|
||||
};
|
||||
}, [isAuthenticated]);
|
||||
|
||||
const hasRegisteredRef = useRef(false);
|
||||
|
||||
// Register to calendars once
|
||||
useEffect(() => {
|
||||
if (!socketRef.current || socketRef.current.readyState !== WebSocket.OPEN) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (hasRegisteredRef.current) {
|
||||
return;
|
||||
}
|
||||
|
||||
const calendarPaths = Object.values(calendarList).map(
|
||||
(cal) => `/calendars/${cal.id}`
|
||||
);
|
||||
|
||||
if (calendarPaths.length > 0) {
|
||||
registerToCalendars(socketRef.current, calendarPaths);
|
||||
hasRegisteredRef.current = true;
|
||||
}
|
||||
}, [calendarList]);
|
||||
|
||||
return null;
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
import { api } from "../../utils/apiUtils";
|
||||
import { WebSocketTicket } from "./types";
|
||||
|
||||
export async function fetchWebSocketTicket(): Promise<WebSocketTicket> {
|
||||
const response = await api.post("ws/ticket");
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Failed to fetch WebSocket ticket");
|
||||
}
|
||||
|
||||
return response.json();
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
export interface WebSocketTicket {
|
||||
clientAddress: string;
|
||||
value: string;
|
||||
generatedOn: string;
|
||||
validUntil: string;
|
||||
username: string;
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
import { fetchWebSocketTicket } from "./api/fetchWebSocketTicket";
|
||||
import { WS_INBOUND_EVENTS } from "./protocols";
|
||||
|
||||
export async function createWebSocketConnection(): Promise<WebSocket> {
|
||||
const wsBaseUrl = (window as any).WEBSOCKET_URL;
|
||||
|
||||
if (!wsBaseUrl) {
|
||||
throw new Error("WEBSOCKET_URL is not defined");
|
||||
}
|
||||
|
||||
const ticket = await fetchWebSocketTicket();
|
||||
|
||||
const socket = new WebSocket(
|
||||
`${wsBaseUrl}/ws?ticket=${encodeURIComponent(ticket.value)}`
|
||||
);
|
||||
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
const openHandler = () => {
|
||||
console.log("WebSocket connection opened");
|
||||
socket.removeEventListener(
|
||||
WS_INBOUND_EVENTS.CONNECTION_OPENED,
|
||||
openHandler
|
||||
);
|
||||
socket.removeEventListener(WS_INBOUND_EVENTS.ERROR, errorHandler);
|
||||
resolve();
|
||||
};
|
||||
|
||||
const errorHandler = (error: Event) => {
|
||||
console.error("WebSocket connection failed:", error);
|
||||
socket.removeEventListener(
|
||||
WS_INBOUND_EVENTS.CONNECTION_OPENED,
|
||||
openHandler
|
||||
);
|
||||
socket.removeEventListener(WS_INBOUND_EVENTS.ERROR, errorHandler);
|
||||
reject(new Error("WebSocket connection failed"));
|
||||
};
|
||||
|
||||
socket.addEventListener(WS_INBOUND_EVENTS.CONNECTION_OPENED, openHandler);
|
||||
socket.addEventListener(WS_INBOUND_EVENTS.ERROR, errorHandler);
|
||||
});
|
||||
|
||||
socket.addEventListener(WS_INBOUND_EVENTS.MESSAGE, (event) => {
|
||||
try {
|
||||
const message = JSON.parse(event.data);
|
||||
console.log("WebSocket message received:", message);
|
||||
|
||||
// TODO: Handle different message types
|
||||
} catch (error) {
|
||||
console.error("Failed to parse WebSocket message:", error);
|
||||
}
|
||||
});
|
||||
|
||||
socket.addEventListener(WS_INBOUND_EVENTS.CONNECTION_CLOSED, (event) => {
|
||||
console.log("WebSocket closed:", event.code, event.reason);
|
||||
// TODO: Add reconnection logic
|
||||
});
|
||||
|
||||
socket.addEventListener(WS_INBOUND_EVENTS.ERROR, (error) => {
|
||||
console.error("WebSocket error:", error);
|
||||
});
|
||||
|
||||
return socket;
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
// WebSocket event listeners (browser events)
|
||||
export const WS_INBOUND_EVENTS = {
|
||||
CONNECTION_OPENED: "open",
|
||||
MESSAGE: "message",
|
||||
ERROR: "error",
|
||||
CONNECTION_CLOSED: "close",
|
||||
} as const;
|
||||
|
||||
// WebSocket message types sent to server
|
||||
export const WS_OUTBOUND_EVENTS = {
|
||||
REGISTER_CLIENT: "register",
|
||||
UNREGISTER_CLIENT: "unregister",
|
||||
} as const;
|
||||
@@ -1,17 +0,0 @@
|
||||
export function registerToCalendars(
|
||||
socket: WebSocket,
|
||||
calendarURIList: string[]
|
||||
): void {
|
||||
if (socket.readyState !== WebSocket.OPEN) {
|
||||
throw new Error("Cannot register: WebSocket is not open");
|
||||
}
|
||||
[];
|
||||
|
||||
socket.send(
|
||||
JSON.stringify({
|
||||
register: calendarURIList,
|
||||
})
|
||||
);
|
||||
|
||||
console.log("Registered to calendars", calendarURIList);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
export function unregisterToCalendars(
|
||||
socket: WebSocket,
|
||||
calendarURIList: string[]
|
||||
): void {
|
||||
if (socket.readyState !== WebSocket.OPEN) {
|
||||
throw new Error("Cannot unregister: WebSocket is not open");
|
||||
}
|
||||
[];
|
||||
console.log(calendarURIList);
|
||||
|
||||
socket.send(
|
||||
JSON.stringify({
|
||||
unregister: calendarURIList,
|
||||
})
|
||||
);
|
||||
|
||||
console.log("Unregistered to calendars", calendarURIList);
|
||||
}
|
||||
Reference in New Issue
Block a user