// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:io';

import 'package:analysis_server/lsp_protocol/protocol.dart';
import 'package:analysis_server/src/lsp/handlers/handlers.dart';

class ExitMessageHandler extends MessageHandler<void, void> {
  final bool clientDidCallShutdown;

  ExitMessageHandler(
    super.server, {
    this.clientDidCallShutdown = false,
  });

  @override
  Method get handlesMessage => Method.exit;

  @override
  LspJsonHandler<void> get jsonHandler => NullJsonHandler;

  @override
  Future<ErrorOr<void>> handle(
      void _, MessageInfo message, CancellationToken token) async {
    // Set a flag that the server shutdown is being controlled here to ensure
    // that the normal code that shuts down the server when the channel closes
    // does not fire.
    server.willExit = true;

    await server.shutdown();
    Future(() {
      exit(clientDidCallShutdown ? 0 : 1);
    });
    return success(null);
  }
}
