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))
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")
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")
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
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)