import React, { useEffect, useMemo, useState } from "react"; import { Divider, Tooltip, Input } from "antd"; import classNames from "classnames"; import { CheckIcon, ExitIcon, PencilAltIcon, RefreshIcon, XIcon, } from "@assets/icon/icon"; import { wsc } from "@network/chrome"; import "./Contro.css"; import {ActionType} from "../../public/connect"; interface ControProps {} export const Contro: React.FC = () => { const [isEdit, setIsEdit] = useState(false); const [connected, setConnected] = useState(false); const [autoFindFailedReason, setAutoFindFailedReason] = useState(""); const [enginePort, setEnginePort] = useState(""); const [enginePortTemp, setEnginePortTemp] = useState(enginePort); useEffect(() => { findPort(11212, 11222); }, []); const findPort = (port: number, max: number) => { const ws = new WebSocket(`ws://127.0.0.1:${port}`); ws.onclose = (e: CloseEvent) => { if (e.reason !== `FoundYakitWebSocketController` && port + 1 <= max) { setTimeout(() => findPort(port + 1, max), 200); } if (port + 1 > max) { setConnected(false); setEnginePort(""); setAutoFindFailedReason("Cannot found Yakit"); } }; ws.onopen = () => { setConnected(true); setEnginePort(port + ""); setAutoFindFailedReason(""); ws.close(1000, "FoundYakitWebSocketController"); connectPort(port); }; }; const connectPort = (port: number) => { wsc.connect(port); wsc.onWSCMessage((message) => { if (message.action === ActionType.STATUS) { console.log("onWSCMessage", message) if (message.connected === undefined) { return; } setConnected(message.connected); if (message.connected === false) { setAutoFindFailedReason("Yakit WebSocket Controller Port is not right"); } else { setAutoFindFailedReason(""); } } }); }; const safeConnected = useMemo(() => { return connected && enginePort; }, [connected, enginePort]); const failConnected = useMemo(() => { return !connected && autoFindFailedReason; }, [connected, autoFindFailedReason]); return ( <> {safeConnected || failConnected ? (
Yakit 引擎连接状态:
{isEdit ? ( <> { const value = e.target.value; setEnginePortTemp(value); }} />
{ setIsEdit(false); }} /> { if (enginePortTemp) { setIsEdit(false); setEnginePort(enginePortTemp); connectPort(Number(enginePortTemp)); } }} />
) : ( <>
{safeConnected && "已连接(" + enginePort + ")"} {failConnected && (enginePort ? autoFindFailedReason + "(" + enginePort + ")" : autoFindFailedReason)}
{ setIsEdit(true); setEnginePortTemp(enginePort); }} /> {safeConnected && ( wsc.disconnect()} /> )} {failConnected && ( { if (enginePort) { connectPort(Number(enginePort)); } else { findPort(11212, 11222); } }} /> )}
)}
) : null} ); };