Exemplo n.º 1
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")
Exemplo n.º 2
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)