程控源调整

This commit is contained in:
caozehui
2026-06-18 10:01:39 +08:00
parent 4415eb30b2
commit cd51cfb052
5 changed files with 540 additions and 265 deletions

View File

@@ -0,0 +1,111 @@
export type ControlSourceConnectionStatus =
| "disconnected"
| "connecting"
| "connected"
| "failed";
export interface ControlSourceConnectionState {
status: ControlSourceConnectionStatus;
reason: string;
}
export interface SocketLikeMessage {
requestId?: string;
operateCode?: string;
code?: number;
data?: unknown;
desc?: string;
}
export function createDisconnectedState(): ControlSourceConnectionState {
return { status: "disconnected", reason: "" };
}
export function isSourceSelectable(state: ControlSourceConnectionState): boolean {
return state.status === "disconnected" || state.status === "failed";
}
export function isConnectButtonEnabled(state: ControlSourceConnectionState): boolean {
return isSourceSelectable(state);
}
export function getConnectionStatusText(state: ControlSourceConnectionState): string {
switch (state.status) {
case "connecting":
return "建立连接中";
case "connected":
return "连接成功";
case "failed":
return state.reason ? `连接失败:${state.reason}` : "连接失败";
case "disconnected":
default:
return "未连接";
}
}
export function resolveConnectionFailureReason(message: SocketLikeMessage): string {
if (message.requestId === "connect" && message.operateCode === "Source") {
return "源服务端连接失败";
}
if (message.requestId === "connect" && message.operateCode === "Dev") {
return "设备服务端连接失败";
}
const text =
typeof message.data === "string" && message.data.trim()
? message.data.trim()
: typeof message.desc === "string" && message.desc.trim()
? message.desc.trim()
: "";
if (text) {
return text;
}
if (message.requestId === "server_error") {
return "服务端主动关闭连接";
}
return "源连接失败";
}
export function shouldHandleConnectionTerminalMessage(message: SocketLikeMessage): boolean {
if (message.requestId === "yjc_ytxjy" && message.operateCode === "INIT_GATHER") {
return message.code !== 10201;
}
if (message.requestId === "connect" && message.operateCode === "Source") {
return true;
}
if (message.requestId === "server_error" && message.operateCode === "server_error") {
return true;
}
return false;
}
export function applyConnectionTerminalMessage(
state: ControlSourceConnectionState,
message: SocketLikeMessage
): ControlSourceConnectionState {
if (message.requestId === "yjc_ytxjy" && message.operateCode === "INIT_GATHER") {
if (message.code === 10200) {
return { status: "connected", reason: "" };
}
if (message.code !== 10201) {
return { status: "failed", reason: resolveConnectionFailureReason(message) };
}
}
if (message.requestId === "connect" && message.operateCode === "Source") {
return { status: "failed", reason: resolveConnectionFailureReason(message) };
}
if (message.requestId === "server_error" && message.operateCode === "server_error") {
return { status: "failed", reason: resolveConnectionFailureReason(message) };
}
return state;
}