using System; using System.Runtime.InteropServices; using System.Windows.Forms; using Newtonsoft.Json; using System.IO; using System.Linq; using System.Collections.Generic; using System.Net; using System.Net.NetworkInformation; using System.Data; using System.Data.SqlClient; using FCOMMON; using Project.Web.Model; namespace Project.Web { // Important: Allows JavaScript to see this class [ClassInterface(ClassInterfaceType.AutoDual)] [ComVisible(true)] public partial class MachineBridge { // Reference to the main form to update logic private Dialog.fDashboard _host; // WebSocket 서버 인스턴스 private static Project.Web.WebSocketServer _wsServer; private static readonly object _wsLock = new object(); private const int WS_PORT = 8082; public MachineBridge(Dialog.fDashboard host) { _host = host; StartWebSocketServer(); } #region WebSocket Server Control /// /// WebSocket 서버 시작 /// private void StartWebSocketServer() { lock (_wsLock) { if (_wsServer != null) { Console.WriteLine("[WS] WebSocket server already running"); return; } try { string url = $"http://localhost:{WS_PORT}/"; _wsServer = new Project.Web.WebSocketServer(url, this); _wsServer.Start(); Console.WriteLine($"[WS] WebSocket server started on port {WS_PORT}"); } catch (Exception ex) { Console.WriteLine($"[WS] Failed to start WebSocket server: {ex.Message}"); } } } /// /// WebSocket 서버 중지 /// public static void StopWebSocketServer() { lock (_wsLock) { if (_wsServer != null) { _wsServer.Stop(); _wsServer = null; Console.WriteLine("[WS] WebSocket server stopped"); } } } /// /// WebSocket 서버 실행 여부 확인 /// public static bool IsWebSocketServerRunning() { lock (_wsLock) { return _wsServer != null; } } #endregion #region App Info /// /// 애플리케이션 버전 정보 반환 /// public string GetAppVersion() { try { return JsonConvert.SerializeObject(new { Success = true, ProductName = Application.ProductName, ProductVersion = Application.ProductVersion, DisplayVersion = $"{Application.ProductName} v{Application.ProductVersion}" }); } catch (Exception ex) { return JsonConvert.SerializeObject(new { Success = false, Message = ex.Message }); } } #endregion } /// /// 로그인 결과 클래스 /// public class LoginResult { public bool Success { get; set; } public string Message { get; set; } public string RedirectUrl { get; set; } public string UserName { get; set; } public string VersionWarning { get; set; } } }