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]
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()
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]
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()
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()
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()
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)
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 })
def Command(self,com): if com == "exit": self.play = False elif com == "all-players": self.ShowAllPlayers() else: Log.Print("command",com," not found")
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)
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)
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)
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)
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})
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
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()
def Network_request_basicUDP(self,data): Log.Print("request basic udp") self.SendBasicUDP()
def Network_request_basic(self,data): Log.Print("Player",self.GetID(),"has decided to request basic information") self.SendBasic()
def Spectate(self, player): Log.Print("Player", player.GetID(), "joined as 'spectator'") player.Send({"action": "sa", "type": "confirm_join"})
def Close(self): Log.Print("Closing server ...") self.play = False self.UDPconnector.End()
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"
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"])
def SetRoomDef(self,func): Log.Print("room def set") self.RoomDef = func