Web socket connection and message hooks

This commit is contained in:
Bojan Mojsilovic 2023-09-01 17:07:03 +02:00
parent f5eb6047d5
commit 9f8b2f4b35
3 changed files with 22 additions and 3 deletions

View File

@ -70,8 +70,10 @@ const Router: Component = () => {
thread, thread,
}; };
primalWindow.onPrimalComponentMount = (data: ComponentLog) => {}; primalWindow.onPrimalComponentMount = () => {};
primalWindow.onPrimalComponentCleanup = (data: ComponentLog) => {}; primalWindow.onPrimalComponentCleanup = () => {};
primalWindow.onPrimalCacheServerConnected = () => {};
primalWindow.onPrimalCacheServerMessage = () => {};
} }
const getKnownProfiles = ({ params }: RouteDataFuncArgs) => { const getKnownProfiles = ({ params }: RouteDataFuncArgs) => {

View File

@ -1,5 +1,5 @@
import { createSignal } from "solid-js"; import { createSignal } from "solid-js";
import { NostrEvent, NostrEOSE, NostrEventType, NostrEventContent } from "./types/primal"; import { NostrEvent, NostrEOSE, NostrEventType, NostrEventContent, PrimalWindow } from "./types/primal";
export const [socket, setSocket] = createSignal<WebSocket>(); export const [socket, setSocket] = createSignal<WebSocket>();
@ -9,6 +9,11 @@ export const isNotConnected = () => !isConnected();
const onOpen = () => { const onOpen = () => {
setConnected(true); setConnected(true);
if (localStorage.getItem('devMode') === 'true') {
const hook = (window as PrimalWindow).onPrimalCacheServerConnected;
hook && hook(cacheServer);
}
} }
const onClose = () => { const onClose = () => {
@ -17,12 +22,21 @@ const onClose = () => {
socket()?.removeEventListener('open', onOpen); socket()?.removeEventListener('open', onOpen);
socket()?.removeEventListener('close', onClose); socket()?.removeEventListener('close', onClose);
socket()?.removeEventListener('error', onError); socket()?.removeEventListener('error', onError);
socket()?.removeEventListener('message', onMessage);
setTimeout(() => { setTimeout(() => {
connect(); connect();
}, 200); }, 200);
} }
const onMessage = (event: MessageEvent) => {
if (localStorage.getItem('devMode') === 'true') {
const hook = (window as PrimalWindow).onPrimalCacheServerMessage;
hook && hook(event);
}
}
const onError = (error: Event) => { const onError = (error: Event) => {
console.log("ws error: ", error); console.log("ws error: ", error);
}; };
@ -41,6 +55,7 @@ export const connect = () => {
socket()?.addEventListener('open', onOpen); socket()?.addEventListener('open', onOpen);
socket()?.addEventListener('close', onClose); socket()?.addEventListener('close', onClose);
socket()?.addEventListener('error', onError); socket()?.addEventListener('error', onError);
socket()?.addEventListener('message', onMessage);
} }
}; };

View File

@ -342,6 +342,8 @@ export type PrimalWindow = Window & typeof globalThis & {
primal?: any, primal?: any,
onPrimalComponentMount?: (data: any) => void, onPrimalComponentMount?: (data: any) => void,
onPrimalComponentCleanup?: (data: any) => void, onPrimalComponentCleanup?: (data: any) => void,
onPrimalCacheServerConnected?: (url: string) => void,
onPrimalCacheServerMessage?: (message: MessageEvent) => void,
}; };
export type NostrEventType = "EVENT" | "EOSE" | "NOTICE"; export type NostrEventType = "EVENT" | "EOSE" | "NOTICE";