@@ -10,30 +10,19 @@ import { createLogger } from './utils/logger';
1010import * as storeUtils from './utils/store' ;
1111import type { ServerState , FigmaAuthState } from '../shared/types' ;
1212import { registerMcpConfigHandlers } from './handlers/mcp-config-handler' ;
13- import { trackTutorialAction , trackThemeChange , trackPageView } from './analytics' ;
13+ import { trackTutorialAction , trackThemeChange , trackPageView , trackServerAction } from './analytics' ;
1414import { checkForUpdates } from './utils/updater' ;
15+ import { TalkToFigmaService } from './server/TalkToFigmaService' ;
1516
1617const logger = createLogger ( 'IPC' ) ;
1718
18- // Placeholder for server manager (will be implemented in Phase 2)
19- let serverManager : {
20- start : ( ) => Promise < void > ;
21- stop : ( ) => Promise < void > ;
22- restart : ( ) => Promise < void > ;
23- getStatus : ( ) => ServerState ;
24- } | null = null ;
25-
26- // Placeholder for auth manager (will be implemented in Phase 4)
19+ // Auth manager (set by main.ts after initialization)
2720let authManager : {
2821 startOAuth : ( ) => Promise < void > ;
2922 logout : ( ) => Promise < void > ;
3023 getStatus : ( ) => FigmaAuthState ;
3124} | null = null ;
3225
33- export function setServerManager ( manager : typeof serverManager ) : void {
34- serverManager = manager ;
35- }
36-
3726export function setAuthManager ( manager : typeof authManager ) : void {
3827 authManager = manager ;
3928}
@@ -44,38 +33,67 @@ export function registerIpcHandlers(mainWindow: BrowserWindow): void {
4433 // ===== Server Control =====
4534 ipcMain . handle ( IPC_CHANNELS . SERVER_START , async ( ) => {
4635 logger . info ( 'IPC: server:start' ) ;
47- if ( ! serverManager ) {
48- throw new Error ( 'Server manager not initialized' ) ;
36+ const service = TalkToFigmaService . getInstance ( ) ;
37+ const startTime = Date . now ( ) ;
38+ const result = await service . startAll ( { showNotification : false } ) ;
39+ if ( ! result . success ) {
40+ trackServerAction ( 'start' , 'all' , 3055 , undefined , false , result . error ) ;
41+ throw new Error ( result . error || 'Failed to start servers' ) ;
4942 }
50- await serverManager . start ( ) ;
43+ trackServerAction ( 'start' , 'all' , 3055 , Date . now ( ) - startTime , true ) ;
5144 } ) ;
5245
5346 ipcMain . handle ( IPC_CHANNELS . SERVER_STOP , async ( ) => {
5447 logger . info ( 'IPC: server:stop' ) ;
55- if ( ! serverManager ) {
56- throw new Error ( 'Server manager not initialized' ) ;
48+ const service = TalkToFigmaService . getInstance ( ) ;
49+ const result = await service . stopAll ( { showNotification : false } ) ;
50+ if ( ! result . success ) {
51+ trackServerAction ( 'stop' , 'all' , 3055 , undefined , false , result . error ) ;
52+ throw new Error ( result . error || 'Failed to stop servers' ) ;
5753 }
58- await serverManager . stop ( ) ;
54+ trackServerAction ( 'stop' , 'all' , 3055 , undefined , true ) ;
5955 } ) ;
6056
6157 ipcMain . handle ( IPC_CHANNELS . SERVER_RESTART , async ( ) => {
6258 logger . info ( 'IPC: server:restart' ) ;
63- if ( ! serverManager ) {
64- throw new Error ( 'Server manager not initialized' ) ;
59+ const service = TalkToFigmaService . getInstance ( ) ;
60+ await service . stopAll ( { showNotification : false } ) ;
61+ await new Promise ( resolve => setTimeout ( resolve , 1000 ) ) ;
62+ const result = await service . startAll ( { showNotification : false } ) ;
63+ if ( ! result . success ) {
64+ trackServerAction ( 'restart' , 'all' , 3055 , undefined , false , result . error ) ;
65+ throw new Error ( result . error || 'Failed to restart servers' ) ;
6566 }
66- await serverManager . restart ( ) ;
67+ trackServerAction ( 'restart' , 'all' , 3055 , undefined , true ) ;
6768 } ) ;
6869
6970 ipcMain . handle ( IPC_CHANNELS . SERVER_GET_STATUS , async ( ) => {
70- if ( ! serverManager ) {
71+ const service = TalkToFigmaService . getInstance ( ) ;
72+ const result = service . getStatus ( ) ;
73+ if ( result . success && result . status ) {
74+ const figmaState = result . status ;
7175 return {
72- websocket : { status : 'stopped' , port : 3055 , connectedClients : 0 } ,
73- mcp : { status : 'stopped' , port : 3056 } ,
76+ websocket : {
77+ status : figmaState . websocket . running ? 'running' : 'stopped' ,
78+ port : figmaState . websocket . port ,
79+ connectedClients : figmaState . websocket . clientCount || 0 ,
80+ mcpClientCount : figmaState . websocket . mcpClientCount ,
81+ figmaClientCount : figmaState . websocket . figmaClientCount ,
82+ } ,
83+ mcp : {
84+ status : 'running' ,
85+ transport : 'stdio' ,
86+ } ,
7487 operationInProgress : false ,
7588 lastError : null ,
7689 } as ServerState ;
7790 }
78- return serverManager . getStatus ( ) ;
91+ return {
92+ websocket : { status : 'stopped' , port : 3055 , connectedClients : 0 } ,
93+ mcp : { status : 'stopped' , port : 3056 } ,
94+ operationInProgress : false ,
95+ lastError : result . error || null ,
96+ } as ServerState ;
7997 } ) ;
8098
8199 // ===== Authentication =====
0 commit comments