Mercurial > traipse_dev
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 + "'" + e | 614 name = b + "'" + 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() |