using Steamware.Scheduler; using SteamWare; using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TestBench { public partial class MainForm : Form { #region Private Fields /// /// Oggetto REDIS /// private SteamWare.IO.Redis myRedis; private StackExchange.Redis.ISubscriber subscriber; #endregion Private Fields #region Public Constructors public MainForm() { InitializeComponent(); myInitComponent(); } #endregion Public Constructors #region Private Delegates private delegate void SetTextCallback(string text); #endregion Private Delegates #region Private Methods private void actionTimer_Tick(object sender, EventArgs e) { // processo le varie azioni... doLogTest(); } private void BtnCopyAll_Click(object sender, EventArgs e) { // effettuo copia con steamware libs... string sourceDir = txtSourceDir.Text.Trim(); string destDir = txtDestDir.Text.Trim(); if (sourceDir != "" && destDir != "") { lblOutMessage.Text = "inizio copia..."; lblOutMessage.Refresh(); fileMover.DirectoryCopy(sourceDir, destDir, chkRecursive.Checked); lblOutMessage.Text = "Copia completata!"; } } private void btnResetCdv_Click(object sender, EventArgs e) { memLayer.ML.resetAppConf(); } private void btnSend_Click(object sender, EventArgs e) { // scrivo su coda string myKey = "testQueue"; myRedis.ListPush(myKey, $"{DateTime.Now} | {txtQueueMessage.Text.Trim()}"); txtQueueMessage.Text = ""; } private void btnShowCdv_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); sb.AppendLine("----- REDIS CDV data -----"); foreach (var item in memLayer.ML.AppConf) { sb.AppendLine($"{item.Key}: {item.Value}"); } lblRedCDV.Text = sb.ToString(); } private void btnStartSched_Click(object sender, EventArgs e) { // avvia uno scheduler che apre una messagebox secondo programmazione impostata... // For Interval in Minutes // This Scheduler will start at 22:00 and call after every 30 Minutes // IntervalInSeconds(start_hour, start_minute, minutes) // calcolo istante dal PROSSIMO minuto DateTime avvio = DateTime.Now; lblStartTimer.Text = $"Avvio timer: {avvio:ddd yyyy-MM-dd HH:mm:ss}"; avvio = avvio.AddMinutes(1).AddSeconds(-avvio.Second); lblNextSched.Text = $"Scadenza timer: {avvio:ddd yyyy-MM-dd HH:mm:ss}"; clockTimer.Start(); // calcolo periodo in minuti guardando quanto selezionato int ore = 0; int min = 0; int sec = 0; int.TryParse(txtOre.Text, out ore); int.TryParse(txtMin.Text, out min); int.TryParse(txtSec.Text, out sec); // calcolo double intSecondi = ore * 60 * 60 + min * 60 + sec; TaskSched.IntervalInSeconds(avvio.Hour, avvio.Minute, intSecondi, () => { DateTime adesso = DateTime.Now; // Initializes the variables to pass to the MessageBox.Show method. string message = $"E' scattato il timer alle ore {DateTime.Now}."; string caption = "Timer Elapsed"; MessageBoxButtons buttons = MessageBoxButtons.OK; DialogResult result; //lblNextSched.Text = $"Scadenza timer: {adesso.AddSeconds(intSecondi):ddd yyyy-MM-dd HH:mm:ss}"; // Displays the MessageBox. result = MessageBox.Show(message, caption, buttons); }); } private void button1_Click(object sender, EventArgs e) { // apro selettore file... openFileDialog1.ShowDialog(); } private void button2_Click(object sender, EventArgs e) { string answ = ""; try { answ = memLayer.ML.getRedisInfoData(); } catch { } lblRedis.Text = answ; } private void chkTestLogger_CheckedChanged(object sender, EventArgs e) { if (chkTestLogger.Checked) { LogTimer.Interval = 50; LogTimer.Start(); } else { LogTimer.Stop(); } } private void clockTimer_Tick(object sender, EventArgs e) { DateTime adesso = DateTime.Now; lblClock.Text = $"Clock: {adesso:ddd yyyy-MM-dd HH:mm:ss}"; updateQueue(); } private void doLogTest() { // solo se attivo... if (chkTestLogger.Checked) { logger.lg.scriviLog($"TestLog_{DateTime.Now.Millisecond}"); // aggiorno logger.lg.getLoggerVetoStats(out int numVeto, out int numCount); lblTestLogger.Text = $"Status Redis | numVeto:{numVeto} | numCount: {numCount}"; } } private void LogTimer_Tick(object sender, EventArgs e) { doLogTest(); } private void myInitComponent() { // imposto folders txtSourceDir.Text = @"C:\TMP\"; txtDestDir.Text = @"L:\TMP\"; lblHwSwData.Text = SteamWare.HwSwInfo.man(Assembly.GetExecutingAssembly()).librariesVers; // reset conf CDV memLayer.ML.resetAppConf(); // redis setup myRedis = new SteamWare.IO.Redis(); subscriber = myRedis.RedPubSub; // fix redis channel subscription subscriber.Subscribe("TestChannel").OnMessage(channelMessage => { SetText((string)channelMessage.Message); }); } private void openFileDialog1_FileOk(object sender, System.ComponentModel.CancelEventArgs e) { // prendo i files selezionati --> merge in pdf e indico quanti... List elencoFiles = new List(); foreach (var item in openFileDialog1.FileNames) { elencoFiles.Add(item); } int numFiles = 0; string outPath = $"{Directory.GetCurrentDirectory()}\\{txtMergedName.Text}"; try { numFiles = pdfUtils.mergePdfFiles(txtMergedName.Text, elencoFiles); } catch { } lblNumMerged.Text = $"Effettuato merge di {numFiles} files!"; } private void SetText(string text) { // InvokeRequired required compares the thread ID of the // calling thread to the thread ID of the creating thread. // If these threads are different, it returns true. if (this.lblChannelReceive.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { this.lblChannelReceive.Text = text; } } private void txtChannelSend_KeyPress(object sender, KeyPressEventArgs e) { // cerco Enter if (e.KeyChar == (char)13) { // invio subscriber.Publish("TestChannel", $"{DateTime.Now} | {txtChannelSend.Text}"); // reset txtChannelSend.Text = ""; //MessageBox.Show("ENTER has been pressed!"); } //// ESC //else if (e.KeyChar == (char)27) // this.Close(); } /// /// Aggiorno da lettura coda... /// private void updateQueue() { // leggo da coda string myKey = "testQueue"; if (myRedis.ListLen(myKey) > 0) { // aggiorno coda lblQueueRead.Text = $"{myRedis.ListPop(myKey)}{Environment.NewLine}{lblQueueRead.Text}"; } } #endregion Private Methods } }