112 lines
3.0 KiB
TypeScript
112 lines
3.0 KiB
TypeScript
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;
|
|
}
|