Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if (!forced) {
filterRSPPredicate = serverR => serverR.state.state === ServerState.STARTED;
} else {
filterRSPPredicate = serverR => serverR.state.state === ServerState.STARTED ||
serverR.state.state === ServerState.STARTING ||
serverR.state.state === ServerState.STOPPING;
}
const rsp = await this.selectRSP('Select RSP provider you want to start', filterRSPPredicate);
if (!rsp || !rsp.id) return null;
context = this.explorer.RSPServersStatus.get(rsp.id).state;
}
if (context.state === ServerState.STARTED
|| context.state === ServerState.STARTING
|| context.state === ServerState.STOPPING) {
this.explorer.updateRSPServer(context.type.id, ServerState.STOPPING);
if (!forced) {
const client: RSPClient = this.explorer.getClientByRSP(context.type.id);
if (!client) {
return Promise.reject(`Failed to contact the RSP server ${context.type.visibilename}.`);
}
client.shutdownServer();
} else {
const rspProvider: RSPController = await Utils.activateExternalProvider(context.type.id);
await rspProvider.stopRSP().catch(err => {
// if stopRSP fails, server is still running
this.explorer.updateRSPServer(context.type.id, ServerState.STARTED);
return Promise.reject(`Failed to terminate ${context.type.visibilename} - ${err}`);
});
}
public async stopServer(forced: boolean, context?: ServerStateNode): Promise {
if (context === undefined) {
const rsp = await this.selectRSP('Select RSP provider you want to retrieve servers');
if (!rsp || !rsp.id) return null;
const serverFilter = server => server.state === ServerState.STARTED;
const serverId = await this.selectServer(rsp.id, 'Select server to stop.', serverFilter);
if (!serverId) return null;
context = this.explorer.getServerStateById(rsp.id, serverId);
}
const serverState = this.explorer.getServerStateById(context.rsp, context.server.id).state;
if ((!forced && serverState === ServerState.STARTED)
|| (forced && (serverState === ServerState.STARTING
|| serverState === ServerState.STOPPING))) {
const client: RSPClient = this.explorer.getClientByRSP(context.rsp);
if (!client) {
return Promise.reject('Failed to contact the RSP server.');
}
const status = await client.getOutgoingHandler().stopServerAsync(
{ id: context.server.id, force: forced }
);
if (this.debugSession.isDebuggerStarted()) {
await this.debugSession.stop();
}
if (!StatusSeverity.isOk(status)) {
return Promise.reject(status.message);
}
return status;
} else {
return Promise.reject('The server is already stopped.');