1:- module(language_server,[
    2
    3  run_stdio_language_server/0,
    4  run_tcp_language_server/1,
    5
    6  start_tcp_language_server/1,
    7  stop_tcp_language_server/1
    8
    9]).   10
   11:- use_module(library(http/json)).   12:- use_module(library(http/json_convert)).   13:- use_module(library(socket)).   14
   15:- use_module(library(log4p)).   16:- use_module(jsonrpc/connectors).   17:- use_module(methods).   18
   19% Run a language server synchronously in this process using stdio for streams; 
   20% does not return until server exits
   21run_stdio_language_server :-
   22  ServerName = prolog_language_server,
   23  create_stdio_server(ServerName, Server),
   24  debug('Starting %w on stdio',[ServerName]),
   25  serve_messages(Server).
   26
   27run_tcp_language_server(Port) :-
   28  create_tcp_server(prolog_language_server, Port,Server),
   29  serve_messages(Server).
   30
   31% Run a language server asynchronously in a separate thread;
   32% returns immediately, but server can be stopped with 
   33% stop_tcp_language_server and the same arguments.
   34start_tcp_language_server(Port) :-
   35  start_jsonrpc_server(prolog_language_server, Port).
   36
   37stop_tcp_language_server(Port) :-
   38  stop_jsonrpc_server(prolog_language_server, Port)