import sys
import threading
import datetime 
from dades_observador import dades_observador
from recull import Recull
import socket

def central(conn, port, nConnexions):
    """:param str conn: connexió internet
        :param int port: port de la connexió
        :param int nConnexions: nombre de connexions a tractar simultàniament. 

        La funció *serveix* als observadors que recullen dades pel
        territori.  Crea un contenidor del tipus :py:class:`Recull`, i
        per cada observador que es vol connectar, crea un fil
        concurrent de la funció :func:`dades_observador` per gestionar
        la seva comunicació. La funció :func:`dades_observador`
        treballa a partir del socket de connexió acceptat i del
        contenidor creat i compartit per tots els altres fils
        engegats. La funció acaba un cop ha tractat `nConnexions`
        connexions.

    """ 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setblocking(True) 
    s.bind((conn, port))
    s.listen(nConnexions)  # socket en espera de connexions
    rec = Recull()
    fils = []
    for i in range(nConnexions):
        conn, adreça = s.accept()
        fils.append(threading.Thread(target=dades_observador,
                                     args=(conn, rec)))
        fils[-1].daemon = False
        fils[-1].start()

    for f in fils:
        f.join()

    s.close()
    rec.guarda('/tmp/recull.dat')
        
if __name__ == "__main__":
    central('',  50007, int(sys.argv[1]))
