Commit bc12f89aad3370e6361a5c524b2d44bedfa5810c

Authored by Schwirg László
1 parent eeb190f8

v1.28.0.0

Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - CommandLineParser.cs
... ... @@ -276,6 +276,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.CommandLineParserNS
276 276 public static class GetRemoteInfo { public const string KEY = "RIN"; }
277 277 public static class Send { public const string KEY = "SND"; }
278 278 public static class Peek { public const string KEY = "PEK"; }
  279 + public static class Enumerate { public const string KEY = "ENU"; }
279 280 public static class Read{ public const string KEY = "RED"; }
280 281 public static class Purge { public const string KEY = "PRG"; }
281 282 }
... ...
Vrh.Log4Pro.MaintenanceConsole/Manager - MSMQManager.cs
... ... @@ -41,6 +41,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS
41 41 .AddMenuItem(new Menu.Item(CLP.Module.MSMQManager.Function.SetDefaultPermissions.KEY, "Set default MSMQ permisssions", SetDefaultPermissions, ep))
42 42 .AddMenuItem(new Menu.Item(CLP.Module.MSMQManager.Function.GetLocalInfo.KEY, "Get local MSMQ information", GetLocalInfo, ep))
43 43 .AddMenuItem(new Menu.Item(CLP.Module.MSMQManager.Function.GetRemoteInfo.KEY, "Get remote MSMQ information", GetRemoteInfo, ep))
  44 + .AddMenuItem(new Menu.Item(CLP.Module.MSMQManager.Function.Enumerate.KEY, "Enumerate MSMQ message", Enumerate, ep))
44 45 .AddMenuItem(new Menu.Item(CLP.Module.MSMQManager.Function.Peek.KEY, "Peek MSMQ message", Peek, ep))
45 46 .AddMenuItem(new Menu.Item(CLP.Module.MSMQManager.Function.Read.KEY, "Read MSMQ message", Read, ep))
46 47 .AddMenuItem(new Menu.Item(CLP.Module.MSMQManager.Function.Send.KEY, "Send MSMQ message", Send, ep))
... ... @@ -291,6 +292,81 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS
291 292 return o;
292 293 }
293 294  
  295 + private static object Enumerate(object parameter, object o)
  296 + {
  297 + var config = (parameter as Menu.ExecutorParameter).GetConfig<MSMQManagerXmlProcessor>();
  298 + var args = (parameter as Menu.ExecutorParameter).Args;
  299 +
  300 + var selectedtaskindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.ScheduledTaskManager.Function.CMD_TASKS);
  301 +
  302 + var menufolders = DisplayMSMQMenuFromXml(config, $"Select the MSMQ(s) to manage with function '{nameof(Enumerate)}'!", silent: true)
  303 + .SetSelectionMode(Menu.SelectionMode.Single);
  304 +
  305 + Menu.Selection sr = menufolders.Select(selectedtaskindexes);
  306 + if (sr.Result == Menu.SelectionResult.Exit) { return o; }
  307 + else if (sr.Result == Menu.SelectionResult.None) { return o; }
  308 + else if (sr.Result == Menu.SelectionResult.Error) { return o; }
  309 + else if (sr.Result == Menu.SelectionResult.Ok) { }
  310 + else { }
  311 + foreach (var p in sr.SelectedParameterList)
  312 + {
  313 + MSMQ st = p.Parameters as MSMQ;
  314 + try
  315 + {
  316 + var messageformatter = MSMQManagerCore.SetFormatter(st.Xml_Formatter); //new ActiveXMessageFormatter();
  317 + var encoding = MSMQManagerCore.SetEncoding(st.Xml_Encoding); // Encoding.UTF8;
  318 + var fullpath = st.Xml_FullPath;
  319 +
  320 + using (var msmq = new MessageQueue(fullpath))
  321 + {
  322 + msmq.Formatter = messageformatter;
  323 + startenumeration:
  324 + var enumerator = msmq.GetMessageEnumerator2();
  325 + int messageindex = 0;
  326 + while (true)
  327 + {
  328 + try
  329 + {
  330 + var isnextmeessageavailable = enumerator.MoveNext(new TimeSpan(0, 0, 5));
  331 + if (!isnextmeessageavailable) { ColorConsole.WriteLine("No (more) message available....", ConsoleColor.White); break; }
  332 +
  333 + Message m = enumerator.Current;
  334 + ColorConsole.WriteLine("Processing message....", ConsoleColor.White);
  335 +
  336 + string msgBody = null;
  337 + if (m.Formatter is XmlMessageFormatter)
  338 + {
  339 + ((XmlMessageFormatter)m.Formatter).TargetTypes = new Type[] { typeof(string), };
  340 + msgBody = (string)m.Body;
  341 + }
  342 + else
  343 + {
  344 + if (encoding == null) { msgBody = (string)m.Body; }
  345 + else { msgBody = (new StreamReader(m.BodyStream, encoding)).ReadToEnd(); }
  346 + }
  347 + var msglabel = m.Label;
  348 + ColorConsole.WriteLine($"Current message in MSMQ:{st.Xml_Name}", ConsoleColor.Green);
  349 + ColorConsole.WriteLine($" Body: {msgBody}", ConsoleColor.Yellow);
  350 + ColorConsole.WriteLine($" Label: {msglabel}", ConsoleColor.Yellow);
  351 +
  352 + var nextoption = ColorConsole.ReadLine("[Enter]=Move next, RC=Remove current and move next, RCR=Remove current, reset and move next, RESET=reset and move next or EX=Exit");
  353 + if (nextoption.ToLower() == "ex") { return o; }
  354 + else if (nextoption.ToLower() == "reset") { enumerator.Reset(); }
  355 + else if (nextoption.ToLower() == "rc") { enumerator.RemoveCurrent(); }
  356 + else if (nextoption.ToLower() == "rcr") { enumerator.RemoveCurrent(); enumerator.Reset(); }
  357 + }
  358 + catch (Exception ex) { ColorConsole.WriteLine("B:"+ex.MessageNested(), ConsoleColor.Red); }
  359 + }
  360 + var repeatoption = ColorConsole.ReadLine("[Enter]=Repeat enumeration, EX=Exit");
  361 + if (repeatoption.ToLower() == "ex") { return o; }
  362 + else { goto startenumeration; }
  363 + }
  364 + }
  365 + catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); }
  366 + }
  367 + return o;
  368 + }
  369 +
294 370 private static object Peek(object parameter, object o)
295 371 {
296 372 var config = (parameter as Menu.ExecutorParameter).GetConfig<MSMQManagerXmlProcessor>();
... ...
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
... ... @@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
32 32 // You can specify all the values or you can default the Build and Revision Numbers
33 33 // by using the '*' as shown below:
34 34 // [assembly: AssemblyVersion("1.0.*")]
35   -[assembly: AssemblyVersion("1.27.2.0")]
36   -[assembly: AssemblyFileVersion("1.27.2.0")]
  35 +[assembly: AssemblyVersion("1.28.0.0")]
  36 +[assembly: AssemblyFileVersion("1.28.0.0")]
... ...