CLB_Ezechiele_net
La formattazione dei messaggi

Nell’articolo precedente abbiamo introdotto  la classe Session, che gestisce la comunicazione fra un Client e un’istanza remota di Colibri.

Abbiamo visto che la comunicazione è effettuata attraverso il passaggio di comandi (istruzioni) fra la Session e  la classe Ezc_context  della dll nativa CLB_Ezechiele.

Esporremo ora le modalità di formattazione dei comandi da trasferire.

La classe di servizio che effettua l’operazione è la Sender

Table of Contents

Sender

Sender espone una sola funzione  pubblica ed ha l’unico compito di creare un opportuno stack di comandi e parametri trasferiti all CLB_Ezechiele. per farlo usa internamente  le funzioni della classe Clb  Push_v e Push_s, per inserire nello stack i tipi previsti di argomenti ( string e void *).

 bool push(params arg[] list)

				
					    public unsafe class Sender
    {
        int id = -1;

        public Sender(int ids)
        {
            id = ids;
        }


        /** \brief manda un comando alla dll clb_Ezechiele
		 */
        public bool push(params arg[] list)
        {
            if (list.Length <= 0)
                return false;

            if (start_cmd())
            {
                for (int i = 0; i < list.Length; i++)
                {
                    push_info_type ag = list[i].type;
                    switch (ag)
                    {
                        case push_info_type.undef: break;
                        case push_info_type.void_arg: Clb.Push_v(id, (int)ag, list[i].ptr); break;
                        case push_info_type.char_arg: Clb.Push_s(id, (int)ag, list[i].str); break;
                    }
                }
                return end_cmd();
            }
            return false;
        }

        /** @brief inizio trasferimento lista comandi
         * */
        bool start_cmd()
        {
            int start = (int)push_info_type.start;
            return Clb.Push_v(id, start, null);
        }
        bool end_cmd()
        {
            int end = (int)push_info_type.end;
            return Clb.Push_v(id, end, null);
        }


    }

				
			

La funzione Sender.push, come visibile nel codice, esegue l’operazione generando una sequenza di trasferimenti degli elementi in una coda di ricezione gestita in CLB_Ezechiele.

Il trasferimento inizia con l’istruzione start_cmd() e termina con la end_cmd(); le due istruzioni inseriscono due codici riconosciuti dal ricevente Ezc_context come inizio e termine della ricezione di un lista di istruzioni e parametri.

in mezzo vengono trasferiti nel formato atteso il comando e i parametri eventuali. Il codice del tipo di parametro passato dipenderà ovviamente da tipo atteso dall’interprete del comando in Ezc_context.

Un breve inciso: Sender.push   ha ricevuto una lista di parametri di tipo arg  generati da Session.

La classe arg contiene le informazioni ed il tipo di dato dell’argomento; 

Ad esempio, il comando generato dalla funzione Session.open_image ha questo codice:

				
					        public bool open_image(string path_file)
        {
            return send_cmd(_s("open image"), _s(path_file));
        }
				
			

la funzione genera un comando passando come argomento il nome file dell’immagine.  Si può notare che i parametri usati dalla funzione send_cmd sono filtrati attraverso una funzione  ausiliaria  _s (..):

    _s(“open image”) e _s(path_file)) ; 

_s genera un oggetto arg di tipo stringa , fornito alla send_cmd()  la quale  trasferisce la lista alla Sender.

Abbiamo spiegato come la classe Sender organizza la trasmissione dei comandi alla dll nativa CLB_Ezechiele.

Sender è una classe di servizio usata per nascondere i dettagli di trasmissione degli oggetti e dei comandi. 

Un’altra classe utile per richiedere/ passare informazioni a Colibri è la Json_io.

Json_io gestisce l’input e output di informazioni Json e si avvale di due funzioni di Session per svolgere il compito.

Nel prossimo articolo discuteremo di tali metodi, analizzando come, ad esempio, può essere richiesto un atlante colore, informazioni su una cartella,.. ed altro.

Leave a Reply

Skip to toolbar