mirror of
https://github.com/logos-messaging/examples.waku.org.git
synced 2026-01-07 23:33:09 +00:00
check peer:disconnect vs libp2pPing
This commit is contained in:
parent
2820bd2579
commit
cde23d9ec3
@ -6,6 +6,8 @@ import { TitleBar } from "@livechat/ui-kit";
|
|||||||
import { Message } from "./Message";
|
import { Message } from "./Message";
|
||||||
import { ChatMessage } from "./chat_message";
|
import { ChatMessage } from "./chat_message";
|
||||||
import { useNodePeers } from "./hooks";
|
import { useNodePeers } from "./hooks";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import type { PeerId } from "@libp2p/interface-peer-id";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
messages: Message[];
|
messages: Message[];
|
||||||
@ -18,9 +20,42 @@ export default function Room(props: Props) {
|
|||||||
const { encoder } = useContentPair();
|
const { encoder } = useContentPair();
|
||||||
const { push: onPush } = useLightPush({ node, encoder });
|
const { push: onPush } = useLightPush({ node, encoder });
|
||||||
|
|
||||||
|
const [started, setStarted] = useState(false);
|
||||||
|
|
||||||
const { bootstrapPeers, peerExchangePeers } = useNodePeers(node);
|
const { bootstrapPeers, peerExchangePeers } = useNodePeers(node);
|
||||||
const { storePeers, filterPeers, lightPushPeers } = usePeers({ node });
|
const { storePeers, filterPeers, lightPushPeers } = usePeers({ node });
|
||||||
|
|
||||||
|
const ping = (node: LightNode, peerId: PeerId) => {
|
||||||
|
node.libp2p
|
||||||
|
// @ts-ignore
|
||||||
|
.ping(peerId)
|
||||||
|
.then((res) => {
|
||||||
|
console.log(`Ping: ${res}`);
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(`Ping error: ${err}`);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!node || (!bootstrapPeers && !peerExchangePeers) || started) return;
|
||||||
|
|
||||||
|
const peerId = Array.from(bootstrapPeers)[0];
|
||||||
|
if (!peerId) return;
|
||||||
|
|
||||||
|
// pings work well and can be interpreted as a good source of checking connectivity with a peer
|
||||||
|
// however, the peer:disconnect event is not triggered when we manually go offline
|
||||||
|
|
||||||
|
node.libp2p.connectionManager.addEventListener("peer:disconnect", (cb) => {
|
||||||
|
console.log("peer:disconnect", cb);
|
||||||
|
});
|
||||||
|
setInterval(() => {
|
||||||
|
ping(node, peerId);
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
setStarted(true);
|
||||||
|
}, [node, bootstrapPeers, peerExchangePeers, started]);
|
||||||
|
|
||||||
const onSend = async (text: string) => {
|
const onSend = async (text: string) => {
|
||||||
if (!onPush || !text) {
|
if (!onPush || !text) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import { generate } from "server-name-generator";
|
|||||||
import { Message } from "./Message";
|
import { Message } from "./Message";
|
||||||
import { Decoder } from "@waku/core/lib/message/version_0";
|
import { Decoder } from "@waku/core/lib/message/version_0";
|
||||||
import { LightNode, StoreQueryOptions } from "@waku/interfaces";
|
import { LightNode, StoreQueryOptions } from "@waku/interfaces";
|
||||||
|
import type { PeerId } from "@libp2p/interface-peer-id";
|
||||||
|
|
||||||
import { useFilterMessages, useStoreMessages } from "@waku/react";
|
import { useFilterMessages, useStoreMessages } from "@waku/react";
|
||||||
|
|
||||||
@ -58,8 +59,8 @@ export const useMessages = (params: UseMessagesParams): UseMessagesResult => {
|
|||||||
// can be safely ignored
|
// can be safely ignored
|
||||||
// this is for experiments on waku side around new discovery options
|
// this is for experiments on waku side around new discovery options
|
||||||
export const useNodePeers = (node: undefined | LightNode) => {
|
export const useNodePeers = (node: undefined | LightNode) => {
|
||||||
const [bootstrapPeers, setBootstrapPeers] = useState(new Set<string>());
|
const [bootstrapPeers, setBootstrapPeers] = useState(new Set<PeerId>());
|
||||||
const [peerExchangePeers, setPeerExchangePeers] = useState(new Set<string>());
|
const [peerExchangePeers, setPeerExchangePeers] = useState(new Set<PeerId>());
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!node) return;
|
if (!node) return;
|
||||||
@ -71,9 +72,9 @@ export const useNodePeers = (node: undefined | LightNode) => {
|
|||||||
(t) => t.name
|
(t) => t.name
|
||||||
);
|
);
|
||||||
if (tags.includes("peer-exchange")) {
|
if (tags.includes("peer-exchange")) {
|
||||||
setPeerExchangePeers((peers) => new Set(peers).add(peerId.toString()));
|
setPeerExchangePeers((peers) => new Set(peers).add(peerId));
|
||||||
} else {
|
} else {
|
||||||
setBootstrapPeers((peers) => new Set(peers).add(peerId.toString()));
|
setBootstrapPeers((peers) => new Set(peers).add(peerId));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, [node]);
|
}, [node]);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user