import React, { useEffect, useState } from "react"; import { Space, Select, Input, Switch } from "antd"; import { PlusSmIcon, TrashIcon } from "@assets/icon/icon"; import { wsc } from "@network/chrome"; import "./Prox.css"; interface ProxyConfig { id: string; scheme: "http" | "socks5"; host: string; port: string; hostStatus: "error" | ""; portStatus: "error" | ""; open: boolean; } export interface ProxProps {} export const Prox: React.FC = () => { const [proxyList, setProxyList] = useState([]); // proxy useEffect(() => { const update = () => { wsc.updateProxyStatus(); }; update(); const id = setInterval(update, 500); return () => { clearInterval(id); }; }, []); useEffect(() => { wsc.onProxyStatusMessage((msg) => { if (msg["proxy"] === undefined || msg["enable"] === undefined) { return; } console.log("当前代理:", msg); }); }, []); const hostOnchange = (value: string, id: string) => { const ipPattern = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; const domainPattern = /^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; const copyProxyList = structuredClone(proxyList); if (value === "" || ipPattern.test(value) || domainPattern.test(value)) { copyProxyList.forEach((i) => { if (i.id === id) { i.hostStatus = ""; i.host = value; } }); } else { copyProxyList.forEach((i) => { if (i.id === id) { i.hostStatus = "error"; i.host = value; } }); } setProxyList(copyProxyList); }; const portOnchange = (value: string, id: string) => { const portNumber = parseInt(value, 10); const copyProxyList = structuredClone(proxyList); if ( value === "" || (/^\d+$/.test(value) && portNumber >= 0 && portNumber <= 65535) ) { copyProxyList.forEach((i) => { if (i.id === id) { i.portStatus = ""; i.port = value === "" ? "" : portNumber + ""; } }); } else { copyProxyList.forEach((i) => { if (i.id === id) { i.portStatus = "error"; i.port = value; } }); } setProxyList(copyProxyList); }; return (
设置代理 {proxyList.length}
{ setProxyList([ ...proxyList, { id: Math.random() + "", scheme: "http", host: "", port: "", hostStatus: "", portStatus: "", open: false, }, ]); }} > 添加
{proxyList.length ? ( proxyList.map((item) => (
hostOnchange(e.target.value, item.id)} /> portOnchange(e.target.value, item.id)} /> {!item.open && ( { setProxyList(proxyList.filter((i) => i.id !== item.id)); }} /> )} { wsc.clearproxy(); const copyProxyList = structuredClone(proxyList); copyProxyList.forEach((i) => { if (i.id === item.id) { i.open = checked; if (checked) { wsc.setproxy(item.scheme, item.host, Number(item.port)); } } else { i.open = false; } }); setProxyList(copyProxyList); }} />
)) ) : (
{ setProxyList([ { id: Math.random() + "", scheme: "http", host: "127.0.0.1", port: "8083", hostStatus: "", portStatus: "", open: false, }, ]); }} > 添加
)}
); };