Ejemplo n.º 1
0
    def run(self):
        # Controlla tipo di thread
        msg = self.conn.recv(1024).decode("utf-8").strip()
        print(msg)
        pxml = ParserXML()
        messaggio = pxml.toDOMObject(msg)  # converto il messaggio(xml) in un oggetto di tipo DOM
        tipo = messaggio.getElementsByTagName("tipo")[0]  # ottengo il nodo del primo elemento "tipo"
        msg = tipo.firstChild.nodeValue  # ottengo il valore dell'elemento tipo

        if msg == "user":
            print("utente connesso")
            ut = UserThread(self.sd, self.ID, self.conn, self.addr)
            ut.start()
            # scrivi file di log
            with open("log\log.txt", "a") as myfile:
                myfile.write(datetime.datetime.now().ctime() + " User connected with IP: " + str(self.addr))

        elif msg == "transport":
            print("trasporto connesso")
            tt = TransportThread(self.sd, self.ID, self.conn, self.addr, self.index)
            self.index += 1
            self.sd.addTransport(tt)  # il thread parte in questo metodo, dopo averlo aggiunto nella lista
            # scrivi file di log
            with open("log\log.txt", "a") as myfile:
                myfile.write(datetime.datetime.now().ctime() + " User connected with IP: " + str(self.addr))

        elif msg == "listRequest":
            print("listRequest connesso")
            lrt = ListRequestThread(self.sd, self.ID, self.conn, self.addr)
            lrt.start()
            print("Thread sort")
            # scrivi file di log
            with open("log\log.txt", "a") as myfile:
                myfile.write(datetime.datetime.now().ctime() + " User connected with IP: " + str(self.addr))
Ejemplo n.º 2
0
 def run(self):
     try:
         print("Connected by", self.addr)
         pxml = ParserXML()
         self.send(pxml.getDOMResponse("Connected"))
         msg = self.conn.recv(1024).decode('utf-8').strip() # ricevo dal client il numero di mezzi da inviare al client
         doc = pxml.toDOMObject(msg)
         richiesta = pxml.getLimitOffsetAndPTtype(doc) # ottengo una tupla (tipo, limit, offset)
         #totMezzi = self.sd.getNumTransports(richiesta[0]) # passo il tipoMezzo
         print("TYPE:" + richiesta[0] + " LIMIT:" + richiesta[1] + " OFFSET:" + richiesta[2])
         msg = self.sd.getDOMTransportsList(tipoMezzo=richiesta[0], limit=richiesta[1], offset=richiesta[2]) # ottengo i primi "richiesta[1]" mezzi di tipo "richiesta[0]" a partire da "richiesta[2]"
         self.send(msg)       
         self.conn.close()
         print("Connessione chiusa correttamente")
     except ConnectionResetError:
         print("Socked closed by client")
Ejemplo n.º 3
0
    def run(self):
        try:
            print("Connected by", self.addr)
            self.send("Connected")
            pxml = ParserXML()

            while True: # esco quando il client si disconnette
                # rimuovo timeout per ricezione mezzo
                self.conn.settimeout(None) 

                # ricevo mezzo dell'utente
                msg = self.conn.recv(1024).decode('utf-8').strip()
                print(msg)
                doc = pxml.toDOMObject(msg)
                tobj = pxml.getTransportObj(doc) # ottengo il mezzo del client
                posI = self.sd.getTransportI(tobj.nomeMezzo, tobj.compagnia, tobj.tratta) # ottengo posizione del mezzo nella lista
            
                # invio risposta se il mezzo è attivo
                loop = False
                if posI == -1:
                    self.send(pxml.getDOMResponse(msg="Mezzo di trasporto non attivo"))
                    print("mezzo di trasporto NON trovato")
                else:
                    self.send(pxml.getDOMResponse())
                    print("mezzo di trasporto trovato")
                    loop = True

                # imposto timeout per invio coordinate
                self.conn.settimeout(1)
                
                while loop:
                    try:
                        time.sleep(self.time)
                        # lettura posizioni xy del mezzo interessato
                        print("INVIO: " + self.sd.transportList[posI].coordX + " ; " + self.sd.transportList[posI].coordY)
                        print()
                        
                        # invio posizioni X-Y al client
                        DOMofCoord = pxml.getDOMofCoord(self.sd.transportList[posI].coordX, self.sd.transportList[posI].coordY)
                        self.send(DOMofCoord)

                    except IndexError:
                        loop = False
                        print("can't find transport, maybe disconnected")

                    try: # provo a ricevere un messaggio di fine
                        msg = self.conn.recv(1024).decode('utf-8').strip()
                        loop = False
                        #print(type())

                    except socket.timeout: # ricevo timeout dalla socket
                        print("Timeout")

        except ConnectionResetError:
            print("socked closed by client")
Ejemplo n.º 4
0
 def getDOMTransportsList(self, IDCompagnia=None, tipoMezzo=None, limit=None, offset=None):
     self.listaMezzi = self.db.getTransports(IDCompagnia, tipoMezzo, limit, offset)
     pxml = ParserXML()
     doc = pxml.getDOMOfTransportsList(self.listaMezzi)
     return doc
Ejemplo n.º 5
0
    def run(self):
        try:
            print("Thread" + str(self.ID))
            print("Connected by", self.addr)

            # conferma connessione
            pxml = ParserXML()
            ack = pxml.getDOMResponse() # messaggio di default con "OK"
            self.send(ack)
            #self.send(ack)

            # ricevi username e password
            msg = self.conn.recv(1024).decode('utf-8').strip()

            userdoc = pxml.toDOMObject(msg)

            auth = pxml.getUsernameAndPassword(userdoc) # ottengo una tupla contenente username e password
            # controllo username e password
            ris = self.sd.checkLogin(auth[0], auth[1])

            # se username e password non sono errati
            if  ris != -1 and ris != -2:
                #invio ack password corretta
                self.send(ack)

                # invio lista dei mezzi
                msg = self.sd.getDOMTransportsList(IDCompagnia=ris, mezzoAttivo="false")
                self.send(msg)

                # ricevo il mezzo dell'autista
                msg = self.conn.recv(1024).decode('utf-8').strip()
                print(msg)
                doc = pxml.toDOMObject(msg)
                self.mezzo = pxml.getTransportObj(doc)
                posI = self.sd.getTransportI(self.mezzo.nomeMezzo, self.mezzo.compagnia, self.mezzo.tratta) # cerco il mezzo nella lista dei mezzi già attivi
            
                # se il mezzo è già attivo
                if posI == -1:
                    self.send(pxml.getDOMResponse(msg="NOTOK"))
                    print("Mezzo di trasporto gia' attivo")
                # se il mezzo non è ancora attivo
                else:
                    self.send(ack) # invio conferma di ricezione del mezzo           

                    # abilito il mezzo nel DB
                    self.sd.enableTransport(self.mezzo.ID)
                
                    # ricevo posizione (X e Y)
                    while pxml.readDOMResponse(doc, "messaggio") != "END":
                        msg = self.conn.recv(1024).decode('utf-8').strip()
                        #print(msg)
                        doc = pxml.toDOMObject(msg)
                        pos = pxml.getCoordFromDOM(doc)
                        if pos != False:
                            self.coordX,self.coordY = pos[0],pos[1]
                            print("RICEVO: " + self.coordX + " ; " + self.coordY)  
                
            # username errato
            elif ris == -2:
                self.send(pxml.getDOMResponse(msg="-2"))
            # password errata
            elif ris == -1:
                self.send(pxml.getDOMResponse(msg="-1"))


            # fine del programma
        except ConnectionResetError:
            print("socked closed by client")

        # cancello il trasporto dalla lista e lo disattivo nel DB
        self.sd.disableTransport(self.mezzo.ID)
        self.sd.delTransport(self.index)