Example #1
0
 def close(self):
     self.allow_receiving = False
     self.allow_connection = False
     self.allow_sending = False
     for sock in self.inputs[1:]:
         send_to(sock, "BYE")
     self.server.close()
     print("Program end engaged")
     os._exit(0)
Example #2
0
    def wait_for_STR_signal(self):
        while True:
            #if not self.received_queue.empty():print(data)

            data = self.received_queue.get()
            if data == "STR":
                return True
            else:
                send_to(
                    self.conv_pnumber_to_psock(0),
                    "MSG Croupier En attente de votre signal de lancement")
Example #3
0
    def __init__(self, players, server):
        self.players = players
        self.server = server
        ## lance le gdm qui gère localement les donées de jeu
        self.gdm = Game_data_manager()
        print("initialization complete, croupier rdy")
        for sock, name in self.players.items():
            print("{} IS {}".format(sock.getsockname(), name))
            self.gdm.add_new_player()
            send_to(sock, "MSG Croupier Bienvenue, la table est prête")
        # demande le lancement du jeu
        send_to(self.conv_pnumber_to_psock(0),
                "MSG Croupier En attente de votre signal de lancement")

        self.received_queue = Queue()
        self.current_player_turn = 0
        # 0 non participant à la partie, 1 participant, 2 participant all in
        self.players_statut = [1 for x in range(NB_PLAYER)]
        # entrée à payer pour rester dans le jeu
        self.current_entry_fee = 0
        self.start_treating()
Example #4
0
    def start_game_phase(self):
        while not self.gdm.check_loser():  # tant qu'il n'y a pas de pertant
            for player in range(NB_PLAYER):
                if self.gdm.check_loser():
                    break
                if self.gdm.check_empty_hand(
                        player
                ):  # si un joueur n'a plus de carte il en reprends 2
                    self.gdm.deal_card_to_player(player)
                    self.gdm.deal_card_to_player(player)
                    self.send_hand_to_player_sock(
                        self.conv_pnumber_to_psock(player))

                if self.gdm.get_player_statut(player):  # 1 or 2
                    played_a_card = False
                    while not played_a_card:
                        self.brodcast(
                            "MSG Croupier c'est au joueur {} de jouer une carte"
                            .format(self.get_player_name(player)))
                        self.ask_input_to_player_sock(
                            self.conv_pnumber_to_psock(player), "PLY",
                            " ")  #demande au joueur de jouer une carte
                        player_rep = self.received_queue.get(
                        )  #recupere sa reponse
                        player_rep = player_rep.split()
                        if player_rep[0] == "PLY":
                            try:
                                player_input = int(
                                    player_rep[1])  #reconverti sa mise en int
                            except:
                                send_to(
                                    self.conv_pnumber_to_psock(player),
                                    "MSG Croupier Merci de respecter les format"
                                )
                                continue
                            if self.gdm.remove_card_from_hand(
                                    player,
                                    player_input):  #carte valide et joué
                                self.brodcast("ANN PLY {} {}".format(
                                    self.get_player_name(player),
                                    player_input))

                                self.brodcast(
                                    "MSG Croupier la pile vaut maintenant {}".
                                    format(self.gdm.get_pile()))
                                played_a_card = True
                            else:
                                send_to(
                                    self.conv_pnumber_to_psock(player),
                                    "MSG Croupier Merci de joueur une carte valide"
                                )
                        else:
                            send_to(
                                self.conv_pnumber_to_psock(player),
                                "MSG Croupier Merci de respecter les format")
                    self.current_player_turn = (self.current_player_turn +
                                                1) % NB_PLAYER
Example #5
0
    def receiving_accept(self):
        while self.allow_connection or self.allow_recept:
            try:
                rlist, wlist, elist = select.select(self.inputs,[],[])
            except:
                continue
            for s in rlist:
                if s is self.server and self.allow_connection:
                    # si nouvelle connection socket
                    conn, cliaddr = s.accept()
                    print("connection from {}".format(cliaddr))
                    self.inputs.append(conn)
                    #demande au socket de s'identifier
                    if self.current_nb_connected < MAX_CONNECTION:
                        self.players_dict[conn] = "VISITOR"
                        send_to(conn,"WHO")
                    else:
                        self.spectators_dict[conn] = "VISITOR"
                        send_to(conn,"WHO")

                    self.current_nb_connected +=1

                else:
                    # sinon, il s'agit d'une reception de donnée
                    try:
                        data = s.recv(1024)
                    except:
                        continue
                    data = data.decode()
                    if data:
                        # si autentification
                        if data[:3] == "IAM" :
                            if self.add_to_lists(s, data):
                                print("add new player {}".format(data[4:]))
                                self.current_nb_players +=1
                                self.brodcast("ARV {}".format(data[4:]))
                                ## si le nombre de joueur necessaire pour le jeu est atteint, le croupier est appelé et le jeu se lance
                                if self.current_nb_players == NB_PLAYER and self.game_statut is False :
                                    self.croupier = Croupier(self.players_dict, self.server)
                                    self.game_statut = True

                        # si message, on retransmet le message au joueurs
                        elif data[:3] == "MSG" or data[:3]=="ANN":
                            print("arg = MSG or ANN, brodcasting to everyone")
                            self.brodcast(data)

                        elif data[:3] in ["STR", "PUT", "PLY"]:#mecanisme de controle qui assure que c'est le bon socket qui envoie une reponse
                            if s is self.croupier.get_current_player_sock():
                                self.croupier.push_to_rqueue(data)
                            else:
                                send_to(s,"MSG Croupier Merci de respecter l'ordre de jeu")

                        elif "BYE" == data:#close signal
                            print("received BYE signal")
                            self.inputs.remove(s)
                            print("removed socket :{}".format(s))
                            if s in self.players_dict:
                                self.brodcast("LFT {}".format(self.players_dict[s]))
                                self.players_dict.pop(s)
                            send_to(s, "BYE")
                            s.close()

                        else:
                            print(">>data received :")
                            print(data)
                    else:#socket closing
                        print("handle closed")
                        self.inputs.remove(s)
                        print("removed socket :{}".format(s))
                        if s in self.players_dict:
                            self.players_dict.pop(s)
                        send_to(s, "BYE")
                        s.close()
        print("End receiving_accept thread")
Example #6
0
 def brodcast(self, data):
     for s in self.inputs[1:]:
     #    if s is not self.server :
         send_to(s, data)
Example #7
0
 def add_to_lists(self, player_sock, raw_data):
     data = raw_data.split()
     if len(data) != 2:# erreur format:IAM PSEUDO
         send_to(player_sock, "ERR ARGV MISMATCH")
         return False
     if data[0] == "IAM":#bonne entete
         if player_sock in self.players_dict:
             if data[1] not in self.players_dict.values():#si le pseudo n'est pas pris
                 if self.players_dict[player_sock] == "VISITOR": #si le pseudo n'est pas set(evite les changement de pseudo)
                     self.players_dict[player_sock] = data[1]
                     send_to(player_sock, "MSG SYS Welcome")
                     return True
                 send_to(player_sock, "ERR PSEUDO ALEADY SET")
                 return False
             send_to(player_sock, "ERR PSEUDO USED")
             return False
         else:
             if data[1] not in self.spectators_dict.values():
                 self.spectators_dict[player_sock] = data[1]
                 send_to(player_sock, "WELCOME!! ")
                 return True
             send_to(player_sock, "ERR PSEUDO USED")
             return False
     send_to(player_sock, "ERR ENTETE")
     return False#erreur entete
Example #8
0
 def send_msg(self, msg):
     send_to(self.client, msg)
Example #9
0
 def send_client_name(self, name):
     self.client_name = name
     send_to(self.client, "IAM " + name)
Example #10
0
 def close(self):
     self.allow_sending = False
     self.allow_receiving = False
     send_to(self.client, "BYE")
     print("Program end engaged")
     os._exit(0)
Example #11
0
    def start_bet_phase(self):
        self.current_entry_fee = 0
        while not self.gdm.check_bet_phase_done(self.current_entry_fee):
            for player in range(NB_PLAYER):  #itere sur toutes les joueurs
                while not self.gdm.check_player_bet_done(
                        player, self.current_entry_fee
                ):  #Tant que ce joueur n'a pas fini son mise
                    player_wallet = self.gdm.get_player_wallet(
                        player)  #check son portefeuille
                    self.brodcast(
                        "MSG Croupier c'est au joueur {} de miser".format(
                            self.get_player_name(player)))
                    self.ask_input_to_player_sock(
                        self.conv_pnumber_to_psock(player), "PUT",
                        player_wallet)
                    player_rep = self.received_queue.get(
                    )  #recupere sa reponse
                    player_rep = player_rep.split()
                    if player_rep[0] == "PUT":  #si le joueur mise
                        try:
                            player_input = int(
                                player_rep[1])  #reconverti sa mise en int
                        except:
                            send_to(
                                self.conv_pnumber_to_psock(player),
                                "MSG Croupier Merci de respecter les format")
                            continue
                        if player_wallet <= 0 or player_input == 0:  #s'il n'a pas de jeton
                            self.gdm.set_player_statut(player, 0)  # dehors
                            self.brodcast("ANN PUT {} {}".format(
                                self.get_player_name(player), 0))

                        elif player_wallet < player_input:
                            send_to(
                                self.conv_pnumber_to_psock(player),
                                "MSG Croupier Vous n'avez pas assez de jetons")

                        elif player_input < self.current_entry_fee:  # s'il mise moins que l'entrée necessaire
                            if player_wallet > player_input:
                                send_to(
                                    self.conv_pnumber_to_psock(player),
                                    "MSG Croupier Vous devez miser un montant valide"
                                )

                            else:
                                self.gdm.set_player_statut(
                                    player,
                                    2)  #son statut est update en 2 (all in)
                                self.gdm.set_player_chip(player, player_wallet)
                                self.brodcast("ANN PUT {} {}".format(
                                    self.get_player_name(player),
                                    player_wallet))

                        else:  #sinon, il en a assez pour miser
                            self.current_entry_fee = player_input  #on update l'entry fee
                            self.gdm.set_player_chip(player, player_input)
                            self.brodcast("ANN PUT {} {}".format(
                                self.get_player_name(player), player_input))

                    elif player_rep[0] == "FLD":  #il se couche
                        self.gdm.set_player_statut(player, 0)  # dehors
                        self.brodcast("ANN FLD {}".format(
                            self.get_player_name(player)))

                    else:
                        send_to(self.conv_pnumber_to_psock(player),
                                "MSG Croupier Merci de respecter les format")

                self.current_player_turn = (self.current_player_turn +
                                            1) % NB_PLAYER
Example #12
0
 def brodcast(self, data):
     for player_sock in self.players:
         send_to(player_sock, data)
Example #13
0
 def close(self):
     for sock in self.players:
         send_to(sock, "BYE")
     self.server.close()
     print("Program end engaged")
     os._exit(0)
Example #14
0
 def ask_input_to_player_sock(self, player_sock, arg1, arg2):
     send_to(player_sock, "REQ {} {}".format(arg1, arg2))
Example #15
0
 def send_hand_to_player_sock(self, player_sock):
     player_hand = self.gdm.get_player_hand(
         self.conv_psock_to_pnumber(player_sock))
     player_hand = " ".join(map(str, player_hand))
     if player_hand != "":
         send_to(player_sock, "GET " + player_hand)