From: Digital X. <dig...@us...> - 2007-03-13 20:47:46
|
Update of /cvsroot/openrpg/openrpg1/orpg/networking In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv15047/orpg/networking Modified Files: Tag: BRANCH-1-7-1 mplay_server.py Log Message: Fixed a bug in the server that prevented it from using the port specified in the server_ini.xml (03/13/2007) Fixed a bug in the VS dice roller code (03/13/2007) Index: mplay_server.py =================================================================== RCS file: /cvsroot/openrpg/openrpg1/orpg/networking/mplay_server.py,v retrieving revision 1.133.2.2 retrieving revision 1.133.2.3 diff -C2 -d -r1.133.2.2 -r1.133.2.3 *** mplay_server.py 27 Feb 2007 03:10:22 -0000 1.133.2.2 --- mplay_server.py 13 Mar 2007 20:47:43 -0000 1.133.2.3 *************** *** 70,75 **** myname = '' - #OPENRPG_PORT = 6774 - def id_compare(a,b): "converts strings to intergers for list sort comparisons for group and player ids so they end up in numeric order" --- 70,73 ---- *************** *** 134,138 **** minVersion=self.minVersion.split('.') version=ver.split('.') ! for i in range(min(len(minVersion),len(version))): w=max(len(minVersion[i]),len(version[i])) v1=minVersion[i].rjust(w); --- 132,136 ---- minVersion=self.minVersion.split('.') version=ver.split('.') ! for i in xrange(min(len(minVersion),len(version))): w=max(len(minVersion[i]),len(version[i])) v1=minVersion[i].rjust(w); *************** *** 269,273 **** # Since the server is just starting here, we read in the XML configuration # file. Notice the lobby is still created here by default. ! self.groups = { '0': game_group( '0','Lobby','','The game lobby', '', '', orpg.dirpath.dir_struct["user"]+'Lobby_map.xml',orpg.dirpath.dir_struct["user"]+'LobbyMessage.html',1 ) } self.initServerConfig() --- 267,271 ---- # Since the server is just starting here, we read in the XML configuration # file. Notice the lobby is still created here by default. ! self.groups = { '0': game_group('0','Lobby','','The game lobby', '', '', orpg.dirpath.dir_struct["user"] + 'Lobby_map.xml', orpg.dirpath.dir_struct["user"] + 'LobbyMessage.html', 1)} self.initServerConfig() *************** *** 324,334 **** # try to use it. try: ! self.banDom = minidom.parse( orpg.dirpath.dir_struct["user"]+'ban_list.xml' ) self.banDom.normalize() self.banDoc = self.banDom.documentElement ! for element in self.banDom.getElementsByTagName( 'banned' ): playerName = element.getAttribute( 'name' ).replace("&", "&").replace("<", "<").replace('"', """).replace(">", ">") ! playerIP = element.getAttribute( 'ip' ) self.ban_list[playerIP] = {} --- 322,332 ---- # try to use it. try: ! self.banDom = minidom.parse(orpg.dirpath.dir_struct["user"] + 'ban_list.xml') self.banDom.normalize() self.banDoc = self.banDom.documentElement ! for element in self.banDom.getElementsByTagName('banned'): playerName = element.getAttribute( 'name' ).replace("&", "&").replace("<", "<").replace('"', """).replace(">", ">") ! playerIP = element.getAttribute('ip') self.ban_list[playerIP] = {} *************** *** 348,357 **** # try to use it. try: ! file = open(orpg.dirpath.dir_struct["user"]+'ban_list.xml' ,"w") ! file.write("<server>\n") for ip in self.ban_list: ! file.write("<banned name = \"" + str(self.ban_list[ip]['name'].replace("&", "&").replace("<", "<").replace(""", '"').replace(">", ">")) + "\" ip = \"" + str(self.ban_list[ip]['ip']) + "\" />") ! file.write("</server>") except Exception, e: --- 346,359 ---- # try to use it. try: ! data = [] ! data.append("<server>\n") for ip in self.ban_list: ! data.append(' <banned name="' + str(self.ban_list[ip]['name'].replace("&", "&").replace("<", "<").replace(""", '"').replace(">", ">")) + '" ip="' + str(self.ban_list[ip]['ip']) + '" />' + "\n") ! data.append("</server>") ! ! file = open(orpg.dirpath.dir_struct["user"] + 'ban_list.xml' ,"w") ! file.write("".join(data)) ! file.close() except Exception, e: *************** *** 361,365 **** # This method reads in the server's configuration file and reconfigs the server # as needed, over-riding any default values as requested. ! def initServerConfig( self ): self.log_msg("Processing Server Configuration File...") --- 363,367 ---- # This method reads in the server's configuration file and reconfigs the server # as needed, over-riding any default values as requested. ! def initServerConfig(self): self.log_msg("Processing Server Configuration File...") *************** *** 370,384 **** # try to use it. try: ! self.configDom = minidom.parse( orpg.dirpath.dir_struct["user"]+'server_ini.xml' ) self.configDom.normalize() self.configDoc = self.configDom.documentElement # Obtain the lobby/server password if it's been specified ! admin_pwd = self.configDoc.getAttribute( "admin" ) ! boot_pwd = self.configDoc.getAttribute( "boot" ) # Update the lobby with the passwords if they've been specified ! if( len(admin_pwd) or len(boot_pwd) ): ! self.groups = { '0': game_group( '0', 'Lobby', "", 'The game lobby', boot_pwd, "", orpg.dirpath.dir_struct["user"]+'Lobby_map.xml', orpg.dirpath.dir_struct["user"]+'LobbyMessage.html', 1 ) --- 372,389 ---- # try to use it. try: ! self.configDom = minidom.parse(orpg.dirpath.dir_struct["user"] + 'server_ini.xml') self.configDom.normalize() self.configDoc = self.configDom.documentElement # Obtain the lobby/server password if it's been specified ! boot_pwd = "" ! if self.configDoc.hasAttribute("admin"): ! boot_pwd = self.configDoc.getAttribute("admin") ! elif self.configDoc.hasAttribute("boot"): ! boot_pwd = self.configDoc.getAttribute("boot") # Update the lobby with the passwords if they've been specified ! if len(boot_pwd): ! self.groups = {'0': game_group( '0', 'Lobby', "", 'The game lobby', boot_pwd, "", orpg.dirpath.dir_struct["user"]+'Lobby_map.xml', orpg.dirpath.dir_struct["user"]+'LobbyMessage.html', 1 ) *************** *** 386,393 **** # set ip or dns name to send to meta server ! service_node = self.configDoc.getElementsByTagName( "service" )[0] ! address = service_node.getAttribute( "address" ) address = address.lower() if address == "" or address == "hostname/address" or address == "localhost": --- 391,398 ---- # set ip or dns name to send to meta server ! service_node = self.configDoc.getElementsByTagName("service")[0] ! address = service_node.getAttribute("address") address = address.lower() if address == "" or address == "hostname/address" or address == "localhost": *************** *** 396,399 **** --- 401,408 ---- self.server_address = address + self.server_port = OPENRPG_PORT + if service_node.hasAttribute("port"): + self.server_port = int(service_node.getAttribute("port")) + # Get the minimum openrpg version from config if available # if it isn't set min version to internal default. *************** *** 402,406 **** # <version min="x.x.x"> try: ! mver = self.configDoc.getElementsByTagName( "version" )[0] self.minClientVersion = mver.getAttribute("min") except: --- 411,415 ---- # <version min="x.x.x"> try: ! mver = self.configDoc.getElementsByTagName("version")[0] self.minClientVersion = mver.getAttribute("min") except: *************** *** 410,414 **** #finds out if the user wants a default room message, and what file the user wants --akoman #edit: jan10/03 - I assumed there would always be a newroom setting. Modified code to make it optional ! tags = self.configDoc.getElementsByTagName( "newrooms" ) self.defaultMessageFile = "" --- 419,423 ---- #finds out if the user wants a default room message, and what file the user wants --akoman #edit: jan10/03 - I assumed there would always be a newroom setting. Modified code to make it optional ! tags = self.configDoc.getElementsByTagName("newrooms") self.defaultMessageFile = "" *************** *** 418,422 **** if tags.length > 0: newroom_node = tags[0] ! dmf = newroom_node.getAttribute( "file" ) if dmf != "": self.defaultMessageFile = dmf --- 427,431 ---- if tags.length > 0: newroom_node = tags[0] ! dmf = newroom_node.getAttribute("file") if dmf != "": self.defaultMessageFile = dmf *************** *** 440,444 **** try: ! ak = self.configDoc.getElementsByTagName( "autokick" )[0] if ak.hasAttribute("silent"): if ((ak.getAttribute("silent")).lower() == "yes"): --- 449,453 ---- try: ! ak = self.configDoc.getElementsByTagName("autokick")[0] if ak.hasAttribute("silent"): if ((ak.getAttribute("silent")).lower() == "yes"): *************** *** 462,466 **** alk = "" if (self.silent_auto_kick == 1): alk = "(Silent Mode)" ! self.log_msg("Auto Kick: Delay="+str(self.zombie_time)+" "+alk) #------------------------[ END <AUTOKICK> TAG PROCESSING ]-------------- --- 471,475 ---- alk = "" if (self.silent_auto_kick == 1): alk = "(Silent Mode)" ! self.log_msg("Auto Kick: Delay="+str(self.zombie_time) + " " + alk) #------------------------[ END <AUTOKICK> TAG PROCESSING ]-------------- *************** *** 484,492 **** #pull information from config file DOM try: ! roomdefaults = self.configDom.getElementsByTagName( "room_defaults" )[0] #rd.normalize() #roomdefaults = self.rd.documentElement try: ! setting = roomdefaults.getElementsByTagName( 'passwords' )[0] rpw = setting.getAttribute('allow') if rpw == "no" or rpw=="0": --- 493,501 ---- #pull information from config file DOM try: ! roomdefaults = self.configDom.getElementsByTagName("room_defaults")[0] #rd.normalize() #roomdefaults = self.rd.documentElement try: ! setting = roomdefaults.getElementsByTagName('passwords')[0] rpw = setting.getAttribute('allow') if rpw == "no" or rpw=="0": *************** *** 498,503 **** self.log_msg("Room Defaults: [Warning] Allowing Passworded Rooms") try: ! setting = roomdefaults.getElementsByTagName( 'map' )[0] ! map = setting.getAttribute( 'file' ) if map != "": roomdefault_map = map --- 507,512 ---- self.log_msg("Room Defaults: [Warning] Allowing Passworded Rooms") try: ! setting = roomdefaults.getElementsByTagName('map')[0] ! map = setting.getAttribute('file') if map != "": roomdefault_map = map *************** *** 507,512 **** try: ! setting = roomdefaults.getElementsByTagName( 'message' )[0] ! msg = setting.getAttribute( 'file' ) if msg != "": roomdefault_msg = msg --- 516,521 ---- try: ! setting = roomdefaults.getElementsByTagName('message')[0] ! msg = setting.getAttribute('file') if msg != "": roomdefault_msg = msg *************** *** 534,539 **** ###Server Cheat message try: ! cheat_node = self.configDoc.getElementsByTagName( "cheat" )[0] ! self.cheat_msg = cheat_node.getAttribute( "text" ) except: self.cheat_msg = "**FAKE ROLL**" --- 543,548 ---- ###Server Cheat message try: ! cheat_node = self.configDoc.getElementsByTagName("cheat")[0] ! self.cheat_msg = cheat_node.getAttribute("text") except: self.cheat_msg = "**FAKE ROLL**" *************** *** 559,573 **** ! def makePersistentRooms( self ): 'Creates rooms on the server as defined in the server config file.' ! for element in self.configDom.getElementsByTagName( 'room' ): ! roomName = element.getAttribute( 'name' ) ! roomPassword = element.getAttribute( 'password' ) ! bootPassword = element.getAttribute( 'boot' ) # Conditionally check for minVersion attribute ! if element.hasAttribute( 'minVersion' ): ! minVersion = element.getAttribute( 'minVersion' ) else: minVersion = "" --- 568,582 ---- ! def makePersistentRooms(self): 'Creates rooms on the server as defined in the server config file.' ! for element in self.configDom.getElementsByTagName('room'): ! roomName = element.getAttribute('name') ! roomPassword = element.getAttribute('password') ! bootPassword = element.getAttribute('boot') # Conditionally check for minVersion attribute ! if element.hasAttribute('minVersion'): ! minVersion = element.getAttribute('minVersion') else: minVersion = "" *************** *** 575,583 **** # Extract the map filename attribute from the map node # we only care about the first map element found -- others are ignored ! mapElement = element.getElementsByTagName( 'map' )[0] ! mapFile = mapElement.getAttribute( 'file' ) ! messageElement = element.getElementsByTagName( 'message' )[0] ! messageFile = messageElement.getAttribute( 'file' ) # Make sure we have a message to even mess with --- 584,592 ---- # Extract the map filename attribute from the map node # we only care about the first map element found -- others are ignored ! mapElement = element.getElementsByTagName('map')[0] ! mapFile = mapElement.getAttribute('file') ! messageElement = element.getElementsByTagName('message')[0] ! messageFile = messageElement.getAttribute('file') # Make sure we have a message to even mess with *************** *** 590,594 **** ! def isPersistentRoom( self, id ): 'Returns True if the id is a persistent room (other than the lobby), otherwise, False.' --- 599,603 ---- ! def isPersistentRoom(self, id): 'Returns True if the id is a persistent room (other than the lobby), otherwise, False.' *************** *** 745,749 **** self.metas[meta].register(name=name,realHostName=self.server_address,num_users=num_players) else: ! self.metas[meta] = registerThread(name=name,realHostName=self.server_address,num_users=num_players,MetaPath=meta,port=OPENRPG_PORT,register_callback=self.register_callback) self.metas[meta].start() --- 754,758 ---- self.metas[meta].register(name=name,realHostName=self.server_address,num_users=num_players) else: ! self.metas[meta] = registerThread(name=name, realHostName=self.server_address, num_users=num_players, MetaPath=meta, port=self.server_port,register_callback=self.register_callback) self.metas[meta].start() *************** *** 898,902 **** ip = socket.gethostbyname(socket.gethostname()) kill = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ! kill.connect((ip,OPENRPG_PORT)) # Now, send the "system" command using the correct protocol format --- 907,911 ---- ip = socket.gethostbyname(socket.gethostname()) kill = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ! kill.connect((ip, self.server_port)) # Now, send the "system" command using the correct protocol format *************** *** 1331,1337 **** def checkClientVersion(self, clientversion): ! minv=self.minClientVersion.split('.') ! cver=clientversion.split('.') ! for i in range(min(len(minv),len(cver))): w=max(len(minv[i]),len(cver[i])) v1=minv[i].rjust(w); --- 1340,1346 ---- def checkClientVersion(self, clientversion): ! minv = self.minClientVersion.split('.') ! cver = clientversion.split('.') ! for i in xrange(min(len(minv),len(cver))): w=max(len(minv[i]),len(cver[i])) v1=minv[i].rjust(w); *************** *** 1376,1380 **** # Send the server's lobby message to the client no matter what ! self.sendMsg( socket, "<msg to='" + player_id + "' from='0' group_id='0' />" + lobbyMsg, self.players[player_id].useCompression, self.players[player_id].compressionType ) return except: --- 1385,1389 ---- # Send the server's lobby message to the client no matter what ! self.sendMsg(socket, "<msg to='" + player_id + "' from='0' group_id='0' />" + lobbyMsg, self.players[player_id].useCompression, self.players[player_id].compressionType) return except: *************** *** 1388,1396 **** try: self.log_msg("listen thread running...") ! self.listen_sock.bind( ("", OPENRPG_PORT) ) ! self.listen_sock.listen( 5 ) except Exception, e: ! self.log_msg( ("Error binding request socket!", e) ) self.alive = 0 --- 1397,1408 ---- try: self.log_msg("listen thread running...") ! adder = "" ! if self.server_address: ! adder = self.server_address ! self.listen_sock.bind((adder, self.server_port)) ! self.listen_sock.listen(5) except Exception, e: ! self.log_msg(("Error binding request socket!", e)) self.alive = 0 *************** *** 1407,1411 **** # our face! :O After words, this thread is dead ready for another connection # accept to come in. ! thread.start_new_thread( self.acceptedNewConnectionThread, ( newsock, addr ) ) except: --- 1419,1423 ---- # our face! :O After words, this thread is dead ready for another connection # accept to come in. ! thread.start_new_thread(self.acceptedNewConnectionThread, ( newsock, addr )) except: *************** *** 1776,1780 **** #also goes ahead if there is a defaultRoomMessage --akoman ! if self.isPersistentRoom( group_id ) or self.defaultMessageFile != None: try: if self.groups[group_id].messageFile[:4] == 'http': --- 1788,1792 ---- #also goes ahead if there is a defaultRoomMessage --akoman ! if self.isPersistentRoom(group_id) or self.defaultMessageFile != None: try: if self.groups[group_id].messageFile[:4] == 'http': *************** *** 1792,1800 **** # Spit that darn message out now! ! self.players[from_id].outbox.put( "<msg to='" + from_id + "' from='0' group_id='" + group_id + "' />" ! + roomMsg ) # Now, tell everyone that we've arrived ! self.send_to_all('0',self.groups[group_id].toxml('update')) # this line sends a handle role message to change the players role --- 1804,1811 ---- # Spit that darn message out now! ! self.players[from_id].outbox.put("<msg to='" + from_id + "' from='0' group_id='" + group_id + "' />" + roomMsg) # Now, tell everyone that we've arrived ! self.send_to_all('0', self.groups[group_id].toxml('update')) # this line sends a handle role message to change the players role *************** *** 1804,1809 **** self.return_room_roles(from_id,group_id) self.log_msg(("join_group", (from_id, group_id))) ! self.handle_role("set", from_id, self.players[from_id].role, ! self.groups[group_id].boot_pwd, group_id) except Exception, e: --- 1815,1819 ---- self.return_room_roles(from_id,group_id) self.log_msg(("join_group", (from_id, group_id))) ! self.handle_role("set", from_id, self.players[from_id].role, self.groups[group_id].boot_pwd, group_id) except Exception, e: *************** *** 2289,2295 **** --- 2299,2319 ---- self.log_msg('Exception in admin_kick() ' + str(e)) + + def admin_banip(self, ip, name="", silent = 0): + "Ban a player from a server from the console" + try: + self.ban_list[ip] = {} + self.ban_list[ip]['ip'] = ip + self.ban_list[ip]['name'] = name + self.saveBanList() + + except Exception, e: + traceback.print_exc() + self.log_msg('Exception in admin_banip() ' + str(e)) + def admin_ban(self, id, message="", silent = 0): "Ban a player from a server from the console" try: + id = str(id) group_id = self.players[id].group_id ip = self.players[id].ip *************** *** 2506,2509 **** --- 2530,2539 ---- self.players[pid].outbox.put(msg) + elif cmd == "banip": + ip = xml_dom.getAttribute("bip") + name = xml_dom.getAttribute("bname") + msg = "<msg to='" + pid + "' from='0' group_id='" + gid + "'> Banned: " + str(ip) + self.admin_banip(ip, name) + elif cmd == "ban": id = xml_dom.getAttribute("bid") |