1. Introducció
Abans de començar la creació de plugins és important que hages llegit les següents entrades:
2. Plugins n4d
El desenvolupament de mòduls n4d és prou senzill i consisteix principalment en:
- Definir la classe i els mètodes que volem implementar.
- Indicar al sistema n4d com publicar aquests mètodes de cara a l'exterior.
La millor manera de veure açò, és a través d'un xicotet exemple que veurem a continuació.
L'estructura d'un plugin consta de dos fitxers, un de configuració (/etc/n4d/conf.d) i altre d'implementació de la classe (/usr/share/n4d/).
Dins de la carpeta /usr/share/n4d tenim diferents carpetes en funció del llenguatge de programació que utilitzem per a crear el plugin:
- python-plugins: escrits en python
- perl-plugins: escrits en perl
- binary-plugins: escrits en bash
3. Creació d'un plugin xat d'aula
El nostre plugin, que anomenarem N4dChat, implementarà tres mètodes i disposarà d'un atribut on guardarà els missatges:
- ClaseN4dChat
- Atribut missatge: llista de missatges.
- Mètode SendMessage(ip, usuari, missatge): Agafarà la ip de qui l'envia, el nom d'usuari i el missatge.
- Mètode getMessages(inici): Tornarà tots els missatges enviats a la par del missatge marcat com a "Inici".
- Mètode saveChat(arxiu): guardarà tots els missatges en el /tmp del servidor.
Els mètodes sendMessage i getMEssage són accessibles per a tothom i savehat serà sols accessible per a administradors i professors.
Per a implementar açò crearem un fitxer /etc/n4d/conf.d/N4dChat amb el següent contingut:
[SETUP] type=python path=N4dChat.py class=N4dChat [METHODS] (ip)sendMessage=anonymous getMessages=anonymous saveChat=adm,admins,teachers
Podem veure que tenim dues seccions en l'arxiu:
- SETUP: que és on es configura el plugin.
- type=python : definim el llenguatge de programació del plugin.
- path=N4dChat.py Nom del fitxer on s'implementaran els mètodes.
- class=N4dChat Nom de la classe
- METHODS: on s'indiquen els mètodes que es fan públics en la classe.
- (ip)sendMessage=anonymous : la ip davant indica que la ip de la màquina s'envia com primer paràmetre.
- getMessages=anonymous
- saveChat=adm,admins,teachers
Anem a explicar el codi pas a pas. Has de tenir en compte que no pots tallar i apegar directament aquest codi puix python utilitza els tabuladors.
Importem les llibreries os i json. Os per accedir al sistema i json per poder crear arxius json
import os import json
Definim la classe N4dChat i definim el constructor. En el constructor iniciem un vector:
class N4dChat: def __init__(self): self.Messages=[] pass
Definim el mètode sendMessage(self, ip, username, message)
def sendMessage(self, ip, username, message): try: msg={"ip":ip, "username": username, "message":message} self.Messages.append(msg) except Exception as e: print "except "+str(e) return 1
Definim el mètode getMessage(self, startMsg), on li passem des de quin missatge volem que comence a llegir.
def getMessages(self,startMsg): try: return(self.Messages[int(startMsg):]); except Exception as e: print "except "+str(e) return 1 return 0
Definim el mètode saveChat(self, filename) on indiquem el nom de l'arxiu que volem que se salve.
def saveChat(self, filename): try: with open("/tmp/"+filename, 'w') as outfile: json.dump(self.Messages, outfile) except Exception as e: print "except "+str(e) return 1 return 0
Des d'ací podem baixar l'arxiu per a utilitzar-lo:
4. Ús i verificació de plugins
Una vegada hàgem creat el nostre plugin, si volem verificar-lo hem de reinicialitzar el servidor n4d, per a això hem de fer:
sudo service n4d restart
És important obrir altra terminal i controlar el log de n4d:
sudo tail -f /var/log/n4d/n4d-server
Si ens fixem en el log, en algun moment ha d'eixir-nos:
[N4dChat] /usr/share/n4d/python-plugins/N4dChat.py ... OK
Si hi ha algun problema, hem de revisar el codi per a assegurar-nos que tot és correcte.
5. Proves
Finalment hem de provar el nostre plugin. Si tot ha funcionat correctament, per a provar-lo utilitzarem n4d-client.
n4d-client -c N4dChat -m sendMessage -a "" lliurex "Hola a tots"
n4d-client -c N4dChat -m getMessages -a 0 [{'username': 'lliurex', 'ip': '127.0.0.1', 'message': 'Hola a tots'}, {'username': 'lliurex', 'ip': '127.0.0.1', 'message': 'Fent proves'}]
n4d-client -c N4dChat -m saveChat -u lliurex -p lliurex -a chat.txt cat /tmp/chat.txt [{"username": "lliurex", "ip": "127.0.0.1", "message": "Hola a tots"}, {"username": "lliurex", "ip": "127.0.0.1", "message": "Fent proves"}]