.. _services/funzionamento_service: Funzionamento del service ========================= Esistono due modalità di funzionamento del service: - una modalità attiva, a "chiamata" (il service viene attivato manualmente al fine di innescare una specifica azione) - una modalità passiva, in "ascolto" (il service è sempre attivo e in ascolto, e può compiere delle azioni in automatico) Modalità attiva: getService --------------------------- Il service può essere attivato tramite una chiamata al server di tipo Rpc. Sarà innanzitutto necessario individuare il service con il metodo ``getService``, fornendogli (anche implicitamente) il **service_name** e facoltativamente il **service_type**. A quel punto sarà possibile chiamare un qualsiasi metodo contenuto nella classe *Main* del service. Ad esempio:: service = self.db.application.site.getService(service_name=service_name, service_type=service_type) assert service,'set in siteconfig the service' result = service.publishPost(title=title, message=message, image=image, api_token=api_token) if result: print('***POST RESULT: ', result) return result In questo caso stiamo chiamando il metodo *PublishPost* fornendogli come parametri *title, message, image e api_token*. Modalità passiva: gnrserviceworker ---------------------------------- Il **gnrserviceworker** è un processo che è di default attivato sui service in produzione che prevede il lancio di tutti i service previsti nell'istanza. Questo processo può essere utile per avere **service in costante ascolto di eventi**, al fine di fornire risposte automatiche o innescare processi. Lo script effettuerà la ricerca di file ``.py`` da avviare all'interno di tutte le cartelle ``lib > services`` e si occuperà automaticamente del lancio dei servizi stessi. Un esempio potrebbe essere il service :ref:`Telegram` del package :ref:`Genrobot` . È possibile lanciare lo script anche in locale. Per fare questo, a ``gnrdaemon`` attivato, aprire una nuova finestra del terminale e lanciare il comando:: gnrserviceworker instance.package.servicetype.servicename Quindi, ad esempio, per avviare *genrobot* sull'istanza *sandboxpg*:: gnrserviceworker sandboxpg.genrobot.telegram.telegram Il prerequisito sarà chiaramente l'aggiunta del :ref:`package Genrobot` all'istanza Sandbox .. sectionauthor:: Davide Paci