Esempio n. 1
0
        private static IJsonRpcServiceHost BuildServiceHost(ISession session, TextWriter logWriter,
                                                            IJsonRpcContractResolver contractResolver, bool debugMode)
        {
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(new DebugLoggerProvider(null));
            var builder = new ServiceHostBuilder
            {
                ContractResolver = contractResolver,
                Session          = session,
                Options          = JsonRpcServiceHostOptions.ConsistentResponseSequence,
                LoggerFactory    = loggerFactory
            };

            builder.UseCancellationHandling();
            builder.Register(typeof(Program).GetTypeInfo().Assembly);
            if (debugMode)
            {
                // Log all the client-to-server calls.
                builder.Intercept(async(context, next) =>
                {
                    lock (logWriter) logWriter.WriteLine("> {0}", context.Request);
                    await next();
                    lock (logWriter) logWriter.WriteLine("< {0}", context.Response);
                });
            }
            return(builder.Build());
        }
Esempio n. 2
0
 /// <summary>
 /// Interprets any <see cref="OperationCanceledException" /> thrown by the service
 /// as <c>RequestCancelled</c> error per definition in Language Server Protocol.
 /// </summary>
 public static void UseCancellationHandling(this ServiceHostBuilder builder)
 {
     if (builder == null)
     {
         throw new ArgumentNullException(nameof(builder));
     }
     builder.Intercept(async(context, next) =>
     {
         try
         {
             await next();
         }
         catch (OperationCanceledException ex)
         {
             if (ex.CancellationToken == context.CancellationToken ||
                 ex.CancellationToken == CancellationToken.None)
             {
                 context.Response.Error = new ResponseError(Utility.RequestCancelledErrorCode, ex.Message);
             }
         }
     });
 }