Ejemplo n.º 1
0
 private bool TryGetWrapper(long id, out WrapperProcess wrapperProcess)
 {
     lock (_wrappersLock)
     {
         return(_wrappers.TryGetValue(id, out wrapperProcess));
     }
 }
Ejemplo n.º 2
0
 private void AddWrapper(WrapperProcess wrapperProcess)
 {
     lock (_wrappersLock)
     {
         _wrappers[wrapperProcess.ID] = wrapperProcess;
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Stop the running process.
        /// </summary>
        public virtual void Exit()
        {
            HandleLines = false;

            if (WrapperProcess != null && !WrapperProcess.HasExited)
            {
                WriteLine("exit");

                WrapperProcess.WaitForExit(60000);

                if (!WrapperProcess.HasExited)
                {
                    WrapperProcess.Kill();
                    WrapperProcess.WaitForExit();
                }

                WrapperProcess.Close();
            }
        }
Ejemplo n.º 4
0
        private async Task <string> RunHandlerAsync(HandlerOptions options)
        {
            var  wrapperProcess   = new WrapperProcess(options);
            long wrapperProcessID = wrapperProcess.ID;

            string retstr;

            Log.Information("Running handler[{0}]: \"{1}\"", wrapperProcessID, options.Path);

            try
            {
                wrapperProcess.Start();

                await Task.Delay(Const.WrapperInitTimeout);

                var initResult = await _client.SendMessageAsync(wrapperProcess.Port, true, null, (Headers.Command, HandlerCommands.InitInfo));

                string message = await initResult.GetMessageAsync();

                if (initResult.IsSuccessStatusCode)
                {
                    AddWrapper(wrapperProcess);

                    _ = Task.Run(async() =>
                    {
                        try
                        {
                            await wrapperProcess.ProcessDeathWaiting;
                        }
                        catch (TaskCanceledException)
                        {
                            return;
                        }

                        RemoveWrapper(wrapperProcess.ID);
                    });

                    retstr = "Handler[{0}] has started successfully: {1}";
                    Log.Information(retstr, wrapperProcessID, message);
                }
                else
                {
                    retstr = "Handler[{0}] failed to start: {1}";
                    Log.Error(retstr, wrapperProcessID, message);
                }

                retstr = string.Format(retstr, wrapperProcessID, message);
            }
            catch (Exception ex)
            {
                if (ex is HttpRequestException)
                {
                    retstr = "Handler[{0}] is unavailable: {1}";
                    Log.Error(retstr, wrapperProcessID, ex);
                }
                else
                {
                    retstr = "Exception while trying to run handler[{0}]: {1}";
                    Log.Error(retstr, wrapperProcessID, ex);
                }

                retstr = string.Format(retstr, wrapperProcessID, ex);
            }

            return(retstr);
        }