@@ -3,6 +3,7 @@ import { useI18n } from 'vue-i18n';
|
|||||||
import { useSettingsStore } from '../stores/settings.store';
|
import { useSettingsStore } from '../stores/settings.store';
|
||||||
import { storeToRefs } from 'pinia';
|
import { storeToRefs } from 'pinia';
|
||||||
import type { WebSocketMessage, MessagePayload } from '../types/websocket.types';
|
import type { WebSocketMessage, MessagePayload } from '../types/websocket.types';
|
||||||
|
import { useLayoutStore } from '../stores/layout.store';
|
||||||
|
|
||||||
// --- Interfaces (Copied from DockerManager.vue) ---
|
// --- Interfaces (Copied from DockerManager.vue) ---
|
||||||
interface PortInfo {
|
interface PortInfo {
|
||||||
@@ -253,6 +254,9 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
watch(isConnected, (newIsConnected, oldIsConnected) => {
|
watch(isConnected, (newIsConnected, oldIsConnected) => {
|
||||||
console.log(`[DockerManager ${sessionId}] Connection status changed: ${oldIsConnected} -> ${newIsConnected}`);
|
console.log(`[DockerManager ${sessionId}] Connection status changed: ${oldIsConnected} -> ${newIsConnected}`);
|
||||||
if (newIsConnected) {
|
if (newIsConnected) {
|
||||||
|
// 只有当Docker管理器在布局中时才设置监听器和定时器
|
||||||
|
const layoutStore = useLayoutStore();
|
||||||
|
if (layoutStore.usedPanes.has('dockerManager')) {
|
||||||
// Connection established
|
// Connection established
|
||||||
setupWsListeners();
|
setupWsListeners();
|
||||||
requestDockerStatus(); // Fetch initial status
|
requestDockerStatus(); // Fetch initial status
|
||||||
@@ -263,6 +267,9 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
refreshInterval = setInterval(requestDockerStatus, 15000); // Check every 15s
|
refreshInterval = setInterval(requestDockerStatus, 15000); // Check every 15s
|
||||||
console.log(`[DockerManager ${sessionId}] Main refresh interval started (15s).`);
|
console.log(`[DockerManager ${sessionId}] Main refresh interval started (15s).`);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
console.log(`[DockerManager ${sessionId}] Docker管理器不在布局中,跳过设置监听器和定时器。`);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Connection lost
|
// Connection lost
|
||||||
resetStateAndInterval();
|
resetStateAndInterval();
|
||||||
@@ -283,12 +290,18 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe
|
|||||||
// This handles cases where the manager is created after the WS connection is live.
|
// This handles cases where the manager is created after the WS connection is live.
|
||||||
if (isConnected.value) {
|
if (isConnected.value) {
|
||||||
console.log(`[DockerManager ${sessionId}] Initial setup: Already connected.`);
|
console.log(`[DockerManager ${sessionId}] Initial setup: Already connected.`);
|
||||||
|
// 只有当Docker管理器在布局中时才设置监听器和定时器
|
||||||
|
const layoutStore = useLayoutStore();
|
||||||
|
if (layoutStore.usedPanes.has('dockerManager')) {
|
||||||
setupWsListeners();
|
setupWsListeners();
|
||||||
requestDockerStatus();
|
requestDockerStatus();
|
||||||
if (!refreshInterval) {
|
if (!refreshInterval) {
|
||||||
refreshInterval = setInterval(requestDockerStatus, 15000);
|
refreshInterval = setInterval(requestDockerStatus, 15000);
|
||||||
console.log(`[DockerManager ${sessionId}] Initial setup: Main refresh interval started (15s).`);
|
console.log(`[DockerManager ${sessionId}] Initial setup: Main refresh interval started (15s).`);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
console.log(`[DockerManager ${sessionId}] Docker管理器不在布局中,跳过初始设置。`);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log(`[DockerManager ${sessionId}] Initial setup: Not connected yet.`);
|
console.log(`[DockerManager ${sessionId}] Initial setup: Not connected yet.`);
|
||||||
// Set initial state for disconnected status
|
// Set initial state for disconnected status
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { ref, readonly, watch, type Ref, ComputedRef } from 'vue'; // 修正导
|
|||||||
// import { useWebSocketConnection } from './useWebSocketConnection'; // 移除全局导入
|
// import { useWebSocketConnection } from './useWebSocketConnection'; // 移除全局导入
|
||||||
import type { ServerStatus } from '../types/server.types';
|
import type { ServerStatus } from '../types/server.types';
|
||||||
import type { WebSocketMessage, MessagePayload } from '../types/websocket.types';
|
import type { WebSocketMessage, MessagePayload } from '../types/websocket.types';
|
||||||
|
import { useLayoutStore } from '../stores/layout.store';
|
||||||
|
|
||||||
// 定义与 WebSocket 相关的依赖接口
|
// 定义与 WebSocket 相关的依赖接口
|
||||||
export interface StatusMonitorDependencies {
|
export interface StatusMonitorDependencies {
|
||||||
@@ -84,9 +85,15 @@ export function createStatusMonitorManager(sessionId: string, wsDeps: StatusMoni
|
|||||||
watch(isConnected, (newValue, oldValue) => {
|
watch(isConnected, (newValue, oldValue) => {
|
||||||
console.log(`[会话 ${sessionId}][状态监控模块] 连接状态变化: ${oldValue} -> ${newValue}`);
|
console.log(`[会话 ${sessionId}][状态监控模块] 连接状态变化: ${oldValue} -> ${newValue}`);
|
||||||
if (newValue) {
|
if (newValue) {
|
||||||
|
// 只有当状态监视器在布局中时才注册处理器
|
||||||
|
const layoutStore = useLayoutStore();
|
||||||
|
if (layoutStore.usedPanes.has('statusMonitor')) {
|
||||||
registerStatusHandlers();
|
registerStatusHandlers();
|
||||||
// 连接成功后,可以考虑请求一次初始状态(如果后端支持)
|
// 连接成功后,可以考虑请求一次初始状态(如果后端支持)
|
||||||
// sendMessage({ type: 'status:get', sessionId });
|
// sendMessage({ type: 'status:update', sessionId });
|
||||||
|
} else {
|
||||||
|
console.log(`[会话 ${sessionId}][状态监控模块] 状态监视器不在布局中,跳过注册处理器。`);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
unregisterAllStatusHandlers();
|
unregisterAllStatusHandlers();
|
||||||
// 连接断开时清除状态
|
// 连接断开时清除状态
|
||||||
|
|||||||
Reference in New Issue
Block a user