Ejemplo n.º 1
0
        /*
         * 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?
                }
            }
        }