Module design per Orazio2 --- ovvero: come scrivere un modulo per Orazio2 L'interfaccia di comunicazione con il core di orazio è semplicissima. Di ogni modulo bisogna specificare: 1 - proprietà 2 - funzione di inizializzazione 3 - (fac.) funzione read 4 - (fac.) funzione write Le tre funzioni vengono espletate da tre sub relative come spiegato in seguito. 1 - Proprietà: le proprietà sono - Il nome del modulo: dovrà essere il nome del package E il nome del perl module (file .pm) all'interno della directory IRCMods. - Se è un modulo di lettura, cioè se deve agire su messaggi provenienti dal server - Se è un modulo di scrittura, cioè se deve agire sulle stringhe che verranno inviate al server - Se ha bisogno di autocommit, cioè di rendere immediatamente effettive le modifiche allo stato 2 - Inizializzazione L'inizializzazione è eseguita dalla funzione init, che deve essere implementata come sub di nome "init" all'interno del modulo, e che sarà invocata con $nomemodulo->init(). Il solo argomento passato (PER ORA) è un handle connesso per il database con autocommit attivo, per permettere ai moduli di inizializzarsi. NON BISOGNA DISCONNETTERE l'handle, nè modificarne lo stato interno. Ritorna true se il modulo è stato inizializzato correttamente o falso altrimenti. I moduli NON inizializzati non verranno eseguiti. 3 - Funzione read Analogamente la funzione read è eseguita dalla sub read(). Solo ai moduli che sono di lettura viene chiamata (ed è quindi richiesta) la dichiarazione esplicita della sub read(). La read viene chiamata con $nomemodulo->read(). Come argomento viene passato il riferimento a un hash che puo' essere facilmente usato con shift; my %data = %{$_[0]}; l'hash è descritto nel file data.txt, per capire come viene parsato conviene guardare il sorgente di child.txt. In generale in campi sono intuitivi. Ritorna un array di scalari che verrà accodato all'array del testo da mandare al server. In generale è un array di stringhe NON TERMINATE per es. my @buf; push(@buf, "PRIVMSG $nick :ciao"); return @buf; 4 - Funzione write - L'implementazione è ancora incompleta in quanto NON permette di mandare nuovo testo. - Per i moduli di scrittura viene invocata la sub write con due parametri: riferimento all'hash data e riferimento all'array di buffer dei messaggi per il server in formato grezzo, ottenuto dai moduli della funzione read. La write non ritorna niente. VARIE Per usare il db usate DBI (dbi.perl.org) ed è obbligatoria una "use strict" così com'è presente in tutto orazio. La strutturazione del db dipende da tabella a tabella. Quelle comuni sono i moduli e i server modules name(text pk) ready(bool) read(bool) write(bool) autocommit(bool) servers hostname(text pk) port(integer pk) nickname(text) password(text) realnick(text)