CLB_Ezechiele_net -
utilizzare le strutture Json per comunicare con Colibrì

nell’articolo precedente  abbiamo descritto il modo in cui i comandi e parametri sono scambiati con la libreria nativa Clb_Ezechiele.

In questo articolo vedremo come le strutture Json sono utilizzate per scambiare informazioni fra Colibri ed Ezechiele

 

 

 

Table of Contents

Json_io

La classe è stata progettata per lo scambio di strutture json. Ad esempio, per ricevere informazioni, quali le dimensioni di un’immagine, è usata la funzione Session.get_image_info(); questa funzione rimanda una classe Json_io che contiene le informazioni. 

Il codice che segue è un esempio d’uso di alcune di queste funzioni:

				
							Session conn = null;

			string path_image ="D:\\db_clienti\\TIF\\immagini_test\\LADY.tif";
			string path_colorbook = "D:\\db_clienti\\atlanti_colore";
			string cbook_name = "FTEX_seiko_ColorBook  19-10-02 12_28.cbk";

			string path_session = "D:\\db_clienti";

			string obj_color_book = "color_book";       // oggetto Clb_Ezechiele color_book 
			string obj_session = "session";			// oggetto sessione 


			string cmd_get_color_book_list = "get list "+ obj_color_book;


			conn = new Session();


			if (conn.open_connection())
			{
				if (conn.set_obj_path(obj_session, path_session))
					if (conn.set_obj_path(obj_color_book, path_colorbook))
					{
							Json_io js = new Json_io();
						if (conn.send_cmd_json_get(cmd_get_color_book_list, js))
						{
							js.display(cmd_get_color_book_list);

							Json_io js_book = new Json_io();

							if (conn.get_object(obj_color_book, cbook_name, js_book))
							{
								js_book.display(obj_color_book);

							}
						}
					}
				if (conn.open_image(path_image))
				{

					Json_io info = new Json_io();
					conn.get_image_info(info);

					Image_area img = new Image_area(0, 0, 200, 200, 1.0f);
					void *buf= img.get(conn);
				}

			}
			conn.close();
		}
	}
}
				
			

Le linee evidenziate nell’esempio fanno uso di queste modalità. Analizziamo cosa avviene alle righe 41-42, negli altri casi evidenziati le chieste sono diverse, ma il metodo è identico.

per prima cosa viene istanziato un oggetto Json_io:

Json_io info = new Json_io();

l’oggetto viene passato alla funzione get_image_info, che dovrà ritornare, in formato Json, le inforzioni dimensionali dell’immagine aperta

conn.get_image_info(info);

Il risultato, ottenuto è visibile di seguito:

				
					{
    "object": "image info",
    "created": {
        "date": "17-03-2021",
        "time": "19:25:04"
    },
    "image": {
        "name": "D:\\db_clienti\\TIF\\immagini_test\\LADY",
        "pixel_format": 137224,
        "size": {
            "pixels": [
                9528,
                5197
            ],
            "mm": [
                605.0280151367188,
                330.009521484375
            ],
            "resol_pxl_mm)": [
                15.748030662536621,
                15.748030662536621
            ],
            "offset": [
                0.0,
                0.0
            ]
        }
    }
}
				
			

Ricevere Json da Colibrì

Per capire come costruire una funzione che richiede una struttura Json a Colibri, analizziamo la funzione Session.get_image_info:

				
					 public bool get_image_info(Json_io info)
        {
            return send_cmd_json_get("get image info", info);
        }

				
			

La funzione semplicemente trasferisce l’istanza Json_io ricevuta alla funzione Session.send_cmd_json_get  e ritorna il risultato..

Cosa fa la send_cmd_json_get  ?  analizziamone il codice:

				
					    public bool send_cmd_json_get(string cmd, Json_io js)
        {
            bool ret;
            char* inp = null;
            ret = send_cmd(_s(cmd), _p(&(inp)));
            if (ret)
                js.input(inp);
            return ret;
        }

				
			

La funzione è stata progettata per mandare un comando a Colibrì richiedendo informazioni in formato Json.

in questo esempio il comando è <get image info>, la risposta è il testo Json riportato sopra.

L’informazione potrà essere estratta dalla classe Json_io usando la funzione Json_io.input, passando una stringa oppure assegnando il risultato ad una stringa.

				
					   
// estrazione del testo json ricevuto..
//
string result = js.input();
				
			

Mandare un’informazione Json a Colibri.

E’ data la funzione della classe Session che esegue questo compito.

				
					        /** @brief trasmissione  json a Clb_Ezechiele
			@details per assegnare il testo json da trasmettere usare la funzione Json_io.output(jstxt);
		 *  @param cmd stringa di comando 
		 *  @param js istanza di i/o json
		 */
        public bool send_cmd_json_put(string cmd, Json_io js)
        {
            return send_cmd(_s(cmd), _s(js.output()));
        }

				
			

la funzione, analoga a quella di ricezione , riceve un comando ed una istanza Json_io opportunamente riempita, e richiama la funzione send_cmd passando questa volta il buffer di output ,  js.output().

				
					
Session conn = null;
conn = new Session();


if (conn.open_connection())
{
	string command = "set designer  info";
	Json_io info;

	// preparazione del testo json..
	//
	.
	info.output( " {  testo json mndato . }");
	conn.send_cmd_json_put(command, info);.

	conn.close();
}

				
			

L’esempio mostra come mandare un comando <set designer info> ed un contenuto json che dovrà essere trattato da Colibrì 

le strutture Json sono visibili da Colibri come stringhe, sarà il contesto del comando mandato che definirà se il buffer debba essere riempito o estratto.. Come nel caso di tutti gli oggetti passati da Colibrì, la loro allocazione e disallocazione sarà effettuata in automatico quando non più necessario

Con questo articolo è, per ora, terminata l’esposizione delle classi di CLB_Ezechiele_net. 

Leave a Reply

Skip to toolbar