程控源调整
This commit is contained in:
111
frontend/src/views/machine/controlSource/connectionState.ts
Normal file
111
frontend/src/views/machine/controlSource/connectionState.ts
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user