Exemplo n.º 1
0
 public static async Task <int> runIpcServerTcpClientRouter(CancellationToken token, string ipcServer, string tcpClient, int runtimeTimeoutMs, TcpClientRouterFactory.CreateInstanceDelegate tcpClientRouterFactory, ILogger logger, Callbacks callbacks)
 {
     return(await runRouter(token, new IpcServerTcpClientRouterFactory(ipcServer, tcpClient, runtimeTimeoutMs, tcpClientRouterFactory, logger), callbacks).ConfigureAwait(false));
 }
        public async Task <int> RunIpcServerTcpClientRouter(CancellationToken token, string ipcServer, string tcpClient, int runtimeTimeout, string verbose, string forwardPort)
        {
            using CancellationTokenSource cancelRouterTask  = new CancellationTokenSource();
            using CancellationTokenSource linkedCancelToken = CancellationTokenSource.CreateLinkedTokenSource(token, cancelRouterTask.Token);

            LogLevel logLevel = LogLevel.Information;

            if (string.Compare(verbose, "debug", StringComparison.OrdinalIgnoreCase) == 0)
            {
                logLevel = LogLevel.Debug;
            }
            else if (string.Compare(verbose, "trace", StringComparison.OrdinalIgnoreCase) == 0)
            {
                logLevel = LogLevel.Trace;
            }

            using var factory = new LoggerFactory();
            factory.AddConsole(logLevel, false);

            Launcher.SuspendProcess = false;
            Launcher.ConnectMode    = false;
            Launcher.Verbose        = logLevel != LogLevel.Information;
            Launcher.CommandToken   = token;

            var logger = factory.CreateLogger("dotnet-dsrouter");

            TcpClientRouterFactory.CreateInstanceDelegate tcpClientRouterFactory = TcpClientRouterFactory.CreateDefaultInstance;
            if (!string.IsNullOrEmpty(forwardPort))
            {
                if (string.Compare(forwardPort, "android", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    tcpClientRouterFactory = ADBTcpClientRouterFactory.CreateADBInstance;
                }
                else if (string.Compare(forwardPort, "ios", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    tcpClientRouterFactory = USBMuxTcpClientRouterFactory.CreateUSBMuxInstance;
                }
                else
                {
                    logger.LogError($"Unknown port forwarding argument, {forwardPort}. Ignoring --forward-port argument.");
                }
            }

            var routerTask = DiagnosticsServerRouterRunner.runIpcServerTcpClientRouter(linkedCancelToken.Token, ipcServer, tcpClient, runtimeTimeout == Timeout.Infinite ? runtimeTimeout : runtimeTimeout * 1000, tcpClientRouterFactory, logger, Launcher);

            while (!linkedCancelToken.IsCancellationRequested)
            {
                await Task.WhenAny(routerTask, Task.Delay(250)).ConfigureAwait(false);

                if (routerTask.IsCompleted)
                {
                    break;
                }

                if (!Console.IsInputRedirected && Console.KeyAvailable)
                {
                    ConsoleKey cmd = Console.ReadKey(true).Key;
                    if (cmd == ConsoleKey.Q)
                    {
                        cancelRouterTask.Cancel();
                        break;
                    }
                }
            }

            return(routerTask.Result);
        }
 public IpcServerTcpClientRouterFactory(string ipcServer, string tcpClient, int runtimeTimeoutMs, TcpClientRouterFactory.CreateInstanceDelegate factory, ILogger logger)
 {
     _logger = logger;
     _ipcServerRouterFactory = new IpcServerRouterFactory(ipcServer, logger);
     _tcpClientRouterFactory = factory(tcpClient, runtimeTimeoutMs, logger);
 }