comparison orpg/networking/gsclient.py @ 119:9314d63c0941 alpha

Traipse Alpha 'OpenRPG' {091029-00} Traipse is a distribution of OpenRPG that is designed to be easy to setup and go. Traipse also makes it easy for developers to work on code without fear of sacrifice. 'Ornery-Orc' continues the trend of 'Grumpy' and adds fixes to the code. 'Ornery-Orc's main goal is to offer more advanced features and enhance the productivity of the user. Update Summary: Adds Bookmarks (Alpha) with cool Smiley Star and Plus Symbol images! Changes made to the map for increased portability. SnowDog has changes planned in Core, though. Added an initial push to the BCG. Not much to see, just shows off how it is re-writing Main code. Fix to remote admin commands Minor fix to texted based server, works in /System/ folder Some Core changes to gametree to correctly disply Pretty Print, thanks David! Fix to Splitter Nodes not being created. Added images to Plugin Control panel for Autostart feature Fix to massive amounts of images loading; from Core fix to gsclient so with_statement imports Added 'boot' command to remote admin Prep work in Pass tool for remote admin rankings and different passwords, ei, Server, Admin, Moderator, etc. Remote Admin Commands more organized, more prep work. Added Confirmation window for sent nodes. Minor changes to allow for portability to an OpenSUSE linux OS (hopefully without breaking) {091028} 00: Made changes to gametree to start working with Element Tree, mostly from Core Minor changes to Map to start working with Element Tree, from Core Preliminary changes to map efficiency, from FlexiRPG Miniatures Layer pop up box allows users to turn off Mini labels, from FlexiRPG Changes to main.py to start working with Element Tree {091029} 00: Changes made to server to start working with Element Tree. Changes made to Meta Server Lib. Prepping test work for a multi meta network page. Minor bug fixed with mini to gametree Zoom Mouse plugin added. Known Issue: Disconnecting causes an server side error. XML data is not being passed correctly.
author sirebral
date Thu, 29 Oct 2009 20:35:28 -0500
parents 217fb049bd00
children 8827271fbe1b
comparison
equal deleted inserted replaced
118:217fb049bd00 119:9314d63c0941
36 from orpg.tools.orpg_settings import settings 36 from orpg.tools.orpg_settings import settings
37 import orpg.tools.rgbhex 37 import orpg.tools.rgbhex
38 from orpg.orpgCore import component 38 from orpg.orpgCore import component
39 import traceback 39 import traceback
40 from orpg.tools.validate import validate 40 from orpg.tools.validate import validate
41
41 from xml.etree.ElementTree import ElementTree, Element 42 from xml.etree.ElementTree import ElementTree, Element
42 from xml.etree.ElementTree import fromstring, tostring 43 from xml.etree.ElementTree import fromstring, tostring
43 44
44 gs_host = 1 45 gs_host = 1
45 gs_join = 2 46 gs_join = 2
65 who_name = cmp(yname, xname) 66 who_name = cmp(yname, xname)
66 who_user = cmp(yuser, xuser) 67 who_user = cmp(yuser, xuser)
67 68
68 if x.name.startswith(DEV_SERVER): 69 if x.name.startswith(DEV_SERVER):
69 if y.name.startswith(DEV_SERVER): 70 if y.name.startswith(DEV_SERVER):
70 if not who_name: 71 if not who_name: return who_user
71 return who_user 72 else: return who_name
72 else: 73 else: return -1
73 return who_name
74 else:
75 return -1
76 74
77 elif y.name.startswith(DEV_SERVER): return 1 75 elif y.name.startswith(DEV_SERVER): return 1
78 elif not who_user: 76 elif not who_user: return who_name
79 return who_name 77 else: return who_user
80 else:
81 return who_user
82 78
83 def roomCmp(room1, room2): 79 def roomCmp(room1, room2):
84 if int(room1) > int(room2): 80 if int(room1) > int(room2): return 1
85 return 1 81 elif int(room1) < int(room2): return -1
86 elif int(room1) < int(room2):
87 return -1
88 return 0 82 return 0
89 83
90 class game_server_panel(wx.Panel): 84 class game_server_panel(wx.Panel):
91 def __init__(self,parent): 85 def __init__(self,parent):
92 wx.Panel.__init__(self, parent, -1) 86 wx.Panel.__init__(self, parent, -1)
290 self.bookmarks.getroot().append(server) 284 self.bookmarks.getroot().append(server)
291 item = wx.MenuItem(self.bookmarks_menu, wx.ID_ANY, name, name) 285 item = wx.MenuItem(self.bookmarks_menu, wx.ID_ANY, name, name)
292 open_rpg.get_component('frame').Bind(wx.EVT_MENU, 286 open_rpg.get_component('frame').Bind(wx.EVT_MENU,
293 self.on_bookmarks_menu, item) 287 self.on_bookmarks_menu, item)
294 self.bookmarks_menu.AppendItem(item) 288 self.bookmarks_menu.AppendItem(item)
295
296 self.save_bookmarks() 289 self.save_bookmarks()
297 290
298 def save_bookmarks(self): 291 def save_bookmarks(self):
299 with open(dir_struct['user'] + 'server_bookmarks.xml', 'w') as f: 292 with open(dir_struct['user'] + 'server_bookmarks.xml', 'w') as f:
300 self.bookmarks.write(f) 293 self.bookmarks.write(f)
301 294
302 def on_server_dbclick(self, evt=None): 295 def on_server_dbclick(self, evt=None):
303 #make sure address is updated just in case list select wasn't done 296 #make sure address is updated just in case list select wasn't done
304 try: 297 try: self.on_select(evt)
305 self.on_select(evt) 298 except: pass
306 except:
307 pass
308 address = self.texts["address"].GetValue() 299 address = self.texts["address"].GetValue()
309 if self.session.is_connected(): 300 if self.session.is_connected():
310 if self.session.host_server == address : 301 if self.session.host_server == address :
311 #currently connected to address. Do nothing. 302 #currently connected to address. Do nothing.
312 return 303 return
315 self.frame.kill_mplay_session() 306 self.frame.kill_mplay_session()
316 self.do_connect(address) 307 self.do_connect(address)
317 308
318 def on_room_dbclick(self, evt=None): 309 def on_room_dbclick(self, evt=None):
319 #make sure address is updated just in case list select wasn't done 310 #make sure address is updated just in case list select wasn't done
320 try: 311 try: self.on_select(evt)
321 self.on_select(evt) 312 except: pass
322 except:
323 pass
324 group_id = str(self.room_list.GetItemData(self.cur_room_index)) 313 group_id = str(self.room_list.GetItemData(self.cur_room_index))
325 314
326 if self.NoGroups: 315 if self.NoGroups:
327 self.NoGroups = False 316 self.NoGroups = False
328 self.session.group_id = group_id 317 self.session.group_id = group_id
329 self.on_server_dbclick() 318 self.on_server_dbclick()
330 return 319 return
331 320
332 if self.cur_room_index >= 0: 321 if self.cur_room_index >= 0:
333 if self.cur_room_index != 0: 322 if self.cur_room_index != 0: self.set_lobbybutton(1);
334 self.set_lobbybutton(1); 323 else: self.set_lobbybutton(0);
335 else:
336 self.set_lobbybutton(0);
337 group = self.session.get_group_info(group_id) 324 group = self.session.get_group_info(group_id)
338 pwd = "" 325 pwd = ""
339 if (group[2] == "True") or (group[2] == "1"): 326 if (group[2] == "True") or (group[2] == "1"):
340 pwd = self.password_manager.GetPassword("room", group_id) 327 pwd = self.password_manager.GetPassword("room", group_id)
341 else: 328 else: pwd = ""
342 pwd = ""
343 self.session.send_join_group(group_id, pwd) 329 self.session.send_join_group(group_id, pwd)
344 330
345 def on_room_select(self,evt): 331 def on_room_select(self,evt):
346 self.cur_room_index = evt.m_itemIndex 332 self.cur_room_index = evt.m_itemIndex
347 333
415 self.frame.status.set_connect_status(self.name) 401 self.frame.status.set_connect_status(self.name)
416 self.set_cur_room_text("Lobby") 402 self.set_cur_room_text("Lobby")
417 403
418 def gs_connect(self, evt): 404 def gs_connect(self, evt):
419 address = self.texts['address'].GetValue() 405 address = self.texts['address'].GetValue()
420 try: 406 try: dummy = self.name
421 dummy = self.name 407 except: self.name = `address`
422 except:
423 self.name = `address`
424 self.do_connect(address) 408 self.do_connect(address)
425 409
426 def gs_disconnect(self, evt): 410 def gs_disconnect(self, evt):
427 self.frame.kill_mplay_session() 411 self.frame.kill_mplay_session()
428 412
429 def gs_create_room(self, evt): 413 def gs_create_room(self, evt):
430 self.do_create_group() 414 self.do_create_group()
431 415
432 def gs_join(self, evt): 416 def gs_join(self, evt):
433 print 'here'
434 self.do_join_group() 417 self.do_join_group()
435 418
436 def gs_join_lobby(self, evt): 419 def gs_join_lobby(self, evt):
437 self.do_join_lobby() 420 self.do_join_lobby()
438 421
454 437
455 438
456 def refresh_room_list(self): 439 def refresh_room_list(self):
457 self.room_list.DeleteAllItems() 440 self.room_list.DeleteAllItems()
458 address = self.texts["address"].GetValue() 441 address = self.texts["address"].GetValue()
459 try: 442 try: cadder = self.session.host_server
460 cadder = self.session.host_server 443 except: cadder = ''
461 except:
462 cadder = ''
463 if self.rmList.has_key(address) and len(self.rmList[address]) > 0 and cadder != address: 444 if self.rmList.has_key(address) and len(self.rmList[address]) > 0 and cadder != address:
464 groups = self.rmList[address] 445 groups = self.rmList[address]
465 self.NoGroups = True 446 self.NoGroups = True
466 else: 447 else:
467 self.NoGroups = False 448 self.NoGroups = False
487 468
488 def refresh_server_list(self): 469 def refresh_server_list(self):
489 try: 470 try:
490 self.svrList = [] 471 self.svrList = []
491 self.server_list.DeleteAllItems() 472 self.server_list.DeleteAllItems()
492 xml_dom = meta_server_lib.get_server_list(["2"]); 473 etreeEl = meta_server_lib.get_server_list(["2"]);
493 node_list = xml_dom.getElementsByTagName('server') 474 node_list = etreeEl.findall('server')
494 hex = orpg.tools.rgbhex.RGBHex() 475 hex = orpg.tools.rgbhex.RGBHex()
495 color1 = settings.get_setting("RoomColor_Active") 476 color1 = settings.get("RoomColor_Active")
496 color2 = settings.get_setting("RoomColor_Locked") 477 color2 = settings.get("RoomColor_Locked")
497 color3 = settings.get_setting("RoomColor_Empty") 478 color3 = settings.get("RoomColor_Empty")
498 color4 = settings.get_setting("RoomColor_Lobby") 479 color4 = settings.get("RoomColor_Lobby")
499 480
500 if len(node_list): 481 if len(node_list):
501 length = len(node_list) 482 length = len(node_list)
502 part = 0 483 part = 0
503 partLength = 1.0/length 484 partLength = 1.0/length
504 for n in node_list: 485 for n in node_list:
505 if n.hasAttribute('id') and n.hasAttribute('name') and n.hasAttribute('num_users') and n.hasAttribute('address') and n.hasAttribute('port'): 486 #if n.hasAttribute('id') and n.hasAttribute('name') and n.hasAttribute('num_users') and n.hasAttribute('address') and n.hasAttribute('port'):
506 self.svrList.append(server_instance(n.getAttribute('id'), n.getAttribute('name'), 487 self.svrList.append(server_instance(n.get('id'), n.get('name'),
507 n.getAttribute('num_users'), n.getAttribute('address'), 488 n.get('num_users'), n.get('address'),
508 n.getAttribute('port'))) 489 n.get('port')))
509 address = n.getAttribute('address') + ':' + n.getAttribute('port') 490 address = n.get('address') + ':' + n.get('port')
510 self.rmList[address] = [] 491 self.rmList[address] = []
511 rooms = n.getElementsByTagName('room') 492 rooms = n.findall('room')
512 493
513 for room in rooms: 494 for room in rooms:
514 pwd = room.getAttribute("pwd") 495 self.rmList[address].append((room.get("id"), room.get("name"),
515 id = room.getAttribute("id") 496 room.get("pwd"), room.get("num_users")))
516 name = room.getAttribute("name")
517 nump = room.getAttribute("num_users")
518 self.rmList[address].append((id, name, pwd, nump))
519 self.svrList.sort(server_instance_compare) 497 self.svrList.sort(server_instance_compare)
520 498
521 for n in self.svrList: 499 for n in self.svrList:
522 i = self.server_list.GetItemCount() 500 i = self.server_list.GetItemCount()
523 name = n.name 501 name = n.name
552 self.server_list.SetColumnWidth(2, wx.LIST_AUTOSIZE) 530 self.server_list.SetColumnWidth(2, wx.LIST_AUTOSIZE)
553 531
554 if self.serverNameSet == 0: 532 if self.serverNameSet == 0:
555 self.texts["address"].SetValue("127.0.0.1:6774") 533 self.texts["address"].SetValue("127.0.0.1:6774")
556 self.serverNameSet = 1 534 self.serverNameSet = 1
557 else: 535 else: pass
558 pass
559
560 # Allow xml_dom to be collected 536 # Allow xml_dom to be collected
561 try:
562 xml_dom.unlink()
563 except:
564 pass
565 except Exception, e: 537 except Exception, e:
566 print "Server List not available." 538 print "Server List not available."
567 traceback.print_exc() 539 traceback.print_exc()
568 540
569 541
570 def failed_connection(self): 542 def failed_connection(self):
571 if(self.cur_server_index >= 0): 543 if(self.cur_server_index >= 0):
572 id = self.servers[self.cur_server_index].getAttribute('id') 544 server_index = self.servers[self.cur_server_index]
573 meta = self.servers[self.cur_server_index].getAttribute('meta')
574 address = self.servers[self.cur_server_index].getAttribute('address')
575 port = self.servers[self.cur_server_index].getAttribute('port')
576 # post_failed_connection will return a non-zero if the server 545 # post_failed_connection will return a non-zero if the server
577 # was removed. If it was, refresh the display 546 # was removed. If it was, refresh the display
578 if(meta_server_lib.post_failed_connection(id,meta=meta,address=address,port=port)): 547 if(meta_server_lib.post_failed_connection(server_index.get('id'),
548 meta=server_index.get('meta'), address=server_index.get('address'),
549 port=server_index.get('port'))):
579 self.refresh_server_list() 550 self.refresh_server_list()
580 551
581 def do_connect(self, address): 552 def do_connect(self, address):
582 chat = component.get('chat') 553 chat = component.get('chat')
583 chat.InfoPost("Locating server at " + address + "...") 554 chat.InfoPost("Locating server at " + address + "...")
584 if self.session.connect(address): 555 if self.session.connect(address): self.frame.start_timer()
585 self.frame.start_timer()
586 else: 556 else:
587 chat.SystemPost("Failed to connect to game server...") 557 chat.SystemPost("Failed to connect to game server...")
588 self.failed_connection() 558 self.failed_connection()
589 559
590 def do_join_lobby(self): 560 def do_join_lobby(self):
591 self.cur_room_index = 0 561 self.cur_room_index = 0
592 self.session.send_join_group("0","") 562 self.session.send_join_group("0", "")
593 self.set_lobbybutton(0); 563 self.set_lobbybutton(0);
594 564
595 def do_join_group(self): 565 def do_join_group(self):
596 if self.cur_room_index >= 0: 566 if self.cur_room_index >= 0:
597 if self.cur_room_index != 0: 567 if self.cur_room_index != 0: self.set_lobbybutton(1);
598 self.set_lobbybutton(1); 568 else: self.set_lobbybutton(0);
599 else:
600 self.set_lobbybutton(0);
601 group_id = str(self.room_list.GetItemData(self.cur_room_index)) 569 group_id = str(self.room_list.GetItemData(self.cur_room_index))
602 group = self.session.get_group_info(group_id) 570 group = self.session.get_group_info(group_id)
603 pwd = "" 571 pwd = ""
604 if (group[2] == "True") or (group[2] == "1"): 572 if (group[2] == "True") or (group[2] == "1"):
605 pwd = self.password_manager.GetPassword("room", group_id) 573 pwd = self.password_manager.GetPassword("room", group_id)
606 #dlg = wx.TextEntryDialog(self,"Password?","Join Private Room") 574 #dlg = wx.TextEntryDialog(self,"Password?","Join Private Room")
607 #if dlg.ShowModal() == wx.ID_OK: 575 #if dlg.ShowModal() == wx.ID_OK:
608 # pwd = dlg.GetValue() 576 # pwd = dlg.GetValue()
609 #dlg.Destroy() 577 #dlg.Destroy()
610 else: 578 else: pwd = ""
611 pwd = "" 579 if pwd != None: #pwd == None means the user clicked "Cancel"
612 if pwd != None: #pwd==None means the user clicked "Cancel" 580 self.session.send_join_group(group_id, pwd)
613 self.session.send_join_group(group_id,pwd)
614 581
615 def do_create_group(self): 582 def do_create_group(self):
616 name = self.texts["room_name"].GetValue() 583 name = self.texts["room_name"].GetValue()
617 boot_pwd = self.texts["room_boot_pwd"].GetValue() 584 boot_pwd = self.texts["room_boot_pwd"].GetValue()
618 minversion = self.texts["room_min_version"].GetValue() 585 minversion = self.texts["room_min_version"].GetValue()
644 if loc > -1: 611 if loc > -1:
645 b = name[:loc] 612 b = name[:loc]
646 e = name[loc+1:] 613 e = name[loc+1:]
647 name = b + "&#39;" + e 614 name = b + "&#39;" + e
648 oldloc = loc+1 615 oldloc = loc+1
649 if self.buttons['gs_pwd'].GetValue(): 616 if self.buttons['gs_pwd'].GetValue(): pwd = self.texts["room_pwd"].GetValue()
650 pwd = self.texts["room_pwd"].GetValue() 617 else: pwd = ""
651 else: 618 if name == "": wx.MessageBox("Invalid Name","Error");
652 pwd = ""
653 if name == "":
654 wx.MessageBox("Invalid Name","Error");
655 else: 619 else:
656 msg = "%s is creating room \'%s.\'" % (self.session.name, name) 620 msg = "%s is creating room \'%s.\'" % (self.session.name, name)
657 self.session.send( msg ) 621 self.session.send(msg)
658 self.session.send_create_group(name,pwd,boot_pwd,minversion) 622 self.session.send_create_group(name, pwd, boot_pwd, minversion)
659 self.set_lobbybutton(1); #enable the Lobby quickbutton 623 self.set_lobbybutton(1); #enable the Lobby quickbutton
660
661 624
662 #--------------------------------------------------------- 625 #---------------------------------------------------------
663 # [START] Snowdog: Updated Game Server Window 12/02 626 # [START] Snowdog: Updated Game Server Window 12/02
664 #--------------------------------------------------------- 627 #---------------------------------------------------------
665 628
666 def on_size(self,evt): 629 def on_size(self,evt):
667 # set column widths for room list 630 # set column widths for room list
668
669
670 # set column widths for server list 631 # set column widths for server list
671 pass 632 pass
672
673
674 633
675 #--------------------------------------------------------- 634 #---------------------------------------------------------
676 # [END] Snowdog: Updated Game Server Window 12/02 635 # [END] Snowdog: Updated Game Server Window 12/02
677 #--------------------------------------------------------- 636 #---------------------------------------------------------
678 637
679
680 def colorize_group_list(self, groups): 638 def colorize_group_list(self, groups):
681 try: 639 try:
682 hex = orpg.tools.rgbhex.RGBHex() 640 hex = orpg.tools.rgbhex.RGBHex()
683
684 for gr in groups: 641 for gr in groups:
685 item_list_location = self.room_list.FindItemData(-1,int(gr[0])) 642 item_list_location = self.room_list.FindItemData(-1,int(gr[0]))
686 if item_list_location != -1: 643 if item_list_location != -1:
687 item = self.room_list.GetItem(item_list_location) 644 item = self.room_list.GetItem(item_list_location)
688 if gr[0] == "0": 645 if gr[0] == "0": r,g,b = hex.rgb_tuple(settings.get("RoomColor_Lobby"))
689
690 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Lobby"))
691 elif gr[3] <> "0": 646 elif gr[3] <> "0":
692
693 if gr[2] == "True" or gr[2] == "1": 647 if gr[2] == "True" or gr[2] == "1":
694 648 r,g,b = hex.rgb_tuple(settings.get("RoomColor_Locked"))
695 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Locked")) 649 else: r,g,b = hex.rgb_tuple(settings.get("RoomColor_Active"))
696 else: 650 else: r,g,b = hex.rgb_tuple(settings.get("RoomColor_Empty"))
697
698 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Active"))
699 else:
700
701 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Empty"))
702
703
704 color = wx.Colour(red=r,green=g,blue=b) 651 color = wx.Colour(red=r,green=g,blue=b)
705 item.SetTextColour(color) 652 item.SetTextColour(color)
706 self.room_list.SetItem(item) 653 self.room_list.SetItem(item)
707 except: 654 except: traceback.print_exc()
708 traceback.print_exc()