// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers // // SPDX-License-Identifier: MPL-2.0 import Foundation import JSONRPC import LanguageServer import LanguageServerProtocol import Logging final class Server { private let connection: JSONRPCClientConnection private let eventHandler: EventHandler init() { let channel = DataChannel.stdio() connection = JSONRPCClientConnection(channel) eventHandler = EventHandler(connection: connection) } func start() async throws { do { Logger.shared.debug("Starting") try await startEventLoop() } catch { Logger.shared.error("Server error: \(error)") throw error } } func startEventLoop() async throws { for await event in await connection.eventSequence { try await handle(event: event) } } func handle(event: ClientEvent) async throws { switch event { case .request(let id, let request): await eventHandler.handleRequest(id: id, request: request) case .notification(let notification): await eventHandler.handleNotification(notification) case .error(_): () } } } @main struct PterodactylLanguageServer { static func main() async throws { let server = Server() try await server.start() } }