예제 #1
0
        private static IJsonRpcServiceHost BuildServiceHost(TextWriter logWriter,
                                                            IJsonRpcContractResolver contractResolver, bool debugMode)
        {
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(new DebugLoggerProvider(null));

            var builder = new JsonRpcServiceHostBuilder {
                ContractResolver = contractResolver,
                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());
        }
예제 #2
0
        private static IJsonRpcServiceHost BuildServiceHost(TextWriter logWriter,
                                                            IJsonRpcContractResolver contractResolver, bool debugMode)
        {
            var loggerFactory = LoggerFactory.Create(builder => builder.AddDebug());

            if (debugMode)
            {
                loggerFactory.AddFile("logs-" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".log");
            }
            var builder = new JsonRpcServiceHostBuilder
            {
                ContractResolver = contractResolver,
                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} > {1}", Utility.GetTimeStamp(), context.Request);
                    await next();
                    lock (logWriter) logWriter.WriteLine("{0} < {1}", Utility.GetTimeStamp(), context.Response);
                });
            }
            return(builder.Build());
        }
예제 #3
0
 static void Main(string[] args)
 {
     using (Stream cin = Console.OpenStandardInput())
         using (BufferedStream bcin = new BufferedStream(cin))
             using (Stream cout = Console.OpenStandardOutput())
                 using (PartwiseStreamMessageReader reader = new PartwiseStreamMessageReader(bcin))
                     using (PartwiseStreamMessageWriter writer = new PartwiseStreamMessageWriter(cout))
                     {
                         JsonRpcContractResolver contractResolver = new JsonRpcContractResolver
                         {
                             NamingStrategy          = new CamelCaseJsonRpcNamingStrategy(),
                             ParameterValueConverter = new CamelCaseJsonValueConverter(),
                         };
                         StreamRpcClientHandler clientHandler = new StreamRpcClientHandler();
                         JsonRpcClient          client        = new JsonRpcClient(clientHandler);
                         clientHandler.MessageSending += (_, e) =>
                         {
                             Console.Error.WriteLine("Sending: " + e.Message);
                         };
                         clientHandler.MessageReceiving += (_, e) =>
                         {
                             Console.Error.WriteLine("Receiving: " + e.Message);
                         };
                         LanguageServerSession     session = new LanguageServerSession(client, contractResolver);
                         JsonRpcServiceHostBuilder builder = new JsonRpcServiceHostBuilder {
                             ContractResolver = contractResolver
                         };
                         builder.UseCancellationHandling();
                         builder.Register(typeof(Program).GetTypeInfo().Assembly);
                         builder.Intercept(async(context, next) =>
                         {
                             Console.Error.WriteLine("Request: " + context.Request);
                             await next();
                             Console.Error.WriteLine("Response: " + context.Response);
                         });
                         IJsonRpcServiceHost    host          = builder.Build();
                         StreamRpcServerHandler serverHandler = new StreamRpcServerHandler(host,
                                                                                           StreamRpcServerHandlerOptions.ConsistentResponseSequence | StreamRpcServerHandlerOptions.SupportsRequestCancellation);
                         serverHandler.DefaultFeatures.Set(session);
                         using (serverHandler.Attach(reader, writer))
                             using (clientHandler.Attach(reader, writer))
                             {
                                 // Wait for the "stop" request.
                                 session.CancellationToken.WaitHandle.WaitOne();
                             }
                     }
 }
예제 #4
0
        private static IJsonRpcServiceHost ServiceHostFactory(IComponentContext context)
        {
            var builder = new JsonRpcServiceHostBuilder
            {
                ContractResolver = myContractResolver,
                LoggerFactory    = context.Resolve <ILoggerFactory>(),
                ServiceFactory   = new AutofacServiceFactory(context.Resolve <ILifetimeScope>())
            };

            builder.Register(typeof(Program).GetTypeInfo().Assembly);
            if (context.Resolve <ApplicationConfiguration>().Debug)
            {
                var logger = context.Resolve <ILoggerFactory>().CreateLogger("SERVER");
                // Log all the client-to-server calls.
                builder.Intercept(async(ctx, next) =>
                {
                    logger.LogTrace("> {@Request}", ctx.Request);
                    await next();
                    logger.LogTrace("< {@Response}", ctx.Response);
                });
            }
            builder.UseCancellationHandling();
            return(builder.Build());
        }