/* * una operazione di ricezione termina con il salvataggio di un file in un file * temporaneo di ricezione, oppure in un file specifico se è possibile * determinare qual è il suo nome. In genere questo viene fatto * tramite un comando di SALVA presente nel file ricevuto * */ private void SerialCommEngine_CommandParseCompleted(object sender, CommandParsingEventArgs e) { /* * al termine della ricezione di un file, prima del salvataggio, * questo viene analizzato per capire se al suo interno sono presenti dei "comandi", * cioè segnaposti che permettono l'esecuzione automatica di azioni * da parte di PowerDNC */ foreach (var command in e.Commands) { Debug.Write($"COMANDO: {command.Command.Command.ToString()} VALIDO: {command.IsValid}"); } }
/* * se utilizzo comandi custom (e ad esempio me li aspetto sempre), * può essere utile fare una verifica della presenza degli stessi * sulla ricezione al termine della ricerca di tutti i comandi. * La srtinga identificativa di un comando non viene memorizzata * in testo semplice, ma come stringa che contiene la sequenza dei codici ascii * separati da spazi * * NB: gli eventi sono generati in modo centralizzato * dall'engine per tutti i suoi EndPoint: * testare Id EndPoint e valutare se usare lock */ private void SerialCommEngine_CommandParseCompleted(object sender, CommandParsingEventArgs e) { /* * L'elenco dei comandi estratti contiene solo comandi validi * (definiti nelle opzioni) */ if (e.Channel.EndPoint.Id == 0) { //comandi custom che mi aspetto var endPointCustomCommands = e.Channel.Settings.Commands.Commands .Where(c => c.Command == CommandType.Custom).Select(c => c.TextCharCodes) .ToList(); //comandi custom trovati nel file ricevuto var extractedCommands = e.Commands?.ToList() ?? new List <ExtractedCommand>(); var myCommandsCount = extractedCommands.Select(c => c.Command.TextCharCodes).Count(); //ESEMPIO 1: mi servono tutti i comandi var foundAll = myCommandsCount == endPointCustomCommands.Count; if (!foundAll) { //TODO: notifico qualcuno? } //ESEMPIO 2: mi basta trovare almeno un comando custom var foundOne = myCommandsCount > 0; if (!foundOne) { //TODO: notifico qualcuno? } //ESEMPIO 3: ne voglio uno specifico const string lookingForCommand = @"67 85 83 84 79 77 49"; //= CUSTOM1 var foundSpecific = extractedCommands.Any(c => c.Command.TextCharCodes == lookingForCommand); if (!foundSpecific) { //TODO: notifico qualcuno? } } }