diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-05 12:29:15 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-05 12:29:15 +0200 |
| commit | ba49db54c7b94315a55bed9ae10fe06e7a65cd33 (patch) | |
| tree | abc2b166a77dba28e0ac0707a07f4af4f5e7bb8f /Software/Visual_Studio/Utilities/Tango.Stubs.CLI | |
| parent | 99ce3aa122c0d8f4703e0d5c43776f2658ac5392 (diff) | |
| download | Tango-ba49db54c7b94315a55bed9ae10fe06e7a65cd33.tar.gz Tango-ba49db54c7b94315a55bed9ae10fe06e7a65cd33.zip | |
Improved stubexec CLI !
Diffstat (limited to 'Software/Visual_Studio/Utilities/Tango.Stubs.CLI')
| -rw-r--r-- | Software/Visual_Studio/Utilities/Tango.Stubs.CLI/Program.cs | 53 |
1 files changed, 42 insertions, 11 deletions
diff --git a/Software/Visual_Studio/Utilities/Tango.Stubs.CLI/Program.cs b/Software/Visual_Studio/Utilities/Tango.Stubs.CLI/Program.cs index 0e8a530a2..a98072458 100644 --- a/Software/Visual_Studio/Utilities/Tango.Stubs.CLI/Program.cs +++ b/Software/Visual_Studio/Utilities/Tango.Stubs.CLI/Program.cs @@ -33,7 +33,7 @@ namespace Tango.Stubs.CLI String comPort = args[0].ToUpper(); String stubName = args[1]; - var stubType = GetAvailableRequestStubs().SingleOrDefault(x => x.Name.ToLower() == stubName.ToLower() || x.Name.Replace("Request", "").ToLower() == stubName.ToLower()); + var stubType = GetAvailableRequestResponseStubs().SingleOrDefault(x => x.Name.ToLower() == stubName.ToLower() || x.Name.Replace("Request", "").ToLower() == stubName.ToLower()); if (stubType == null) { PrintError("Invalid stub '" + stubName + "'."); @@ -50,7 +50,7 @@ namespace Tango.Stubs.CLI { MessageContainer container = new MessageContainer(); container.Token = Guid.NewGuid().ToString(); - container.Type = MessageFactory.ParseMessageType(stubType.Name); + container.Type = ParseMessageType(stubType.Name); Object request = Activator.CreateInstance(stubType); @@ -96,21 +96,23 @@ namespace Tango.Stubs.CLI adapter.DataAvailable += (sender, data) => { - responseContainer = MessageFactory.ParseContainer(data); + responseContainer = ParseContainer(data); }; while (responseContainer == null) { Thread.Sleep(10); - if (DateTime.Now > startTime.AddSeconds(2)) + if (DateTime.Now > startTime.AddSeconds(5)) { - PrintError("Response has failed to arrive after 2 seconds."); + PrintError("Response has failed to arrive after 5 seconds."); } } Console.WriteLine("Response Received:"); - IMessage message = MessageFactory.ExtractMessageFromContainer(responseContainer); + var type = typeof(MessageFactory).Assembly.GetType("Tango.PMR.Stubs." + responseContainer.Type.ToString()); + MessageParser parser = type.GetProperty("Parser").GetValue(container) as MessageParser; + IMessage message = parser.ParseFrom(container.Data); Console.WriteLine(JsonConvert.SerializeObject(message, Formatting.Indented)); done = true; }); @@ -144,15 +146,20 @@ namespace Tango.Stubs.CLI Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().MainModule.FileName))); Console.WriteLine(); - Console.WriteLine("Available Request Stubs:"); + Console.WriteLine("Available Stubs:"); int stubCount = 1; - foreach (var stub in GetAvailableRequestStubs()) + foreach (var stub in GetAvailableRequestResponseStubs()) { Console.WriteLine(); - Console.WriteLine((stubCount++) + ". " + stub.Name + ":"); + + if ((stubCount++) % 2 != 0) + { + Console.WriteLine("-----------------------------------------------------------------------------------"); + } + Console.WriteLine(stub.Name + ":"); int paramCount = 1; @@ -183,9 +190,33 @@ namespace Tango.Stubs.CLI Environment.Exit(0); } - private static List<Type> GetAvailableRequestStubs() + private static List<Type> GetAvailableRequestResponseStubs() + { + return typeof(MessageFactory).Assembly.GetTypes().Where(x => x.Namespace != null && x.Namespace.Contains("Stubs") && (x.Name.Contains("Request") || x.Name.Contains("Response")) && !x.Name.Contains("Reflection")).ToList(); + } + + public static MessageType ParseMessageType(String text) + { + MessageType t; + if (Enum.TryParse<MessageType>(text, true, out t)) + { + return t; + } + else + { + throw new InvalidCastException("Message type " + text + " was not found on PMR MessageType enumeration!"); + } + } + + /// <summary> + /// Parses a message container from the specified byte array. + /// </summary> + /// <param name="data">The data.</param> + /// <returns></returns> + public static MessageContainer ParseContainer(byte[] data) { - return typeof(MessageFactory).Assembly.GetTypes().Where(x => x.Namespace != null && x.Namespace.Contains("Stubs") && x.Name.Contains("Request") && !x.Name.Contains("Reflection")).ToList(); + MessageContainer container = MessageContainer.Parser.ParseFrom(data); + return container; } } } |
