From 8aa9c8c6b7480d3b2c0e702b7c66e1ae1a130f5d Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 8 Apr 2022 19:14:37 +0200 Subject: [PATCH 1/2] Aggiunta preliminare MessagePipe --- SteamWareLib/MessagePipe.cs | 153 +++++++++++++++++++++++++++++++++ SteamWareLib/SteamWare.csproj | 1 + TestBench/MainFOrm.Designer.cs | 92 ++++++++++++++++++++ TestBench/MainFOrm.cs | 41 +++++++++ 4 files changed, 287 insertions(+) create mode 100644 SteamWareLib/MessagePipe.cs diff --git a/SteamWareLib/MessagePipe.cs b/SteamWareLib/MessagePipe.cs new file mode 100644 index 0000000..5b18700 --- /dev/null +++ b/SteamWareLib/MessagePipe.cs @@ -0,0 +1,153 @@ +using StackExchange.Redis; +using System; + +namespace SteamWare +{ + /// + /// Classe gestione PubSub messaggi REDIS + /// + public class MessagePipe + { + #region Private Fields + + private bool enableLog = false; + private IConnectionMultiplexer redis; + private IDatabase redisDb; + + #endregion Private Fields + + #region Protected Fields + + /// + /// Obj x gestione log + /// + protected static NLog.Logger Log = NLog.LogManager.GetCurrentClassLogger(); + + #endregion Protected Fields + + #region Public Constructors + + /// + /// Init canale di comunicazione PubSub via REDIS + /// + /// + /// + public MessagePipe(string channelName, bool enableLog = false) + { + _channel = channelName; + redis = memLayer.ML.connRedis; + redisDb = redis.GetDatabase(); + this.enableLog = enableLog; + // aggiungo sottoscrittore + setupSubscriber(); + } + + #endregion Public Constructors + + #region Public Events + + /// + /// Messaggio veicolato dal canale + /// + public event EventHandler EA_NewMessage = delegate { }; + + #endregion Public Events + + #region Private Properties + + /// + /// Canale associato al gestore pipeline messaggi + /// + private string _channel { get; set; } = ""; + + #endregion Private Properties + + #region Private Methods + + private void setupSubscriber() + { + ISubscriber sub = redis.GetSubscriber(); + //Subscribe to the channel named messages + sub.Subscribe(_channel, (channel, message) => + { + Log.Trace($"ch {channel} | {message}"); + // messaggio + PubSubEventArgs mea = new PubSubEventArgs(message); + // se qualcuno ascolta sollevo evento nuovo valore... + if (EA_NewMessage != null) + { + EA_NewMessage(this, mea); + } + }); + Log.Info($"Subscribed {_channel}"); + } + + #endregion Private Methods + + #region Public Methods + + /// + /// Invio messaggio sul canale + salvataggio in cache REDIS + /// + /// Chiave REDIS x salvare valore + /// + public bool saveAndSendMessage(string memKey, string message) + { + bool answ = false; + // invio notifica tramite il canale richiesto + answ = sendMessage(message); + if (redisDb != null) + { + redisDb.StringSetAsync(memKey, message); + if (enableLog) + { + Log.Info($"Redis Cache Key: {memKey}"); + } + } + return answ; + } + + /// + /// Invio messaggio sul canale + /// + /// + /// + public bool sendMessage(string newMess) + { + bool answ = false; + ISubscriber sub = redis.GetSubscriber(); + sub.Publish(_channel, newMess); + return answ; + } + + #endregion Public Methods + } + + /// + /// Evento messaggio PubSub Redis + /// + public class PubSubEventArgs : EventArgs + { + #region Public Constructors + + /// + /// Costruttore + /// + /// + public PubSubEventArgs(string messaggio) + { + this.newMessage = messaggio; + } + + #endregion Public Constructors + + #region Public Properties + + /// + /// Messaggio trasportato + /// + public string newMessage { get; set; } = ""; + + #endregion Public Properties + } +} \ No newline at end of file diff --git a/SteamWareLib/SteamWare.csproj b/SteamWareLib/SteamWare.csproj index cfe1855..6bcff6e 100644 --- a/SteamWareLib/SteamWare.csproj +++ b/SteamWareLib/SteamWare.csproj @@ -289,6 +289,7 @@ + diff --git a/TestBench/MainFOrm.Designer.cs b/TestBench/MainFOrm.Designer.cs index 0b116c2..c49ccf6 100644 --- a/TestBench/MainFOrm.Designer.cs +++ b/TestBench/MainFOrm.Designer.cs @@ -92,6 +92,13 @@ this.label9 = new System.Windows.Forms.Label(); this.clockTimer = new System.Windows.Forms.Timer(this.components); this.LogTimer = new System.Windows.Forms.Timer(this.components); + this.tabPage8 = new System.Windows.Forms.TabPage(); + this.label12 = new System.Windows.Forms.Label(); + this.txtChannelName = new System.Windows.Forms.TextBox(); + this.btnSendMessage = new System.Windows.Forms.Button(); + this.txtMessaggio = new System.Windows.Forms.TextBox(); + this.btnStartSub = new System.Windows.Forms.Button(); + this.lblChannerReceive = new System.Windows.Forms.Label(); this.groupBox1.SuspendLayout(); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); @@ -105,6 +112,7 @@ this.grpPublisher.SuspendLayout(); this.groupBox2.SuspendLayout(); this.tabPage7.SuspendLayout(); + this.tabPage8.SuspendLayout(); this.SuspendLayout(); // // groupBox1 @@ -278,6 +286,7 @@ this.tabControl1.Controls.Add(this.tabPage5); this.tabControl1.Controls.Add(this.tabPage6); this.tabControl1.Controls.Add(this.tabPage7); + this.tabControl1.Controls.Add(this.tabPage8); this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControl1.Location = new System.Drawing.Point(0, 0); this.tabControl1.Name = "tabControl1"; @@ -777,6 +786,80 @@ this.LogTimer.Interval = 10; this.LogTimer.Tick += new System.EventHandler(this.LogTimer_Tick); // + // tabPage8 + // + this.tabPage8.Controls.Add(this.lblChannerReceive); + this.tabPage8.Controls.Add(this.btnStartSub); + this.tabPage8.Controls.Add(this.txtMessaggio); + this.tabPage8.Controls.Add(this.btnSendMessage); + this.tabPage8.Controls.Add(this.txtChannelName); + this.tabPage8.Controls.Add(this.label12); + this.tabPage8.Location = new System.Drawing.Point(4, 22); + this.tabPage8.Name = "tabPage8"; + this.tabPage8.Padding = new System.Windows.Forms.Padding(3); + this.tabPage8.Size = new System.Drawing.Size(768, 353); + this.tabPage8.TabIndex = 7; + this.tabPage8.Text = "PubSub (REDIS)"; + this.tabPage8.UseVisualStyleBackColor = true; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(20, 17); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(77, 13); + this.label12.TabIndex = 0; + this.label12.Text = "Channel Name"; + // + // txtChannelName + // + this.txtChannelName.Location = new System.Drawing.Point(103, 14); + this.txtChannelName.Name = "txtChannelName"; + this.txtChannelName.Size = new System.Drawing.Size(152, 20); + this.txtChannelName.TabIndex = 1; + this.txtChannelName.Text = "myTestChannel"; + // + // btnSendMessage + // + this.btnSendMessage.Location = new System.Drawing.Point(23, 62); + this.btnSendMessage.Name = "btnSendMessage"; + this.btnSendMessage.Size = new System.Drawing.Size(74, 23); + this.btnSendMessage.TabIndex = 2; + this.btnSendMessage.Text = "Send"; + this.btnSendMessage.UseVisualStyleBackColor = true; + this.btnSendMessage.Click += new System.EventHandler(this.btnSendMessage_Click); + // + // txtMessaggio + // + this.txtMessaggio.Location = new System.Drawing.Point(103, 62); + this.txtMessaggio.Name = "txtMessaggio"; + this.txtMessaggio.Size = new System.Drawing.Size(152, 20); + this.txtMessaggio.TabIndex = 4; + this.txtMessaggio.Text = "..."; + this.txtMessaggio.TextChanged += new System.EventHandler(this.txtMessaggio_TextChanged); + // + // btnStartSub + // + this.btnStartSub.Location = new System.Drawing.Point(619, 17); + this.btnStartSub.Name = "btnStartSub"; + this.btnStartSub.Size = new System.Drawing.Size(141, 23); + this.btnStartSub.TabIndex = 5; + this.btnStartSub.Text = "Start Channel Sub"; + this.btnStartSub.UseVisualStyleBackColor = true; + this.btnStartSub.Click += new System.EventHandler(this.btnStartSub_Click); + // + // lblChannerReceive + // + this.lblChannerReceive.AutoSize = true; + this.lblChannerReceive.BackColor = System.Drawing.Color.Black; + this.lblChannerReceive.ForeColor = System.Drawing.Color.Gold; + this.lblChannerReceive.Location = new System.Drawing.Point(360, 67); + this.lblChannerReceive.MinimumSize = new System.Drawing.Size(400, 100); + this.lblChannerReceive.Name = "lblChannerReceive"; + this.lblChannerReceive.Size = new System.Drawing.Size(400, 100); + this.lblChannerReceive.TabIndex = 6; + this.lblChannerReceive.Text = "..."; + // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -810,6 +893,8 @@ this.groupBox2.PerformLayout(); this.tabPage7.ResumeLayout(false); this.tabPage7.PerformLayout(); + this.tabPage8.ResumeLayout(false); + this.tabPage8.PerformLayout(); this.ResumeLayout(false); } @@ -879,6 +964,13 @@ private System.Windows.Forms.Label lblOutUpdMan; private System.Windows.Forms.Button btnReadUpdMan; private System.Windows.Forms.Button btnDownload; + private System.Windows.Forms.TabPage tabPage8; + private System.Windows.Forms.Button btnStartSub; + private System.Windows.Forms.TextBox txtMessaggio; + private System.Windows.Forms.Button btnSendMessage; + private System.Windows.Forms.TextBox txtChannelName; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label lblChannerReceive; } } diff --git a/TestBench/MainFOrm.cs b/TestBench/MainFOrm.cs index cfe7829..cd91784 100644 --- a/TestBench/MainFOrm.cs +++ b/TestBench/MainFOrm.cs @@ -293,5 +293,46 @@ namespace TestBench } #endregion Private Methods + + protected MessagePipe MPipeChannel = new MessagePipe("testCh"); + + private void btnStartSub_Click(object sender, EventArgs e) + { + // avvio un nuovo messaggePipe x il canale richiesto... + MPipeChannel = new MessagePipe(txtChannelName.Text, false); + MPipeChannel.EA_NewMessage += MPipeChannel_EA_NewMessage; + StringBuilder sb = new StringBuilder(); + sb.AppendLine("--------------------------------------"); + sb.AppendLine($" Start PubSub | {DateTime.Now:HH:mm:ss}"); + sb.AppendLine("--------------------------------------"); + lblChannelReceive.Text = sb.ToString(); + lblChannelReceive.Refresh(); + } + + private void MPipeChannel_EA_NewMessage(object sender, EventArgs e) + { + // accodo messaggio... + PubSubEventArgs currArgs = (PubSubEventArgs)e; + StringBuilder sb = new StringBuilder(); + sb.AppendLine($"{currArgs.newMessage} | RECEIVED: {DateTime.Now:HH:mm:ss.ffffff}"); + string oldMess = lblChannelReceive.Text; + lblChannelReceive.Text = $"{sb.ToString()}{oldMess}"; + lblChannelReceive.Refresh(); + } + + protected string testoMessaggio + { + get => $"SEND: {DateTime.Now:HH:mm:ss.ffffff} | {txtMessaggio.Text}"; + } + + private void btnSendMessage_Click(object sender, EventArgs e) + { + MPipeChannel.sendMessage(testoMessaggio); + } + + private void txtMessaggio_TextChanged(object sender, EventArgs e) + { + //MPipeChannel.sendMessage(testoMessaggio); + } } } \ No newline at end of file From 38f12b7d7ef1a9dabb59f969c669c38587303b33 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Sat, 9 Apr 2022 09:44:40 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Completato=20test=20modalit=C3=A0=20PubSub?= =?UTF-8?q?=20REDIS=20x=20steamwarelibs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TestBench/ControlExtensions.cs | 36 +++++++++ TestBench/MainFOrm.Designer.cs | 133 +++++++++++++++++---------------- TestBench/MainFOrm.cs | 91 ++++++++++++++++++---- TestBench/TestBench.csproj | 1 + 4 files changed, 183 insertions(+), 78 deletions(-) create mode 100644 TestBench/ControlExtensions.cs diff --git a/TestBench/ControlExtensions.cs b/TestBench/ControlExtensions.cs new file mode 100644 index 0000000..5298a2a --- /dev/null +++ b/TestBench/ControlExtensions.cs @@ -0,0 +1,36 @@ +using System; +using System.Windows.Forms; + +namespace TestBench +{ + /// + /// Helper gestione UITHread e deleghe + /// https://www.codeproject.com/Articles/37642/Avoiding-InvokeRequired + /// + internal static class ControlExtensions + { + #region Public Methods + + public static void UIThread(this Control control, Action code) + { + if (control.InvokeRequired) + { + control.BeginInvoke(code); + return; + } + code.Invoke(); + } + + public static void UIThreadInvoke(this Control control, Action code) + { + if (control.InvokeRequired) + { + control.Invoke(code); + return; + } + code.Invoke(); + } + + #endregion Public Methods + } +} \ No newline at end of file diff --git a/TestBench/MainFOrm.Designer.cs b/TestBench/MainFOrm.Designer.cs index c49ccf6..ba04413 100644 --- a/TestBench/MainFOrm.Designer.cs +++ b/TestBench/MainFOrm.Designer.cs @@ -90,15 +90,15 @@ this.label10 = new System.Windows.Forms.Label(); this.txtUser = new System.Windows.Forms.TextBox(); this.label9 = new System.Windows.Forms.Label(); + this.tabPage8 = new System.Windows.Forms.TabPage(); + this.btnStartSub = new System.Windows.Forms.Button(); + this.txtMessaggio = new System.Windows.Forms.TextBox(); + this.btnSendMessage = new System.Windows.Forms.Button(); + this.txtChannelName = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); this.clockTimer = new System.Windows.Forms.Timer(this.components); this.LogTimer = new System.Windows.Forms.Timer(this.components); - this.tabPage8 = new System.Windows.Forms.TabPage(); - this.label12 = new System.Windows.Forms.Label(); - this.txtChannelName = new System.Windows.Forms.TextBox(); - this.btnSendMessage = new System.Windows.Forms.Button(); - this.txtMessaggio = new System.Windows.Forms.TextBox(); - this.btnStartSub = new System.Windows.Forms.Button(); - this.lblChannerReceive = new System.Windows.Forms.Label(); + this.lblChannelLog = new System.Windows.Forms.Label(); this.groupBox1.SuspendLayout(); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); @@ -291,7 +291,7 @@ this.tabControl1.Location = new System.Drawing.Point(0, 0); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(776, 379); + this.tabControl1.Size = new System.Drawing.Size(776, 392); this.tabControl1.TabIndex = 10; // // tabPage1 @@ -776,19 +776,9 @@ this.label9.TabIndex = 0; this.label9.Text = "User"; // - // clockTimer - // - this.clockTimer.Interval = 50; - this.clockTimer.Tick += new System.EventHandler(this.clockTimer_Tick); - // - // LogTimer - // - this.LogTimer.Interval = 10; - this.LogTimer.Tick += new System.EventHandler(this.LogTimer_Tick); - // // tabPage8 // - this.tabPage8.Controls.Add(this.lblChannerReceive); + this.tabPage8.Controls.Add(this.lblChannelLog); this.tabPage8.Controls.Add(this.btnStartSub); this.tabPage8.Controls.Add(this.txtMessaggio); this.tabPage8.Controls.Add(this.btnSendMessage); @@ -797,11 +787,50 @@ this.tabPage8.Location = new System.Drawing.Point(4, 22); this.tabPage8.Name = "tabPage8"; this.tabPage8.Padding = new System.Windows.Forms.Padding(3); - this.tabPage8.Size = new System.Drawing.Size(768, 353); + this.tabPage8.Size = new System.Drawing.Size(768, 366); this.tabPage8.TabIndex = 7; this.tabPage8.Text = "PubSub (REDIS)"; this.tabPage8.UseVisualStyleBackColor = true; // + // btnStartSub + // + this.btnStartSub.Location = new System.Drawing.Point(619, 12); + this.btnStartSub.Name = "btnStartSub"; + this.btnStartSub.Size = new System.Drawing.Size(141, 23); + this.btnStartSub.TabIndex = 5; + this.btnStartSub.Text = "Start Channel Sub"; + this.btnStartSub.UseVisualStyleBackColor = true; + this.btnStartSub.Click += new System.EventHandler(this.btnStartSub_Click); + // + // txtMessaggio + // + this.txtMessaggio.Enabled = false; + this.txtMessaggio.Location = new System.Drawing.Point(103, 62); + this.txtMessaggio.Name = "txtMessaggio"; + this.txtMessaggio.Size = new System.Drawing.Size(152, 20); + this.txtMessaggio.TabIndex = 4; + this.txtMessaggio.Text = "..."; + this.txtMessaggio.TextChanged += new System.EventHandler(this.txtMessaggio_TextChanged); + // + // btnSendMessage + // + this.btnSendMessage.Enabled = false; + this.btnSendMessage.Location = new System.Drawing.Point(23, 62); + this.btnSendMessage.Name = "btnSendMessage"; + this.btnSendMessage.Size = new System.Drawing.Size(74, 23); + this.btnSendMessage.TabIndex = 2; + this.btnSendMessage.Text = "Send"; + this.btnSendMessage.UseVisualStyleBackColor = true; + this.btnSendMessage.Click += new System.EventHandler(this.btnSendMessage_Click); + // + // txtChannelName + // + this.txtChannelName.Location = new System.Drawing.Point(103, 14); + this.txtChannelName.Name = "txtChannelName"; + this.txtChannelName.Size = new System.Drawing.Size(152, 20); + this.txtChannelName.TabIndex = 1; + this.txtChannelName.Text = "myTestChannel"; + // // label12 // this.label12.AutoSize = true; @@ -811,60 +840,34 @@ this.label12.TabIndex = 0; this.label12.Text = "Channel Name"; // - // txtChannelName + // clockTimer // - this.txtChannelName.Location = new System.Drawing.Point(103, 14); - this.txtChannelName.Name = "txtChannelName"; - this.txtChannelName.Size = new System.Drawing.Size(152, 20); - this.txtChannelName.TabIndex = 1; - this.txtChannelName.Text = "myTestChannel"; + this.clockTimer.Interval = 50; + this.clockTimer.Tick += new System.EventHandler(this.clockTimer_Tick); // - // btnSendMessage + // LogTimer // - this.btnSendMessage.Location = new System.Drawing.Point(23, 62); - this.btnSendMessage.Name = "btnSendMessage"; - this.btnSendMessage.Size = new System.Drawing.Size(74, 23); - this.btnSendMessage.TabIndex = 2; - this.btnSendMessage.Text = "Send"; - this.btnSendMessage.UseVisualStyleBackColor = true; - this.btnSendMessage.Click += new System.EventHandler(this.btnSendMessage_Click); + this.LogTimer.Interval = 10; + this.LogTimer.Tick += new System.EventHandler(this.LogTimer_Tick); // - // txtMessaggio + // lblChannelLog // - this.txtMessaggio.Location = new System.Drawing.Point(103, 62); - this.txtMessaggio.Name = "txtMessaggio"; - this.txtMessaggio.Size = new System.Drawing.Size(152, 20); - this.txtMessaggio.TabIndex = 4; - this.txtMessaggio.Text = "..."; - this.txtMessaggio.TextChanged += new System.EventHandler(this.txtMessaggio_TextChanged); - // - // btnStartSub - // - this.btnStartSub.Location = new System.Drawing.Point(619, 17); - this.btnStartSub.Name = "btnStartSub"; - this.btnStartSub.Size = new System.Drawing.Size(141, 23); - this.btnStartSub.TabIndex = 5; - this.btnStartSub.Text = "Start Channel Sub"; - this.btnStartSub.UseVisualStyleBackColor = true; - this.btnStartSub.Click += new System.EventHandler(this.btnStartSub_Click); - // - // lblChannerReceive - // - this.lblChannerReceive.AutoSize = true; - this.lblChannerReceive.BackColor = System.Drawing.Color.Black; - this.lblChannerReceive.ForeColor = System.Drawing.Color.Gold; - this.lblChannerReceive.Location = new System.Drawing.Point(360, 67); - this.lblChannerReceive.MinimumSize = new System.Drawing.Size(400, 100); - this.lblChannerReceive.Name = "lblChannerReceive"; - this.lblChannerReceive.Size = new System.Drawing.Size(400, 100); - this.lblChannerReceive.TabIndex = 6; - this.lblChannerReceive.Text = "..."; + this.lblChannelLog.AutoSize = true; + this.lblChannelLog.BackColor = System.Drawing.Color.Black; + this.lblChannelLog.ForeColor = System.Drawing.Color.Yellow; + this.lblChannelLog.Location = new System.Drawing.Point(378, 65); + this.lblChannelLog.MaximumSize = new System.Drawing.Size(400, 300); + this.lblChannelLog.MinimumSize = new System.Drawing.Size(400, 300); + this.lblChannelLog.Name = "lblChannelLog"; + this.lblChannelLog.Size = new System.Drawing.Size(400, 300); + this.lblChannelLog.TabIndex = 9; + this.lblChannelLog.Text = "log"; // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(776, 379); + this.ClientSize = new System.Drawing.Size(776, 392); this.Controls.Add(this.tabControl1); this.Margin = new System.Windows.Forms.Padding(2); this.Name = "MainForm"; @@ -970,7 +973,7 @@ private System.Windows.Forms.Button btnSendMessage; private System.Windows.Forms.TextBox txtChannelName; private System.Windows.Forms.Label label12; - private System.Windows.Forms.Label lblChannerReceive; + private System.Windows.Forms.Label lblChannelLog; } } diff --git a/TestBench/MainFOrm.cs b/TestBench/MainFOrm.cs index cd91784..9f13460 100644 --- a/TestBench/MainFOrm.cs +++ b/TestBench/MainFOrm.cs @@ -296,17 +296,32 @@ namespace TestBench protected MessagePipe MPipeChannel = new MessagePipe("testCh"); + protected bool pubSubEnabled = false; + private void btnStartSub_Click(object sender, EventArgs e) { - // avvio un nuovo messaggePipe x il canale richiesto... - MPipeChannel = new MessagePipe(txtChannelName.Text, false); - MPipeChannel.EA_NewMessage += MPipeChannel_EA_NewMessage; - StringBuilder sb = new StringBuilder(); - sb.AppendLine("--------------------------------------"); - sb.AppendLine($" Start PubSub | {DateTime.Now:HH:mm:ss}"); - sb.AppendLine("--------------------------------------"); - lblChannelReceive.Text = sb.ToString(); - lblChannelReceive.Refresh(); + pubSubEnabled = !pubSubEnabled; + btnStartSub.Text = pubSubEnabled ? "Stop PubSub" : "Start Sub"; + btnSendMessage.Enabled = pubSubEnabled; + txtMessaggio.Enabled = pubSubEnabled; + // sistemo messaggio + if (pubSubEnabled) + { + // avvio un nuovo messaggePipe x il canale richiesto... + MPipeChannel = new MessagePipe(txtChannelName.Text, false); + MPipeChannel.EA_NewMessage += MPipeChannel_EA_NewMessage; + StringBuilder sb = new StringBuilder(); + sb.AppendLine("--------------------------------------"); + sb.AppendLine($" Start PubSub | {DateTime.Now:HH:mm:ss}"); + sb.AppendLine("--------------------------------------"); + logPubSubChannel = sb.ToString(); + } + else + { + logWatchString = ""; + logPubSubChannel = ".... waiting ...."; + MPipeChannel.EA_NewMessage -= MPipeChannel_EA_NewMessage; + } } private void MPipeChannel_EA_NewMessage(object sender, EventArgs e) @@ -315,9 +330,7 @@ namespace TestBench PubSubEventArgs currArgs = (PubSubEventArgs)e; StringBuilder sb = new StringBuilder(); sb.AppendLine($"{currArgs.newMessage} | RECEIVED: {DateTime.Now:HH:mm:ss.ffffff}"); - string oldMess = lblChannelReceive.Text; - lblChannelReceive.Text = $"{sb.ToString()}{oldMess}"; - lblChannelReceive.Refresh(); + logPubSubChannel = sb.ToString(); } protected string testoMessaggio @@ -332,7 +345,59 @@ namespace TestBench private void txtMessaggio_TextChanged(object sender, EventArgs e) { - //MPipeChannel.sendMessage(testoMessaggio); + MPipeChannel.sendMessage(testoMessaggio); + } + + protected int nLine2show = 30; + + /// + /// Effettua un trim della stringa al numero max di linee da mostrare a video + /// + /// + /// + public string limitLine2show(string newString) + { + if (!string.IsNullOrEmpty(newString)) + { + // se num righe superiore a limite trimmo... + if (newString.Split('\n').Length > nLine2show) + { + //int idx = newString.LastIndexOf('\r'); + int idx = newString.LastIndexOf(Environment.NewLine); + newString = newString.Substring(0, idx); + } + } + return newString; + } + + /// + /// Stringa corrente di log... + /// + protected string logWatchString { get; set; } = ""; + + /// + /// Logwatcher (in modalità "accodamento in testa" ultimi messaggi...) + /// + public string logPubSubChannel + { + get + { + return lblChannelLog.Text; + } + set + { + try + { + logWatchString = limitLine2show($"{value}{logWatchString}"); + lblChannelLog.Text = logWatchString; + lblChannelLog.Refresh(); + } + catch (Exception exc) + { + logger.lg.scriviLog($"Errore in esecuzione logWatcher{Environment.NewLine}--> {value}"); + logger.lg.scriviLog($"{exc}"); + } + } } } } \ No newline at end of file diff --git a/TestBench/TestBench.csproj b/TestBench/TestBench.csproj index 1630ca9..136e525 100644 --- a/TestBench/TestBench.csproj +++ b/TestBench/TestBench.csproj @@ -85,6 +85,7 @@ + Form