Commit f732e5c9d2a0f91b2e45a25836aae87329f4911a

Authored by Schwirg László
1 parent c4219940

v17.0.0

- messagequeue-ba küldés funkcióba beépítésre került az előre definiált üzenet templétek lehetősége,
- valamint több üzenet ciklikusban való elküldése ciklus és időbélyeg változók helyettesítésével
Vrh.Log4Pro.MaintenanceConsole/Manager - MSMQManager.cs
@@ -232,19 +232,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS @@ -232,19 +232,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS
232 { 232 {
233 var msmq = p.Parameters as MSMQ; 233 var msmq = p.Parameters as MSMQ;
234 msmq.DisplayInfo(); ix++; 234 msmq.DisplayInfo(); ix++;
235 - var sp = SendParameters.Get(msmq.Xml_Encoding, msmq.Xml_Formatter); 235 + var sp = SendParameters.Get(msmq,msmq.Xml_Encoding, msmq.Xml_Formatter);
236 if (sp != null) 236 if (sp != null)
237 { 237 {
238 - var fullpath = msmq.Xml_FullPath;  
239 - MSMQManagerCore.Send(fullpath, sp.messagebody, sp.messagelabel, sp.messageformatter, sp.encoding);  
240 - ColorConsole.WriteLine($"Sending to '{fullpath}' ....", ConsoleColor.Yellow);  
241 - Message msg = MSMQManagerCore.PeekLast(fullpath, sp.messageformatter, sp.encoding, out string body, out string label);  
242 - TestSendCheckMessage(fullpath, msg, sp, body, label, "message sending/peek back");  
243 - var ans = ColorConsole.ReadLine($"Do You want to remove this test message (lookup id='{msg.LookupId}') from quue?", ConsoleColor.Yellow, validitylist: new List<string> { "yes", "no" }, defaultvalue: "yes");  
244 - if (ans.ToLower() == "yes")  
245 - {  
246 - msg = MSMQManagerCore.ReadById(fullpath, msg.LookupId, sp.messageformatter, sp.encoding, out body, out label);  
247 - TestSendCheckMessage(fullpath, msg, sp, body, label, "Read back."); 238 + for (var msgindex=1; msgindex <= sp.numofmessages; msgindex++)
  239 + {
  240 + sp.Substitute(msgindex);
  241 + MSMQManagerCore.Send(msmq.Xml_FullPath, sp.messagebodysubstituted, sp.messagelabelsubstituted, sp.messageformatter, sp.encoding);
  242 + ColorConsole.WriteLine($"Sending to '{msmq.Xml_FullPath}' ....", ConsoleColor.Yellow);
  243 + Message msg = MSMQManagerCore.PeekLast(msmq.Xml_FullPath, sp.messageformatter, sp.encoding, out string body, out string label);
  244 + TestSendCheckMessage(msmq.Xml_FullPath, msg, sp, body, label, "message sending/peek back");
  245 + var ans = ColorConsole.ReadLine($"Do You want to remove this test message (lookup id='{msg.LookupId}') from quue?", ConsoleColor.Yellow, validitylist: new List<string> { "yes", "no" }, defaultvalue: "yes");
  246 + if (ans.ToLower() == "yes")
  247 + {
  248 + msg = MSMQManagerCore.ReadById(msmq.Xml_FullPath, msg.LookupId, sp.messageformatter, sp.encoding, out body, out label);
  249 + TestSendCheckMessage(msmq.Xml_FullPath, msg, sp, body, label, "Read back.");
  250 + }
248 } 251 }
249 } 252 }
250 } 253 }
@@ -382,12 +385,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS @@ -382,12 +385,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS
382 { 385 {
383 try 386 try
384 { 387 {
385 - var sp = SendParameters.Get(st.Xml_Encoding, st.Xml_Formatter); 388 + var sp = SendParameters.Get(st,st.Xml_Encoding, st.Xml_Formatter);
386 if (sp == null) { break; } 389 if (sp == null) { break; }
387 -  
388 - var fullpath = st.Xml_FullPath;  
389 - MSMQManagerCore.Send(fullpath, sp.messagebody, sp.messagelabel, sp.messageformatter, sp.encoding);  
390 - ColorConsole.WriteLine($"Message sent to MSMQ:{st.Xml_Name}.", ConsoleColor.Green); 390 + for (var msgindex = 1; msgindex <= sp.numofmessages; msgindex++)
  391 + {
  392 + sp.Substitute(msgindex);
  393 + MSMQManagerCore.Send(st.Xml_FullPath, sp.messagebodysubstituted, sp.messagelabelsubstituted, sp.messageformatter, sp.encoding);
  394 + ColorConsole.WriteLine($"Message sent to MSMQ:{st.Xml_Name}.", ConsoleColor.Green);
  395 + }
391 } 396 }
392 catch (ApplicationException ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } 397 catch (ApplicationException ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }
393 catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } 398 catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }
@@ -419,32 +424,68 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS @@ -419,32 +424,68 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS
419 } 424 }
420 private class SendParameters 425 private class SendParameters
421 { 426 {
  427 + public string messagebodysubstituted;
  428 + public string messagelabelsubstituted;
422 public string messagebody; 429 public string messagebody;
423 public string messagelabel; 430 public string messagelabel;
424 public IMessageFormatter messageformatter; 431 public IMessageFormatter messageformatter;
425 public Encoding encoding; 432 public Encoding encoding;
  433 + public int numofmessages;
426 public SendParameters() { } 434 public SendParameters() { }
427 - public static SendParameters Get(string defaultencoding, string defaultformatter) 435 + public SendParameters Substitute(int index)
  436 + {
  437 + var dtnow = DateTime.Now;
  438 + messagebodysubstituted = messagebody.Replace("{IX}", $"{index}").Replace("{TS}", dtnow.ToString("HHmmss")).Replace("{DS}", dtnow.ToString("yyyyMMdd")).Replace("{DTS}", dtnow.ToString("yyyyMMddHHmmss"));
  439 + messagelabelsubstituted = messagelabel.Replace("{IX}", $"{index}").Replace("{TS}", dtnow.ToString("HHmmss")).Replace("{DS}", dtnow.ToString("yyyyMMdd")).Replace("{DTS}", dtnow.ToString("yyyyMMddHHmmss"));
  440 + return this;
  441 + }
  442 + public static SendParameters Get(MSMQ st, string defaultencoding, string defaultformatter)
428 { 443 {
429 - ColorConsole.WriteLine("Enter test message data!", ConsoleColor.Yellow); 444 + ColorConsole.Write("Enter test message data", ConsoleColor.Yellow);
  445 + if (st.MessageTemplates != null && st.MessageTemplates.Any()) { ColorConsole.Write(", or select one from the predefined list!", ConsoleColor.Yellow); }
  446 + ColorConsole.WriteLine("!", ConsoleColor.Yellow);
  447 + ColorConsole.WriteLine("Use {IX},{DS},{TS},{DTS} variables in the message text to substitute them with the message number index,date stamp,time stamp and date-time stamp, respectively.", ConsoleColor.Yellow);
  448 + Console.WriteLine();
  449 + var templatekeylist = new Dictionary<string,int>();
  450 + if (st.MessageTemplates != null && st.MessageTemplates.Any())
  451 + {
  452 + var index = 1;
  453 + foreach (var mt in st.MessageTemplates)
  454 + {
  455 + var tk = $"S{index}"; templatekeylist.Add(tk, index - 1);
  456 + ColorConsole.WriteLine(mt.Xml_TemplateString, ConsoleColor.White, prefix:$"[{tk}] ");
  457 + index++;
  458 + }
  459 + }
  460 +
430 var sp = new SendParameters() { }; 461 var sp = new SendParameters() { };
431 var now = DateTime.Now.ToString(); 462 var now = DateTime.Now.ToString();
432 - sp.messagebody = ColorConsole.ReadLine("Enter message body:", ConsoleColor.Yellow, defaultvalue: "TEST MESSAGE " + now);  
433 - if (sp.messagebody.ToUpper() == "EX") { return null; } 463 + var messagebody = ColorConsole.ReadLine("Enter message body (text or template key):", ConsoleColor.Yellow, defaultvalue: "TEST MESSAGE " + now);
  464 + if (messagebody.ToUpper() == "EX") { return null; }
  465 + if (templatekeylist.ContainsKey(messagebody)) messagebody = st.MessageTemplates.ElementAt(templatekeylist[messagebody]).Xml_TemplateString;
  466 + sp.messagebody = messagebody;
434 467
435 sp.messagelabel = ColorConsole.ReadLine("Enter message label:", ConsoleColor.Yellow, defaultvalue: "TESTLABEL" + now); 468 sp.messagelabel = ColorConsole.ReadLine("Enter message label:", ConsoleColor.Yellow, defaultvalue: "TESTLABEL" + now);
436 if (sp.messagelabel.ToUpper() == "EX") { return null; } 469 if (sp.messagelabel.ToUpper() == "EX") { return null; }
437 470
  471 + const string VALUEISINCORRECT = "{0} value is incorrect! Value:{1}. Repeat data entry!";
  472 + getformatter:
438 var messageformatterstring = ColorConsole.ReadLine("Enter formatter:", ConsoleColor.Yellow, validitylist: MSMQManagerCore.GetFormatterNames(), defaultvalue: defaultformatter); 473 var messageformatterstring = ColorConsole.ReadLine("Enter formatter:", ConsoleColor.Yellow, validitylist: MSMQManagerCore.GetFormatterNames(), defaultvalue: defaultformatter);
439 if (messageformatterstring.ToUpper() == "EX") { return null; } 474 if (messageformatterstring.ToUpper() == "EX") { return null; }
440 sp.messageformatter = MSMQManagerCore.SetFormatter(messageformatterstring); 475 sp.messageformatter = MSMQManagerCore.SetFormatter(messageformatterstring);
441 - if (sp.messageformatter == null) { var exmsg = $"Message formatter value is incorrect! Value:{messageformatterstring }."; throw new ApplicationException(exmsg); } 476 + if (sp.messageformatter == null) { Console.WriteLine(string.Format(VALUEISINCORRECT ,"Message formatter",messageformatterstring),ConsoleColor.Red); goto getformatter; }
442 477
  478 + getencoder:
443 string encodingstring = ColorConsole.ReadLine("Enter encoding:", ConsoleColor.Yellow, validitylist: MSMQManagerCore.GetEncodingNames(), defaultvalue: defaultencoding); 479 string encodingstring = ColorConsole.ReadLine("Enter encoding:", ConsoleColor.Yellow, validitylist: MSMQManagerCore.GetEncodingNames(), defaultvalue: defaultencoding);
444 if (encodingstring.ToUpper() == "EX") { return null; } 480 if (encodingstring.ToUpper() == "EX") { return null; }
445 sp.encoding = MSMQManagerCore.SetEncoding(encodingstring); 481 sp.encoding = MSMQManagerCore.SetEncoding(encodingstring);
446 - if (sp.encoding == null) { var exmsg = $"Message encoder value is incorrect! Value:{encodingstring}."; throw new ApplicationException(exmsg); } 482 + if (sp.encoding == null) { Console.WriteLine(string.Format(VALUEISINCORRECT, "Message encoder",encodingstring), ConsoleColor.Red); goto getencoder; }
447 483
  484 + getnumofmessages:
  485 + string numofmessagesstring = ColorConsole.ReadLine("Enter number of messages:", ConsoleColor.Yellow, defaultvalue: "1");
  486 + if (numofmessagesstring.ToUpper() == "EX") { return null; }
  487 + if (!int.TryParse(numofmessagesstring, out sp.numofmessages) || sp.numofmessages<=0) { sp.numofmessages = -1; }
  488 + if (sp.numofmessages == -1) { Console.WriteLine(string.Format(VALUEISINCORRECT, "Number of messages",numofmessagesstring), ConsoleColor.Red); goto getnumofmessages; }
448 return sp; 489 return sp;
449 } 490 }
450 } 491 }
@@ -836,7 +877,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS @@ -836,7 +877,14 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS
836 var msmqxmllist = GetAllXElements(nameof(MSMQ.XmlStructure.MSMQManager.MessageQueues), nameof(MSMQ.XmlStructure.MSMQManager.MessageQueues.MessageQueue)); 877 var msmqxmllist = GetAllXElements(nameof(MSMQ.XmlStructure.MSMQManager.MessageQueues), nameof(MSMQ.XmlStructure.MSMQManager.MessageQueues.MessageQueue));
837 if (msmqxmllist != null && msmqxmllist.Any()) 878 if (msmqxmllist != null && msmqxmllist.Any())
838 { 879 {
839 - foreach (var msmqxml in msmqxmllist) { var st = new MSMQ(msmqxml, new MSMQDefaults(RootElement)); if (st.Valid) { _msmqlist.Add(st); } } 880 + var msmqdefaults = new MSMQDefaults(RootElement);
  881 + var msmqmsgtemplates = new MSMQMessageTemplates(RootElement);
  882 + foreach (var msmqxml in msmqxmllist)
  883 + {
  884 + var msmq = new MSMQ(msmqxml, msmqdefaults);
  885 + msmq.AddTemplates(msmqmsgtemplates.GetTemplatesForMSMQ(msmq.Xml_Key));
  886 + if (msmq.Valid) { _msmqlist.Add(msmq); }
  887 + }
840 } 888 }
841 } 889 }
842 #endregion constructor 890 #endregion constructor
@@ -876,6 +924,35 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS @@ -876,6 +924,35 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS
876 public MessageQueueAccessRights ar; 924 public MessageQueueAccessRights ar;
877 public AccessControlEntryType ac; 925 public AccessControlEntryType ac;
878 } 926 }
  927 + public class MSMQMessageTemplates : XmlLinqBase
  928 + {
  929 + public List<MSMQMessageTemplate> Xml_MessageTemplateList=new List<MSMQMessageTemplate>();
  930 + public MSMQMessageTemplates(XElement rootxml)
  931 + {
  932 + var messagetemplatesxmls = GetXElement(rootxml, nameof(MSMQ.XmlStructure.MSMQManager.MessageTemplates));
  933 + var messagetemplatexmllist = GetAllXElements(messagetemplatesxmls,nameof(MSMQ.XmlStructure.MSMQManager.MessageTemplates.MessageTemplate));
  934 + if (messagetemplatexmllist == null || !messagetemplatexmllist.Any()) return;
  935 + foreach (var mtxml in messagetemplatexmllist) { var mt = new MSMQMessageTemplate(mtxml); if (mt.isValid) { Xml_MessageTemplateList.Add(mt); } }
  936 + }
  937 + public List<MSMQMessageTemplate> GetTemplatesForMSMQ(string msmqid)
  938 + {
  939 + return this.Xml_MessageTemplateList.Where(mt=> mt.Xml_QueueIdList==null || !mt.Xml_QueueIdList.Any() || mt.Xml_QueueIdList.Contains("*") || mt.Xml_QueueIdList.Contains(msmqid)).ToList();
  940 + }
  941 + }
  942 + public class MSMQMessageTemplate : XmlLinqBase
  943 + {
  944 + public string Xml_TemplateString;
  945 + public bool isValid = true;
  946 + public List<string> Xml_QueueIdList;
  947 + public MSMQMessageTemplate(XElement messagetemplatexml)
  948 + {
  949 + Xml_TemplateString = GetValue(messagetemplatexml, "");
  950 + if (string.IsNullOrWhiteSpace(Xml_TemplateString)) { isValid = false; return; }
  951 + Xml_QueueIdList = new List<string>();
  952 + var queueidlistcsvstring = GetValue(nameof(MSMQ.XmlStructure.MSMQManager.MessageTemplates.MessageTemplate.Attributes.QueueIdList), messagetemplatexml, MSMQ.XmlStructure.MSMQManager.MessageTemplates.MessageTemplate.Attributes.QueueIdList.Values.DEFAULT);
  953 + if (!string.IsNullOrWhiteSpace(queueidlistcsvstring)) Xml_QueueIdList = queueidlistcsvstring.Split(new char[] { ',', ';' },StringSplitOptions.RemoveEmptyEntries).ToList();
  954 + }
  955 + }
879 public class MSMQDefaults : XmlLinqBase 956 public class MSMQDefaults : XmlLinqBase
880 { 957 {
881 public string Xml_MessageFilesDirectory; 958 public string Xml_MessageFilesDirectory;
@@ -920,6 +997,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS @@ -920,6 +997,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS
920 public string Xml_Formatter = XmlStructure.MSMQManager.General.DefaultFormatter.Values.DEFAULT; 997 public string Xml_Formatter = XmlStructure.MSMQManager.General.DefaultFormatter.Values.DEFAULT;
921 public string Xml_Encoding = XmlStructure.MSMQManager.General.DefaultEncoding.Values.DEFAULT; 998 public string Xml_Encoding = XmlStructure.MSMQManager.General.DefaultEncoding.Values.DEFAULT;
922 public List<AccessRights> Xml_AccessRights = new List<AccessRights>(); 999 public List<AccessRights> Xml_AccessRights = new List<AccessRights>();
  1000 + public List<MSMQMessageTemplate> MessageTemplates = new List<MSMQMessageTemplate>();
923 1001
924 public string Status; 1002 public string Status;
925 public string StatusDescription = null; 1003 public string StatusDescription = null;
@@ -964,6 +1042,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS @@ -964,6 +1042,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS
964 } 1042 }
965 #endregion constructor from MessageQueue 1043 #endregion constructor from MessageQueue
966 1044
  1045 + public MSMQ AddTemplates(List<MSMQMessageTemplate> mtl) { MessageTemplates = mtl; return this; }
967 #region xml constructor 1046 #region xml constructor
968 public MSMQ(XElement msmqxml, MSMQDefaults msmqdefaults) 1047 public MSMQ(XElement msmqxml, MSMQDefaults msmqdefaults)
969 { 1048 {
@@ -1291,6 +1370,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS @@ -1291,6 +1370,16 @@ namespace Vrh.Log4Pro.MaintenanceConsole.MSMQManagerNS
1291 public static class DefaultEncoding { public static class Values { public const string DEFAULT = nameof(System.Text.Encoding.UTF8); } } 1370 public static class DefaultEncoding { public static class Values { public const string DEFAULT = nameof(System.Text.Encoding.UTF8); } }
1292 } 1371 }
1293 1372
  1373 + public static class MessageTemplates
  1374 + {
  1375 + public static class MessageTemplate
  1376 + {
  1377 + public static class Attributes
  1378 + {
  1379 + public static class QueueIdList { public static class Values { public const string DEFAULT = ""; } }
  1380 + }
  1381 + }
  1382 + }
1294 public static class MessageQueues 1383 public static class MessageQueues
1295 { 1384 {
1296 public static class MessageQueue 1385 public static class MessageQueue
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices; @@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
32 // You can specify all the values or you can default the Build and Revision Numbers 32 // You can specify all the values or you can default the Build and Revision Numbers
33 // by using the '*' as shown below: 33 // by using the '*' as shown below:
34 // [assembly: AssemblyVersion("1.0.*")] 34 // [assembly: AssemblyVersion("1.0.*")]
35 -[assembly: AssemblyVersion("1.16.3.0")]  
36 -[assembly: AssemblyFileVersion("1.16.3.0")] 35 +[assembly: AssemblyVersion("1.17.0.0")]
  36 +[assembly: AssemblyFileVersion("1.17.0.0")]