Files
pqs-9100_client/frontend/src/views/machine/controlSource/connectionState.ts

112 lines
3.0 KiB
TypeScript
Raw Normal View History

2026-06-18 10:01:39 +08:00
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;
}