def decisioneFantino(self, c, f): self.sockets[c].stato = "Ready" if (f != -1): #print self.fase.chi_corre() for i in self.fantini: to_remove = [] if (i.indice == f): for j, k in enumerate(i.offerte): if (self.barberi[k.chi].contrada != c): to_remove.append(j) else: for j, k in enumerate(i.offerte): if (self.barberi[k.chi].contrada == c): to_remove.append(j) if (len(to_remove) != 0): to_remove.sort(reverse=True) for j in to_remove: i.offerte.pop(j) for b in self.barberi: if (b.contrada == c): self.fantini[f].contrada = c b.fantino = f self.contrade[c].status[2] -= self.fantini[f].prezzo() self.sendMessage(c, ["AggiornaBarbero", b.indice]) self.sendMessage(c, ["AggiornaContrada", c]) self.sendMessage(c, ["AggiornaFantino", f]) break if (self.controllaNSocketsPerStato(10, "Ready")): for b in self.barberi: #print i.fantino, i.indice if (b.fantino == -1): f = fantino.Fantino() self.fantini.append(f) self.sendMessage(b.contrada, ["Message Box", "Per il momento hai coraggiosamente deciso di affidarti al giovane " + f.nomeVero + "."]) b.fantino = len(self.fantini) - 1 self.fantini[f].contrada = b.contrada self.contrade[c].status[2] -= 10 self.sendMessage(b.contrada, ["AggiornaBarbero", b.indice]) self.sendMessage(b.contrada, ["AggiornaContrada", c]) self.sendMessage(b.contrada, ["AggiornaFantino", f]) for s in self.sockets: if (s.userName != "AI"): t0 = [self.contrade[i].nome for i in b.contrada] t1 = [self.cavalli[i].nome for i in b.cavallo] t2 = [] for i in b.fantini: if (self.fantini[i].nome != "-") : t2.append(self.fantini[i].nome) else: t2.append(self.fantini[i].nomeVero) self.sendMessage(s, ["AggiornaTutto", t0, t1, t2]) #self.saveFile() self.fase.nuovaFase()
def __init__(self, parent=None): super(TDPalioAiClient, self).__init__(parent) self.socket = QTcpSocket() self.socket.connectToHost("localhost", 1974) self.barbero = barbero.Barbero() self.contrada = contrada.Contrada() self.fantino = fantino.Fantino() self.cavallo = cavallo.Cavallo() self.connect(self.socket, SIGNAL("connected()"), self.ready) self.connect(self.socket, SIGNAL("readyRead()"), self.readMessage) self.connect(self.socket, SIGNAL("disconnected()"), self.serverHasStopped) self.connect(self.socket, SIGNAL("error(QAbstractSocket::SocketError)"), self.serverHasError) self.connect(self.socket, SIGNAL("stateChanged (QAbstractSocket::SocketState)"), self.statoSocket)
def inizializza(self): # FIXME condizioni iniziali casuali ???? file = open("data/setup.dat", "r") for i in xrange(17): c = contrada.Contrada() c.caricaDati(file) self.contrade.append(c) for i in xrange(16): f = fantino.Fantino() f.caricaDati(file) self.fantini.append(f) for i in xrange(21): c = cavallo.Cavallo() c.caricaDati(file) self.cavalli.append(c) self.fase.estrazione(-1)
def readMessage(self): while (self.socket.bytesAvailable() > 0): stream = QDataStream(self.socket) stream.setVersion(QDataStream.Qt_4_2) codice = QString() stream >> codice if (codice == "SceltaCavalli"): cavalli = list() for i in xrange(20): c = cavallo.Cavallo() c.inStreamer(stream) cavalli.append(c) self.sceltaCavalli(cavalli) elif (codice == "SceltaFantino"): nFantini = stream.readInt16() fantini = list() for i in xrange(nFantini): f = fantino.Fantino() f.inStreamer(stream) fantini.append(f) self.sceltaFantino(fantini) elif (codice == "AggiornaBarbero"): b = barbero.Barbero() b.inStreamer(stream) self.barbero = b elif (codice == "AggiornaContrada"): c = contrada.Contrada() c.inStreamer(stream) self.contrada = c elif (codice == "AggiornaFantino"): f = fantino.Fantino() f.inStreamer(stream) self.fantino = f elif (codice == "AggiornaCavallo"): c = cavallo.Cavallo() c.inStreamer(stream) self.cavallo = c elif (codice == "RispostaFantinoSi"): offerte = stream.readInt16() off = [] if (offerte == 0): pass else: for i in xrange(limite): o = fantino.offerta() o.inStream(stream) off.append(o) self.decidiFantino(off) elif (codice == "Partiti"): barberi = [] for i in xrange(10): b = barbero.Barbero().inStream(stream) barberi.append(b) self.partiti(barberi) elif (codice == "RispostePartiti"): self.barbero.inStream(stream) self.decidiPartito() elif (codice == "StrategiaProva"): nProva = stream.readInt16() self.strategiaProva(nProva)
selezioni += 1 strategia = 3 if (corsa == "A Vincere"): strategia = 0 if (corsa == "A Correre"): strategia = 1 if (corsa == "A Vendere"): strategia = 2 index = self.model.index(row, 5) prezzo = index.data(QtCore.Qt.DisplayRole).toInt()[0] o = fantino.Offerta(self.indice, strategia, self.fantini[row].indice, prezzo) self.offerte.append(o) if (selezioni <= 3): self.done(Qt.QDialog.Accepted) else: self.offerte = [] if __name__ == '__main__': app = QtGui.QApplication(sys.argv) fantini = [] for i in xrange(16): f = fantino.Fantino() fantini.append(f) client = sceltafantino(fantini) client.show() sys.exit(app.exec_())
def readMessage(self): while (self.tcpSocket.bytesAvailable() > 0): stream = Qt.QDataStream(self.tcpSocket) stream.setVersion(Qt.QDataStream.Qt_4_2) codice = Qt.QString() stream >> codice print codice if (codice == "SceltaCavalli"): cavalli = list() for i in xrange(21): c = cavallo.Cavallo() c.inStreamer(stream) cavalli.append(c) self.sceltaCavalli(cavalli) elif (codice == "AggiornaTutto"): temp = [] s = Qt.QString() for i in xrange(10): stream >> s temp.append(s) self.aggiornaContradeTable(1, temp) temp = [] for i in xrange(10): stream >> s temp.append(s) self.aggiornaContradeTable(1, temp) temp = [] for i in xrange(10): stream >> s temp.append(s) self.aggiornaContradeTable(1, temp) elif (codice == "Assegnazione"): ass = [] barberi = [] cav = [] for i in xrange(10): ass.append([stream.readInt16(),stream.readInt16(),stream.readInt16(),stream.readInt16()]) for i in xrange(10): nome = Qt.QString() stream >> nome barberi.append(nome) for i in xrange(10): nome = Qt.QString() stream >> nome cav.append(nome) self.assegnazione(ass, barberi, cav) elif (codice == "Conferma Contrada"): c = contrada.Contrada() c.inStreamer(stream) g = giocatore.Giocatore() g.inStreamer(stream) self.aggiornaContradaPanel(c, g) elif (codice == "Message Box"): message = Qt.QString() print message stream >> message Qt.QMessageBox.information (self, "TdPalio II", message) elif (codice == "Message Chat"): message = Qt.QString() stream >> message self.leggiChat(["Server:", message]) elif (codice == "Gioco Attivo"): stato = stream.readInt16() #print "Il server e` nel seguente stato: ", stato if (stato == 0): # NESSUN GIOCO ATTIVO self.ui.actionNew.setEnabled(True) giochi = stream.readInt16() for i in xrange(giochi): nome = Qt.QString() data = Qt.QString() stream >> nome self.nome_giochi.append(str(nome)) stream >> data self.data_giochi.append(str(data)) elif (stato == 2): stream >> nome self.ui.actionOpen.setEnabled(True) Qt.QMessageBox.information (self, "TdPalio II", "Il gioco " + nome + " e` attivo") elif (stato == 1): Qt.QMessageBox.information (self, "TdPalio II", "Un altro giocatore sta scegliendo il gioco") elif (codice == "UserName"): self.sendMessage(["UserName",]) elif (codice == "Lista Contrade"): nLista = stream.readInt16() lista = [] for i in xrange(nLista): l = Qt.QString() stream >> l lista.append(l) # FIXME SCELTA CASUALE DELLA CONTRADA item = Qt.QInputDialog.getItem(self, "Lista Contrade", "Contrada", lista, 0, False) if (item[1] and not item[0].isEmpty()): self.sendMessage(["Contrada Scelta", item[0]]) elif (codice == "Join Gioco"): nome = Qt.QString() stream >> nome accept = Qt.QMessageBox.question(self, "TdPalio II", "Il gioco " + nome + " e` attivo. Vuoi partecipare ?", Qt.QMessageBox.Yes|Qt.QMessageBox.No) if (accept == Qt.QMessageBox.Yes): self.sendMessage(["Join Gioco Corrente",]) else: self.sendMessage(["Not Join Gioco Corrente",]) elif (codice == "Estrazione"): lista = [] for i in xrange(17): s = Qt.QString() stream >> s lista.append(s) self.estrazione(lista) elif (codice == "SceltaFantino"): nFantini = stream.readInt16() fantini = list() for i in xrange(nFantini): f = fantino.Fantino() f.inStreamer(stream) fantini.append(f) self.sceltaFantino(fantini) elif (codice == "RispostaFantinoSi"): offerte = stream.readInt16() off = [] for i in xrange(offerte): o = fantino.offerta() o.inStream(stream) off.append(o) self.decidiFantino(off) elif (codice == "AggiornaBarbero"): b = barbero.Barbero() b.inStreamer(stream) self.barbero = b elif (codice == "AggiornaContrada"): c = contrada.Contrada() c.inStreamer(stream) self.contrada = c elif (codice == "AggiornaFantino"): f = fantino.Fantino() f.inStreamer(stream) self.fantino = f elif (codice == "AggiornaCavallo"): c = cavallo.Cavallo() c.inStreamer(stream) self.cavallo = c self.aggiornaCavalloPanel() elif (codice == "StrategiaProva"): nProva = stream.readInt16() self.strategiaProva(nProva) elif (codice == "Partiti"): self.partiti() elif (codice == "RispostePartiti"): self.barbero.inStream(stream) self.decidiPartito() elif (codice == "NotificaPartiti"): # FIXME leggi partito e spurga la lista dei partiti richiesti self.notificaPartiti()
def processMessage(self, number, stream): codice = QString() stream >> codice print "SERVER: ", codice, number if (codice == "Ready"): self.sockets[number].stato = "Ready" if (self.controllaNSocketsUmani(1) and self.controllaNSocketsUmaniPerStato(0, "Not Ready")): self.fase.nuovaFase() if (self.controllaNSocketsPerStato(17, "Ready") and self.controllaNSocketsUmani(1)): self.fase.nuovaFase() #if (self.controllaNSocketsPerStato(10, "Ready") and self.controllaNSocketsPerStato(7, "Spectator")): # self.fase.nuovaFase() elif (codice == "UserName"): nome = QString() stream >> nome print "Si e` registrato il giocatore: ", nome self.sockets[number].userName = str(nome) self.sendMessage(number, ["Gioco Attivo", self.giocoAttivo]) #elif (codice == "Nuovo Gioco"): # n_parametri = stream.readInt16() # parametri = [] # for i in xrange(n_parametri): # stream >> p # parametri.append(p) # if (self.avviamentoGioco): # self.sendMessage(number, ["Messaggio", "Un gioco e` gia` stato scelto"]) # else: # self.avviamentoGioco = True # self.giocoAttivo = True # self.nomeFile = parametri[1] # self.fase.anno = parametri[2] # for i in xrange(17, len(self.sockets)): # self.contradeDisponibili(i) #elif (codice == "Vecchio Gioco"): # if (self.avviamentoGioco): # self.sendMessage(number, ["Messaggio", "Un gioco e` gia` stato scelto"]) # else: # self.avviamentoGioco = True # self.sendMessage(number, ["Avvia Gioco",]) elif (codice == "Gioco Scelto"): if (self.avviamentoGioco != -1 and self.avviamentoGioco != number): return self.avviamentoGioco = number self.giocoAttivo = True stream >> self.fileName if (self.fileName == "----"): self.giocoAttivo = False self.avviamentoGioco = -1 print "Nessun gioco scelto" return if (os.path.isfile("giochi/"+ self.fileName+".tdp")): result = self.caricaFile() if (not result): for k,i in enumerate(self.sockets): if (i.userName != "AI"): self.sendMessage(k, ["Message Box", "Problema irreversibile: non posso caricare il gioco."]) sys.exit(1002) for i in xrange(len(self.sockets)): if (i == self.avviamentoGioco): self.sockets[number].stato = "Ready" self.contradeDisponibili(number) else: self.sendMessage(i, ["Join Gioco",]) else: self.salvaFile() for i in xrange(len(self.sockets)): if (i == self.avviamentoGioco): self.sockets[number].stato = "Ready" self.contradeDisponibili(number) else: self.sendMessage(i, ["Join Gioco",]) elif (codice == "Join Gioco Corrente"): self.sockets[number].stato = "Ready" self.contradeDisponibili(number) elif (codice == "Not Join Gioco Corrente"): self.sockets[number].stato = "Spectator" elif (codice == "Contrada Scelta"): c = QString() stream >> c lista = [i.nomeCompleto for i in self.contrade] index = lista.index(c) self.sceltaContrada(number, index, 1) elif (codice == "SceltaCavalli"): self.sockets[number].stato = "Ready" nScelti = stream.readInt16() scelta = [] for i in xrange(nScelti): scelta.append(stream.readInt16()) self.sceltaCavalliRead(scelta) elif (codice == "SceltaFantino"): offerte = [] nOfferte = stream.readInt16() for i in xrange(nOfferte): o = fantino.Offerta() o.inStreamer(stream) offerte.append(o) self.sceltaFantinoRead(number, offerte) elif (codice == "RispostaFantinoSi"): offerte = [] elif (codice == "FantinoDeciso"): f = stream.readInt16() self.decisioneFantino(number, f) elif (codice == "Partiti"): nPartiti = stream.readInt16() listaPartiti = [] for i in xrange(nPartiti): p = barbero.Partito() p.inStreamer(stream) listaPartiti.append(p) self.sockets[number].stato = "Ready" self.raccogliPartiti(listaPartiti) elif (codice == "DecisionePartiti"): self.sockets[number].stato = "Ready" b = barbero.Barbero() b.inStreamer(stream) self.barberi[b.indice] = b if (self.controllaSockets(10, "Ready")): self.notificaPartiti() elif (codice == "StrategiaProva"): b = barbero.Barbero() b.inStreamer(stream) self.barberi[b.indice] = b self.sockets[number].stato = "Ready" if (self.controllaSockets(10, "Ready")): self.fase.nuovaFase() elif (codice == "RispostaSegnatura"): self.sockets[number].stato = "Ready" f = fantino.Fantino() f.inStreamer(stream) self.fantini[f.indice] = f # FIXME comunica a tutti il nuovo nome... if (self.controllaSockets(10, "Ready")): self.fase.nuovaFase()
def caricaFile(self): self.cavalli = [] self.fantini = [] path = "giochi/" + self.fileName + ".tdp" file = QFile(path) if (not file.open(QIODevice.ReadOnly)): print "NON POSSO CARICARE QUESTO GIOCO (Error Code " + file.error()+")" # FIXME manda un popup a chi ha cercato di caricare il gioco # QString mex("NON POSSO CARICARE QUESTO GIOCO..."); # myStreamerOut->stringStream[0] = mex; # for(int i=0; i<sockets.size(); ++i) { # sendMessage(PopupMessage, sockets[i]); # return false; sys.exit(8003) inf = QTextStream(file) t = QString() inf >> t self.fase.anno = int(t) inf >> t self.fase.mese = int(t) inf >> t self.fase.fase = int(t) inf >> t self.fase.nprova = int(t) #for i in xrange(17): # inf >> self.corrono[i] # ??????? for i in xrange(17): inf >> t self.fase.luglio[i] = int(t) for i in xrange(17): inf >> t self.fase.agosto[i] = int(t) for i in xrange(17): inf >> t self.fase.straordinario[i] = int(t) inf >> t nGiocatori = int(t) for i in xrange(nGiocatori): g = giocatore.Giocatore() g.inTextStreamer(inf) self.giocatori.append(g) for i in xrange(17): c = contrada.Contrada() c.inTextStreamer(inf) self.contrade[i] = c for i in xrange(21): c = cavallo.Cavallo() c.inTextStreamer(inf) self.cavalli.append(c) inf >> t nFantini = int(t) for i in xrange(nFantini): f = fantino.Fantino() f.inTextStreamer(inf) self.fantini.append(f) inf >> t nBarberi = int(t) for i in xrange(nBarberi): b = barbero.Barbero() b.inTextStreamer(inf) self.barberi.append(b) file.close() return 1