class VNCServerApp { constructor() { this.apiBase = '/api/vncserver'; this.init(); } init() { this.bindEvents(); this.loadServerList(); this.checkVNCStatus(); } bindEvents() { // 서버 추가 버튼 document.getElementById('addServerBtn').addEventListener('click', () => { this.showServerModal(); }); // 설정 버튼 document.getElementById('settingsBtn').addEventListener('click', () => { this.showSettingsModal(); }); // 모달 취소 버튼 document.getElementById('cancelBtn').addEventListener('click', () => { this.hideServerModal(); }); document.getElementById('settingsCancelBtn').addEventListener('click', () => { this.hideSettingsModal(); }); // 서버 폼 제출 document.getElementById('serverForm').addEventListener('submit', (e) => { e.preventDefault(); this.saveServer(); }); // 설정 폼 제출 document.getElementById('settingsForm').addEventListener('submit', (e) => { e.preventDefault(); this.saveSettings(); }); // VNC 경로 찾아보기 버튼 document.getElementById('browseVncBtn').addEventListener('click', () => { this.browseVNCViewer(); }); // 확인 모달 이벤트 document.getElementById('confirmCancel').addEventListener('click', () => { this.hideConfirmModal(); }); document.getElementById('confirmOk').addEventListener('click', () => { this.executeConfirmAction(); }); } async loadServerList() { try { const response = await fetch(`${this.apiBase}/list`); if (!response.ok) throw new Error('서버 목록을 불러올 수 없습니다.'); const servers = await response.json(); this.renderServerList(servers); } catch (error) { this.showError('서버 목록을 불러오는 중 오류가 발생했습니다: ' + error.message); } } renderServerList(servers) { const serverList = document.getElementById('serverList'); if (servers.length === 0) { serverList.innerHTML = `
등록된 서버가 없습니다.
새 서버를 추가해보세요.
IP: ${this.escapeHtml(server.ip)}
${server.category ? `카테고리: ${this.escapeHtml(server.category)}
` : ''} ${server.description ? `설명: ${this.escapeHtml(server.description)}
` : ''} ${server.argument ? `인수: ${this.escapeHtml(server.argument)}
` : ''}