예제 #1
0
 def Connected(self , channel , addr):
     Log.Print("")
     Log.Print("Player connected (",addr,"), the id=",channel.id,"has just been assigned")
     Log.Print("Waiting to him to define if he'll play or only request information...")
     self.clients[channel.id] = channel
     channel.ip   = addr[0]
     channel.conn = addr[1]
예제 #2
0
    def __init__(self,*args,**kwargs):

        Server.__init__(self,*args,**kwargs)
        Log.Print("Starting server...")

        self.ip = kwargs["localaddr"][0]
        self.port = kwargs["localaddr"][1]
        self.svr_name = raw_input("Server name: ")
        while not MySQL.AddServer(self.svr_name,self.ip):
            Log.Print("Name allready exists")
            self.svr_name = raw_input("New name: ")
        MySQL.CheckDeadServers()
        ##### START UDP #####
        self.UDPconnector = ServerUDP(*args,**kwargs)
        self.UDPconnector.SetTarget(self)
        self.UDPconnector.SetPing(config.ping_server)

        self.id = 0
        self.mode = "Quickmatchs server"
        self.max_players = 10
        self.name = "Newtonis's server"
        self.clients = dict()
        self.players = dict()
        self.gameWorlds = dict()
        self.dictOrder = []

        self.play = True
        #self.commandsThread = threading.Thread(target=self.CommandThreadDef,name="Commands thread")
        #self.commandsThread.start()
        self.Add5Rooms()
        self.last_time_sql_updated = time.time()
예제 #3
0
    def PlayerExit(self, player):
        if not self.spectators.has_key(str(player.id)):
            return
        Log.Print("Player", player.GetID(), "decided to quit room")

        del self.spectators[player.id]
        for playX in range(len(self.playA)):
            if self.playA[playX].id == player.id:
                Log.Print("Player", player.GetID(),
                          "has abandoned the 'A' side")
                del self.playA[playX]
                self.gameEngine.RemoveTeamAName()
                if self.status == "waiting":
                    self.gameEngine.UpdatePlaysA(len(self.playA))
                elif self.IsInMatch():
                    if len(self.playA) == 0:
                        self.Alose()
                break
        for playX in range(len(self.playB)):
            if self.playB[playX].id == player.id:
                del self.playB[playX]
                self.gameEngine.RemoveTeamBName()
                if self.status == "waiting":
                    self.gameEngine.UpdatePlaysB(len(self.playB))
                elif self.IsInMatch():
                    if len(self.playB) == 0:
                        self.Blose()

                break
        if self.clientsPlayers.has_key(player.id):
            self.gameEngine.DeleteElement(self.clientsPlayers[player.id])
            del self.clientsPlayers[player.id]
예제 #4
0
 def Network_get_opinion(self,data):
     Log.Print("Player",self.GetID(),"opinion has arrived")
     if data["option"] >= len(self.opinion["options"]):
         Log.Print("Opinion corrupted!",data["option"])
     else:
         Log.Print(self.opinion["question"])
         Log.Print("He has elected '"+self.opinion["options"][data["option"]]+"'")
         serverQ.AddOpinion(self.ip,self.opinion["id"],data["option"])
     self.SendRequestName()
예제 #5
0
 def Network_UDP_data(self,data,addr):
     if not data.has_key("id"):
         Log.Print("Mysterious UDP data")
     if not self.clients.has_key(str(data["id"])):
         Log.Print("Mysterious UDP Data ID",data["id"])
     self.clients[data["id"]].udpAddr = addr
     if self.clients[data["id"]].addr[0] != addr[0]:
         Log.Print("Hacking from",addr,"trying to be player",data["id"])
     self.clients[data["id"]].collect_incoming_data(data["content"])
     self.clients[data["id"]].found_terminator()
예제 #6
0
def main():
    screen = pygame.display.set_mode((900, 600),
                                     pygame.HWSURFACE)  #create the game window
    pygame.display.set_caption("Head soccer 06")
    graphicManager = GraphicManager(
    )  #instanciate the graphic manageManager.StartNetworkGame() #tell graphic manager to start network game
    graphicManager.SetScreen(screen)
    graphicManager.StartNetworkGame()
    clock = pygame.time.Clock()  #to handle fps
    Log.SetBasic("Client console", (0, 124, 255), (0, 224, 255),
                 1)  #log console
    continuar = True
    while continuar:  #while the game is running
        if 1:
            events = pygame.event.get()
            graphicManager.Event(events)
            for event in events:
                if event.type == pygame.QUIT or graphicManager.endSignal == 1:
                    continuar = False
                    #server_run.server.play = False
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LSHIFT:
                        if pygame.key.get_pressed()[pygame.K_ESCAPE]:
                            continuar = False
                    if event.key == pygame.K_s and pygame.key.get_pressed()[
                            pygame.K_LSHIFT]:  #to take a screenshot
                        print "screenshot mode"
                        file = raw_input("filename:")
                        if file != "cancel":
                            pygame.image.save(screen,
                                              "extras/screenshots/" + file)
                        else:
                            print "screenshot canceled"
            if int(time.time()) % 60 * 30 == 0:
                try:
                    pygame.image.save(
                        screen, "extras/creenshots/auto/" + "auto_" +
                        str(int(time.time())) + "_" + str(randrange(1000)) +
                        ".png")
                except:
                    pass
            screen.fill((100, 100, 100))
            graphicManager.LogicUpdate()  #logic working
            graphicManager.GraphicUpdate(
                screen)  #paiting the game in the screen
            Log.LogicUpdate()
            updateCursor()
            clock.tick(40)  #we'll play with 40 fps
        #except IndexError as inst:
        #    Log.PrintError(inst)

    graphicManager.End()
예제 #7
0
def main():
    global server
    Log.SetBasic("Server",(0,255,209),(0,255,119),0)
    Log.Print("In order to use the server in INTERNET mode ensure you have opened the port 9999 of your router in both TCP and UDP modes")
    server = WhiteboardServer(localaddr=("localhost",9999))#(raw_input("host (your LOCAL IP address):"),9999))

    clock = pygame.time.Clock()
    while server.play:
        try:
            server.LogicUpdate()
            Log.LogicUpdate()
            clock.tick(40)
        except Exception as e:
            Log.PrintError(e)
예제 #8
0
 def Network_req_av_players(self, data):
     Log.Print("Player", self.GetID(), "requested players available")
     self.Send({
         "action": "data_players",
         "players": self._server.GetPlayers(),
         "player-name": self.name
     })
예제 #9
0
 def Command(self,com):
     if com == "exit":
         self.play = False
     elif com == "all-players":
         self.ShowAllPlayers()
     else:
         Log.Print("command",com," not found")
예제 #10
0
 def Close(self):
     Log.Print("Player",self.GetID(),"has left the game")
     if config.CLOSE_WHEN_CLIENT_LOST:
         self._server.Close()
     if self.RoomDef:
         self.RoomDef(self,"lost")
     self._server.HandlePlayerLost(self)
예제 #11
0
 def Blose(self):
     Log.Print("The 'B' side cannot play anymore")
     #self.gameEngine.RemoveTeamBName()
     self.status = "skipRematchEnd"
     self.gameEngine.AddWord("W.O. " + self.gameEngine.AteamName + " wins",
                             (100, 50, 50), 20, "Boombox20")
     self.gameEngine.StopClock(True)
     self.gameEngine.DeleteElement(self.ballID)
예제 #12
0
 def Alose(self):
     Log.Print("The 'A' side cannot play anymore")
     #self.gameEngine.RemoveTeamAName()
     self.status = "skipRematchEnd"
     self.gameEngine.AddWord("W.O. " + self.gameEngine.BteamName + " wins",
                             (100, 50, 50), 20, "Boombox20")
     self.PostChat("Host", "W.O. " + self.gameEngine.BteamName + " wins",
                   (37, 22, 160))
     self.gameEngine.StopClock(True)
     self.gameEngine.DeleteElement(self.ballID)
예제 #13
0
 def JoinA(self, player):
     if len(self.playA) < self.players["sideA"]:
         Log.Print("Player", player.GetID(), "joined 'A' side")
         self.queueInput[player.id] = []
         id = self.gameEngine.AddPlayer(player.head, 'A1')
         player.Send({
             "action": "sa",
             "type": "confirm_join",
             "element_id": id
         })
         self.playA.append(player)
         self.clientsPlayers[player.id] = id
         self.gameEngine.UpdatePlaysA(len(self.playA))
         self.gameEngine.SetATeamName(player.name)
         if self.type == "Real":
             self.CheckStart()
     else:
         Log.Print("'A' side is full so player", player.GetID(),
                   "cannot join")
         self.SendFull(player)
예제 #14
0
 def Network_set_configuration(self,data):
     error = ""
     if data["name"] != None:
         for x in self._server.clients.keys():
             if self._server.clients[x].name == data["name"]:
                 error = "Name already in use"
         if len(data["name"]) < 4:
             error = "Name too short"
     else:
         data["name"] = self.name
     if error == "":
         Log.Print("Player",self.GetID(),"has just changed his/her name to",data["name"])
         self.name = data["name"]
     self.head = data["headcode"]
     self.Send({"action":"profile_conf_error","error":error})
예제 #15
0
    def EndMatch(self):
        Log.Print("End match")
        self.playA = []
        self.playB = []
        for k in self.clientsPlayers.keys():
            self.gameEngine.DeleteElement(self.clientsPlayers[k])
            del self.clientsPlayers[k]

        self.gameEngine.RemoveBothNames()

        self.gameEngine.RemoveClock()
        self.gameEngine.DeleteScore()
        self.gameEngine.SetMaxPlayers(self.players["sideA"],
                                      self.players["sideB"])
        self.gameEngine.UpdatePlaysA(len(self.playA))
        self.gameEngine.UpdatePlaysB(len(self.playB))
        self.scoreFirstHalf = None
        self.scoreSecondHalf = None
        self.scoreFinal = None
예제 #16
0
    def Network_request_rooms(self,data):
        if self.status == "checkData":
            """print "Player",self.GetID()," has decided to join the game"
            allow , reason = self._server.AllowEntrance()
            if allow:
                if serverQ.CheckOpinionNeed(self.ip):
                    print "Opinion survey sent to player"
                    self.SendOpinion()
                else:
                    self.SendSkip()
                    print "No opinion survey needed"
                    print "Sending name request"
                    self.SendRequestName()

                    #self.SendRooms()
            else:
                print "However the server is full so the player will be rejected"
                self.SendNotAllow(reason)"""
            self.SendRequestName()
        elif self.status == "already-connected":
            Log.Print("Player",self.GetID(),"requested rooms again")
            self.SendRooms()
예제 #17
0
 def Network_request_basicUDP(self,data):
     Log.Print("request basic udp")
     self.SendBasicUDP()
예제 #18
0
 def Network_request_basic(self,data):
     Log.Print("Player",self.GetID(),"has decided to request basic information")
     self.SendBasic()
예제 #19
0
 def Spectate(self, player):
     Log.Print("Player", player.GetID(), "joined as 'spectator'")
     player.Send({"action": "sa", "type": "confirm_join"})
예제 #20
0
 def Close(self):
     Log.Print("Closing server ...")
     self.play = False
     self.UDPconnector.End()
예제 #21
0
    def LogicUpdate(self):
        self.gameEngine.LogicUpdate()

        #### MANAGMENT OF THE GAME STATUS ####
        #print self.status
        if self.status == "WS":

            self.gameEngine.AddClock()
            self.gameEngine.AddScore()
            self.gameEngine.ResetPlayersPositions()

            self.gameEngine.DisableMaxPlayers()
            self.gameEngine.DeleteElement(self.ballID)
            self.gameEngine.StartGame()
            self.gameEngine.EnableMove()
            self.gameEngine.StartSequence()

            self.status = "countdown"
        elif self.status == "countdown":
            if self.gameEngine.numberSequence == 0:
                self.gameEngine.PlayClock()
                #self.gameEngine.StartGame()
                self.gameEngine.DeleteCentralText()
                self.playing = True
                self.ballID = self.gameEngine.AddBall()
                self.status = "playing"

        elif self.status == "playing":
            if self.gameEngine.clock.GetStatus() == "half":
                self.playing = False
                self.status = "WSH"
                self.gameEngine.DeleteElement(self.ballID)
                self.gameEngine.StopClock(True)
                self.gameEngine.AddWord("Halftime", (100, 100, 200), 20)
                self.refWait = time.time() * 1000
                self.StoreHalf()
            elif self.gameEngine.clock.GetStatus() == "final":
                Log.Print("End of the match")
                self.playing = False
                self.status = "endRematch"
                self.gameEngine.StopClock(True)
                self.gameEngine.DeleteElement(self.ballID)
                self.gameEngine.AddWord(self.gameEngine.GetWinnerText(),
                                        (50, 100, 50), 20, "Boombox20")
                self.StoreHalf()
        elif self.status == "WSH":
            if time.time() * 1000 - self.refWait > 3000:
                self.gameEngine.StartSequence()
                self.status = "countdown"
        elif self.status == "sequenceStart":
            if self.gameEngine.numberSequence == 0:
                self.gameEngine.PlayClock()
                self.gameEngine.AddBall()
                self.status = "playing"
        elif self.status == "Goal Scored":
            self.gameEngine.StopClock(True)
            self.status = "GSW"
        elif self.status == "GSW":
            if time.time() * 1000 - self.refWait > 3000:
                self.gameEngine.StartSequence()
                self.gameEngine.DeleteElement(self.ballID)
                self.gameEngine.ResetPlayersPositions()
                self.status = "countdown"

        elif self.status == "endRematch":  ### wait 3 seconds and go to rematch window
            self.HandleEndMatch(self.gameEngine.GetWinnerText())
            if time.time() * 1000 - self.refWait > 3000:
                self.status = "rematch"
                self.refWait = time.time() * 1000
        elif self.status == "rematch":  ## wait 20 seconds and go to join window if no rematch is decided
            if time.time() * 1000 - self.refWait > 20000:
                self.status = "final_end"

        elif self.status == "skipRematchEnd":
            self.matchIsBeingPlayed = False
            self.refWait = time.time() * 1000
            self.status = "waitEnd"  #wait 3 seconds to go to join Window
        elif self.status == "waitEnd":
            self.matchIsBeingPlayed = False
            if time.time() * 1000 - self.refWait > 3000:
                self.status = "final_end"  #go to join window
        elif self.status == "final_end":
            self.EndMatch()
            self.SendJoinWindowToAll()
            self.status = "waiting"
예제 #22
0
 def Network_join_game(self,data):
     Log.Print("Player",self.GetID(),"want to join to room",data["room_name"])
     self._server.JoinPlayer(self,data["room_name"])
예제 #23
0
 def SetRoomDef(self,func):
     Log.Print("room def set")
     self.RoomDef = func