diff --git a/arduino-debugger-extension/src/browser/arduino-debug-session-manager.ts b/arduino-debugger-extension/src/browser/arduino-debug-session-manager.ts new file mode 100644 index 00000000..79f81d58 --- /dev/null +++ b/arduino-debugger-extension/src/browser/arduino-debug-session-manager.ts @@ -0,0 +1,14 @@ +import { DebugSessionManager } from "@theia/debug/lib/browser/debug-session-manager"; +import { DebugSessionOptions } from "@theia/debug/lib/browser/debug-session-options"; + +export class ArduinoDebugSessionManager extends DebugSessionManager { + + start(options: DebugSessionOptions) { + if (options.configuration.type === 'arduino' && this.sessions.find(s => s.configuration.type === 'arduino')) { + this.messageService.info('A debug session is already running. You must stop the running session before starting a new one.') + return Promise.resolve(undefined); + } + return super.start(options); + } + +} diff --git a/arduino-debugger-extension/src/browser/frontend-module.ts b/arduino-debugger-extension/src/browser/frontend-module.ts index f3223dba..d02ff16e 100644 --- a/arduino-debugger-extension/src/browser/frontend-module.ts +++ b/arduino-debugger-extension/src/browser/frontend-module.ts @@ -1,14 +1,17 @@ import { ContainerModule } from 'inversify'; import { VariableContribution } from '@theia/variable-resolver/lib/browser'; import { ArduinoVariableResolver } from './arduino-variable-resolver'; +import { DebugSessionManager } from '@theia/debug/lib/browser/debug-session-manager'; import { DebugFrontendApplicationContribution } from '@theia/debug/lib/browser/debug-frontend-application-contribution'; import { DebugConfigurationManager } from '@theia/debug/lib/browser/debug-configuration-manager'; import { ArduinoDebugConfigurationManager } from './arduino-debug-configuration-manager'; import { ArduinoDebugFrontendApplicationContribution } from './arduino-debug-frontend-application-contribution'; +import { ArduinoDebugSessionManager } from './arduino-debug-session-manager'; export default new ContainerModule((bind, unbind, isBound, rebind) => { bind(ArduinoVariableResolver).toSelf().inSingletonScope(); bind(VariableContribution).toService(ArduinoVariableResolver); + rebind(DebugSessionManager).to(ArduinoDebugSessionManager).inSingletonScope(); rebind(DebugConfigurationManager).to(ArduinoDebugConfigurationManager).inSingletonScope(); rebind(DebugFrontendApplicationContribution).to(ArduinoDebugFrontendApplicationContribution); });