Projekt

Obecné

Profil

Stáhnout (3.14 KB) Statistiky
| Větev: | Tag: | Revize:
1
using System.Diagnostics;
2
using LDClient.utils;
3
using LDClient.utils.loggers;
4

    
5
namespace LDClient.detection {
6

    
7
    public class T32RemFetcher : AInfoFetcher{
8

    
9
        /// <summary>
10
        /// Path to the t32rem.exe file which is used to send commands to the debugger.
11
        /// </summary>
12
        private readonly string _f32RemExecutable;
13

    
14
        /// <summary>
15
        /// Arguments (commands) sent to the debugger in order to generate a .txt file
16
        /// containing all the desired information.
17
        /// </summary>
18
        private readonly string[] _f32RemArguments;
19

    
20
        /// <summary>
21
        /// Status code indicating a successful termination of t32rem.exe
22
        /// </summary>
23
        private readonly int _f32SuccessExitCode;
24

    
25

    
26
        /// <summary>
27
        /// Timeout used when waiting for the t32rem.exe to finish.
28
        /// </summary>
29
        private readonly int _f32WaitTimeoutMs;
30

    
31
        /// <summary>
32
        /// Instance of ProcessUtils which encapsulates common functionality
33
        /// when it comes to dealing with processes (limited by the needs of this application).
34
        /// </summary>
35
        public IProcessUtils ProcessUtils;
36

    
37
        /// <summary>
38
        /// Creates an instance of this class.
39
        /// </summary>
40
        /// <param name="maxAttempts">Maximum number of attempts to locate and parse the .txt file</param>
41
        /// <param name="waitPeriodMs">Period (how often) the application tries to locate and parse the .txt file</param>
42
        /// <param name="infoFilePath">Path to the .txt file which is generated from the debugger</param>
43
        /// <param name="f32RemExecutable">Path to the t32rem.exe file which is used to send commands to the debugger</param>
44
        /// <param name="f32RemArguments">Arguments (commands) sent to the debugger in order to generate a .txt file containing all the desired information.</param>
45
        /// <param name="f32SuccessExitCode">Status code indicating a successful termination of t32rem.exe</param>
46
        /// <param name="f32WaitTimeoutMs">Timeout used when waiting for the t32rem.exe to finish</param>
47

    
48
        public T32RemFetcher(uint maxAttempts, uint waitPeriodMs, string infoFilePath, string f32RemExecutable,
49
            string[] f32RemArguments, int f32SuccessExitCode, int f32WaitTimeoutMs) : base(maxAttempts, waitPeriodMs, infoFilePath) {
50
            _f32RemExecutable = f32RemExecutable;
51
            _f32RemArguments = f32RemArguments;
52
            _f32SuccessExitCode = f32SuccessExitCode;
53
            _f32WaitTimeoutMs = f32WaitTimeoutMs;
54
            ProcessUtils = new ProcessUtils();
55

    
56
        }
57

    
58
        protected override bool FetchData() {
59
            if (_f32RemArguments == null) {
60
                Program.DefaultLogger.Error($"Failed to run {_f32RemExecutable} - no parameters were given");
61
                return false;
62
            }
63
            // Execute one all arguments (commands) one by one.
64
            foreach (var argument in _f32RemArguments) {
65
                if (!ProcessUtils.ExecuteNewProcess(_f32RemExecutable, argument, _f32WaitTimeoutMs, _f32SuccessExitCode)) {
66
                    return false;
67
                }
68
            }
69
            return true;
70
        }
71
    }
72
}
(10-10/10)