# module standard python de gestion des communications
import socket
# module d'encodage des objets python
import pickle

class ComSockCli():
    '''Classe de base de gestion des communications, côté client.
    Encode les données, les envoie au serveur, récupère les résultats, et les décode.
    Pour l'utilisation, dériver cette classe et utiliser la méthode "envoi"
    (voir le programme exemple client.py).'''

    def __init__(self,host):
        '''Méthode appelée lors de la création de l'objet.
        Ne fait que mémoriser le nom du serveur.'''
        self.host = host

    def envoi(self,data):
        '''Envoie un objet python au serveur et récupère un objet en résultat.'''

        # le port IP est au choix ; il doit être identique à celui du serveur
        port = 8000
        # créee socket IP
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # réalise la connection au serveur. Le nom a été mémorisé à l'init de l'objet.
        s.connect((self.host,port))
        # encode l'objet à transmettre
        msg = pickle.dumps(data)
        # envoie le buffer encodé
        s.send(msg)
        # attend le buffer contenant l'objet résultant
        rep = s.recv(1024)
        # ferme la communication
        s.close()
        # décode
        reponse = pickle.loads(rep)
        # retourne l'objet résultant
        return reponse
