@@ -26,6 +26,7 @@ import { getStateMachine, openView, refreshUI } from '../stateMachine';
2626import { webviews } from '../visualizer/webview' ;
2727import { ViewColumn } from 'vscode' ;
2828import { COMMANDS } from '../constants' ;
29+ import { LOCALHOST , ADMIN , REMOTE } from './constants' ;
2930import { INCORRECT_SERVER_PATH_MSG } from './constants' ;
3031import { extension } from '../MIExtensionContext' ;
3132import { EVENT_TYPE , miServerRunStateChanged } from '@wso2/mi-core' ;
@@ -47,13 +48,39 @@ export class MiDebugAdapter extends LoggingDebugSession {
4748
4849 private variableHandles : Handles < any > ;
4950
50- public constructor ( private projectUri : string ) {
51+ public constructor ( private projectUri : string , session ?: vscode . DebugSession ) {
5152 super ( ) ;
5253 // debugger uses zero-based lines and columns
5354 this . setDebuggerLinesStartAt1 ( false ) ;
5455 this . setDebuggerColumnsStartAt1 ( false ) ;
5556
56- this . debuggerHandler = new Debugger ( DebuggerConfig . getCommandPort ( ) , DebuggerConfig . getEventPort ( ) , DebuggerConfig . getHost ( ) , projectUri ) ;
57+ const debuggerProperties = session ?. configuration ?. properties ;
58+ if ( debuggerProperties ) {
59+ DebuggerConfig . setRemoteDebuggingEnabled ( debuggerProperties . type === REMOTE ) ;
60+ } else {
61+ DebuggerConfig . setRemoteDebuggingEnabled ( false ) ;
62+ }
63+ if ( DebuggerConfig . isRemoteDebuggingEnabled ( ) ) {
64+ const commandPort = debuggerProperties . commandPort || 9005 ;
65+ const eventPort = debuggerProperties . eventPort || 9006 ;
66+ const serverHost = debuggerProperties . serverHost || LOCALHOST ;
67+ DebuggerConfig . setHost ( serverHost ) ;
68+ DebuggerConfig . setServerPort ( debuggerProperties . serverPort || 8290 ) ;
69+ DebuggerConfig . setServerReadinessPort ( debuggerProperties . serverReadinessPort || 9201 ) ;
70+ DebuggerConfig . setManagementPort ( debuggerProperties . managementPort || 9164 ) ;
71+ DebuggerConfig . setManagementUserName ( debuggerProperties . managementUsername || ADMIN ) ;
72+ DebuggerConfig . setManagementPassword ( debuggerProperties . managementPassword || ADMIN ) ;
73+ DebuggerConfig . setConnectionTimeout ( debuggerProperties . connectionTimeoutInSecs || 10 ) ;
74+ this . debuggerHandler = new Debugger ( commandPort , eventPort , serverHost , projectUri ) ;
75+ } else {
76+ DebuggerConfig . setHost ( LOCALHOST ) ;
77+ DebuggerConfig . setServerPort ( DebuggerConfig . getDefaultServerPort ( ) ) ;
78+ DebuggerConfig . setServerReadinessPort ( 9201 ) ;
79+ DebuggerConfig . setManagementPort ( 9164 ) ;
80+ DebuggerConfig . setManagementUserName ( ADMIN ) ;
81+ DebuggerConfig . setManagementPassword ( ADMIN ) ;
82+ this . debuggerHandler = new Debugger ( DebuggerConfig . getCommandPort ( ) , DebuggerConfig . getEventPort ( ) , DebuggerConfig . getHost ( ) , projectUri ) ;
83+ }
5784 // setup event handlers
5885 this . debuggerHandler . on ( 'stopOnEntry' , ( ) => {
5986 this . sendEvent ( new StoppedEvent ( 'entry' , MiDebugAdapter . threadID ) ) ;
@@ -284,10 +311,23 @@ export class MiDebugAdapter extends LoggingDebugSession {
284311
285312 DebuggerConfig . setVmArgs ( args ?. vmArgs ? args ?. vmArgs : [ ] ) ;
286313
287- await setManagementCredentials ( serverPath ) ;
288-
289314 vscode . commands . executeCommand ( 'setContext' , 'MI.isRunning' , 'true' ) ;
290- executeTasks ( this . projectUri , serverPath , isDebugAllowed )
315+ if ( DebuggerConfig . isRemoteDebuggingEnabled ( ) ) {
316+ this . debuggerHandler ?. initializeDebugger ( ) . then ( ( ) => {
317+ openRuntimeServicesWebview ( this . projectUri ) ;
318+ extension . isServerStarted = true ;
319+ RPCLayer . _messengers . get ( this . projectUri ) ?. sendNotification ( miServerRunStateChanged , { type : 'webview' , webviewType : 'micro-integrator.runtime-services-panel' } , 'Running' ) ;
320+ response . success = true ;
321+ this . sendResponse ( response ) ;
322+ } ) . catch ( error => {
323+ const completeError = `Error while initializing the Debugger: ${ error } ` ;
324+ vscode . window . showErrorMessage ( completeError ) ;
325+ this . sendError ( response , 1 , completeError ) ;
326+ vscode . commands . executeCommand ( 'setContext' , 'MI.isRunning' , 'false' ) ;
327+ } ) ;
328+ } else {
329+ await setManagementCredentials ( serverPath ) ;
330+ executeTasks ( this . projectUri , serverPath , isDebugAllowed )
291331 . then ( async ( ) => {
292332 if ( args ?. noDebug ) {
293333 checkServerReadiness ( this . projectUri ) . then ( ( ) => {
@@ -328,6 +368,7 @@ export class MiDebugAdapter extends LoggingDebugSession {
328368 }
329369 this . sendError ( response , 1 , completeError ) ;
330370 } ) ;
371+ }
331372 } ) ;
332373 }
333374 } ) ;
0 commit comments