Mercurial > traipse
comparison orpg/networking/gsclient.py @ 28:ff154cf3350c ornery-orc
Traipse 'OpenRPG' {100203-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 (Stable)
New Features:
New Bookmarks Feature
New 'boot' command to remote admin
New confirmation window for sent nodes
Miniatures Layer pop up box allows users to turn off Mini labels, from
FlexiRPG
New Zoom Mouse plugin added
New Images added to Plugin UI
Switching to Element Tree
New Map efficiency, from FlexiRPG
New Status Bar to Update Manager
New TrueDebug Class in orpg_log (See documentation for usage)
New Portable Mercurial
New Tip of the Day, from Core and community
New Reference Syntax added for custom PC sheets
New Child Reference for gametree
New Parent Reference for gametree
New Gametree Recursion method, mapping, context sensitivity, and
effeciency..
New Features node with bonus nodes and Node Referencing help added
New Dieroller structure from Core
New DieRoller portability for odd Dice
New 7th Sea die roller; ie [7k3] = [7d10.takeHighest(3).open(10)]
New 'Mythos' System die roller added
New vs. die roller method for WoD; ie [3v3] = [3d10.vs(3)]. Included for
Mythos roller also
New Warhammer FRPG Die Roller (Special thanks to Puu-san for the
support)
New EZ_Tree Reference system. Push a button, Traipse the tree, get a
reference (Beta!)
New Grids act more like Spreadsheets in Use mode, with Auto Calc
Fixes:
Fix to allow for portability to an OpenSUSE linux OS
Fix to mplay_client for Fedora and OpenSUSE
Fix to Text based Server
Fix to Remote Admin Commands
Fix to Pretty Print, from Core
Fix to Splitter Nodes not being created
Fix to massive amounts of images loading, from Core
Fix to Map from gametree not showing to all clients
Fix to gametree about menus
Fix to Password Manager check on startup
Fix to PC Sheets from tool nodes. They now use the tabber_panel
Fix to Whiteboard ID to prevent random line or text deleting.
Fixes to Server, Remote Server, and Server GUI
Fix to Update Manager; cleaner clode for saved repositories
Fixes made to Settings Panel and now reactive settings when Ok is
pressed
Fixes to Alternity roller's attack roll. Uses a simple Tuple instead of
a Splice
Fix to Use panel of Forms and Tabbers. Now longer enters design mode
Fix made Image Fetching. New fetching image and new failed image
Fix to whiteboard ID's to prevent non updated clients from ruining the
fix.
default_manifest.xml renamed to default_upmana.xml
author | sirebral |
---|---|
date | Wed, 03 Feb 2010 22:16:49 -0600 |
parents | 97265586402b |
children | d02e9197c066 |
comparison
equal
deleted
inserted
replaced
27:51428d30c59e | 28:ff154cf3350c |
---|---|
19 # | 19 # |
20 # File: gsclient.py | 20 # File: gsclient.py |
21 # Author: Chris Davis | 21 # Author: Chris Davis |
22 # Maintainer: | 22 # Maintainer: |
23 # Version: | 23 # Version: |
24 # $Id: gsclient.py,v 1.53 2007/10/25 21:49:34 digitalxero Exp $ | 24 # $Id: gsclient.py,v Traipse 'Ornery-Orc' prof.ebral Exp $ |
25 # | 25 # |
26 # Description: The file contains code for the game server browser | 26 # Description: The file contains code for the game server browser |
27 # | 27 # |
28 | 28 |
29 __version__ = "$Id: gsclient.py,v 1.53 2007/10/25 21:49:34 digitalxero Exp $" | 29 from __future__ import with_statement |
30 __version__ = "$Id: gsclient.py,v Traipse 'Ornery-Orc' prof.ebral Exp $" | |
31 | |
32 import meta_server_lib | |
33 import orpg.tools.rgbhex | |
34 import traceback | |
30 | 35 |
31 from orpg.dirpath import dir_struct | 36 from orpg.dirpath import dir_struct |
32 from orpg.orpg_windows import * | 37 from orpg.orpg_windows import * |
33 import meta_server_lib | 38 from orpg.tools.validate import validate |
34 import orpg.tools.orpg_settings | 39 from orpg.orpgCore import component |
35 from orpg.tools.orpg_settings import settings | 40 from orpg.tools.orpg_settings import settings |
36 import orpg.tools.rgbhex | 41 from orpg.tools.orpg_log import debug |
37 from orpg.orpgCore import component | 42 |
38 import traceback | 43 from xml.etree.ElementTree import ElementTree, Element |
44 from xml.etree.ElementTree import fromstring, tostring | |
39 | 45 |
40 gs_host = 1 | 46 gs_host = 1 |
41 gs_join = 2 | 47 gs_join = 2 |
42 # constants | 48 # constants |
43 | |
44 LIST_SERVER = wx.NewId() | |
45 LIST_ROOM = wx.NewId() | |
46 ADDRESS = wx.NewId() | |
47 GS_CONNECT = wx.NewId() | |
48 GS_DISCONNECT = wx.NewId() | |
49 GS_SERVER_REFRESH = wx.NewId() | |
50 GS_JOIN = wx.NewId() | |
51 GS_JOINLOBBY = wx.NewId() | |
52 GS_CREATE_ROOM = wx.NewId() | |
53 GS_PWD = wx.NewId() | |
54 GS_CLOSE = wx.NewId() | |
55 OR_CLOSE = wx.NewId() | |
56 | 49 |
57 class server_instance: | 50 class server_instance: |
58 def __init__(self, id, name="[Unknown]", users="0", address="127.0.0.1", port="9557"): | 51 def __init__(self, id, name="[Unknown]", users="0", address="127.0.0.1", port="9557"): |
59 self.id = id | 52 self.id = id |
60 self.name = name | 53 self.name = name |
63 self.port = port | 56 self.port = port |
64 | 57 |
65 def server_instance_compare(x,y): | 58 def server_instance_compare(x,y): |
66 """compares server insances for list sort""" | 59 """compares server insances for list sort""" |
67 DEV_SERVER = "OpenRPG DEV" | 60 DEV_SERVER = "OpenRPG DEV" |
68 xuser = 0 | 61 xname = x.name |
69 yuser = 0 | 62 xuser = int(x.user) |
70 try: xuser = int(x.user) | 63 yname = y.name |
71 except: pass | 64 yuser = int(y.user) |
72 try: yuser = int(y.user) | 65 |
73 except: pass | 66 who_name = cmp(yname, xname) |
67 who_user = cmp(yuser, xuser) | |
68 | |
74 if x.name.startswith(DEV_SERVER): | 69 if x.name.startswith(DEV_SERVER): |
75 if y.name.startswith(DEV_SERVER): | 70 if y.name.startswith(DEV_SERVER): |
76 if x.name > y.name: return 1 | 71 if not who_name: return who_user |
77 elif x.name == y.name: | 72 else: return who_name |
78 if xuser < yuser: return 1 | |
79 elif xuser > yuser: return -1 | |
80 else: return 0 | |
81 else: return -1 | |
82 else: return -1 | 73 else: return -1 |
74 | |
83 elif y.name.startswith(DEV_SERVER): return 1 | 75 elif y.name.startswith(DEV_SERVER): return 1 |
84 elif xuser < yuser: return 1 | 76 elif not who_user: return who_name |
85 elif xuser == yuser: | 77 else: return who_user |
86 if x.name > y.name: return 1 | |
87 elif x.name == y.name: return 0 | |
88 else: return -1 | |
89 else: return -1 | |
90 | 78 |
91 def roomCmp(room1, room2): | 79 def roomCmp(room1, room2): |
92 if int(room1) > int(room2): | 80 if int(room1) > int(room2): return 1 |
93 return 1 | 81 elif int(room1) < int(room2): return -1 |
94 elif int(room1) < int(room2): | |
95 return -1 | |
96 return 0 | 82 return 0 |
97 | 83 |
98 class game_server_panel(wx.Panel): | 84 class game_server_panel(wx.Panel): |
99 def __init__(self,parent): | 85 def __init__(self,parent): |
100 wx.Panel.__init__(self, parent, -1) | 86 wx.Panel.__init__(self, parent, -1) |
101 self.parent = parent | 87 self.parent = parent |
102 self.password_manager = component.get('password_manager') # passtool --SD 8/03 | 88 self.password_manager = component.get('password_manager') |
103 self.frame = component.get('frame') | 89 self.frame = component.get('frame') |
104 self.session = component.get('session') | 90 self.session = component.get('session') |
105 self.xml = component.get('xml') #Not used?? | |
106 self.serverNameSet = 0 | 91 self.serverNameSet = 0 |
107 self.last_motd = "" | 92 self.last_motd = "" |
108 self.buttons = {} | 93 self.buttons = {} |
109 self.texts = {} | 94 self.texts = {} |
110 self.svrList = [] | 95 self.svrList = [] |
111 self.build_ctrls() | 96 self.build_ctrls() |
97 self.bookmarks() | |
112 self.refresh_server_list() | 98 self.refresh_server_list() |
113 self.refresh_room_list() | 99 self.refresh_room_list() |
114 | 100 self.build_bookmark_menu() |
115 #--------------------------------------------------------- | 101 |
116 # [START] Snowdog: Updated Game Server Window 12/02 | |
117 #--------------------------------------------------------- | |
118 def build_ctrls(self): | 102 def build_ctrls(self): |
119 ## Section Sizers (with frame edges and text captions) | 103 ## Section Sizers (with frame edges and text captions) |
120 self.box_sizers = {} | 104 self.box_sizers = {} |
121 self.box_sizers["server"] = wx.StaticBox(self, -1, "Server") | 105 self.box_sizers["server"] = wx.StaticBox(self, -1, "Server") |
122 self.box_sizers["window"] = wx.StaticBox(self, -1, "Exit" ) | 106 self.box_sizers["window"] = wx.StaticBox(self, -1, "Exit" ) |
131 self.sizers["close"] = wx.StaticBoxSizer(self.box_sizers["window"], wx.HORIZONTAL) | 115 self.sizers["close"] = wx.StaticBoxSizer(self.box_sizers["window"], wx.HORIZONTAL) |
132 self.sizers["c_room"] = wx.StaticBoxSizer(self.box_sizers["c_room"], wx.VERTICAL) | 116 self.sizers["c_room"] = wx.StaticBoxSizer(self.box_sizers["c_room"], wx.VERTICAL) |
133 | 117 |
134 #Build Server Sizer | 118 #Build Server Sizer |
135 adder = wx.StaticText(self, -1, "Address:") | 119 adder = wx.StaticText(self, -1, "Address:") |
136 self.texts["address"] = wx.TextCtrl(self, ADDRESS) | 120 self.texts["address"] = wx.TextCtrl(self, wx.ID_ANY) |
137 servers = wx.StaticText(self, -1, "Servers:") | 121 servers = wx.StaticText(self, -1, "Servers:") |
138 self.server_list = wx.ListCtrl(self, LIST_SERVER, style=wx.LC_REPORT | wx.SUNKEN_BORDER ) | 122 self.server_list = wx.ListCtrl(self, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER ) |
139 self.server_list.InsertColumn(0, "Players", wx.LIST_FORMAT_LEFT, 0) | 123 self.server_list.InsertColumn(0, '', wx.LIST_FORMAT_LEFT, 0) |
140 self.server_list.InsertColumn(1, "Name", wx.LIST_FORMAT_LEFT, 0) | 124 self.server_list.InsertColumn(1, "Players", wx.LIST_FORMAT_LEFT, 0) |
141 self.buttons[GS_CONNECT] = wx.Button(self, GS_CONNECT, "Connect") | 125 self.server_list.InsertColumn(2, "Name", wx.LIST_FORMAT_LEFT, 0) |
142 self.buttons[GS_SERVER_REFRESH] = wx.Button(self, GS_SERVER_REFRESH, "Refresh") | 126 self.buttons['gs_connect'] = wx.Button(self, wx.ID_ANY, "Connect") |
143 self.buttons[GS_DISCONNECT] = wx.Button(self, GS_DISCONNECT, "Disconnect") | 127 self.buttons['gs_refresh'] = wx.Button(self, wx.ID_ANY, "Refresh") |
128 self.buttons['gs_disconnect'] = wx.Button(self, wx.ID_ANY, "Disconnect") | |
144 self.sizers["svrbtns"] = wx.BoxSizer(wx.HORIZONTAL) | 129 self.sizers["svrbtns"] = wx.BoxSizer(wx.HORIZONTAL) |
145 self.sizers["svrbtns"].Add(self.buttons[GS_CONNECT], 0, wx.EXPAND) | 130 self.sizers["svrbtns"].Add(self.buttons['gs_connect'], 0, wx.EXPAND) |
146 self.sizers["svrbtns"].Add(self.buttons[GS_SERVER_REFRESH], 0, wx.EXPAND) | 131 self.sizers["svrbtns"].Add(self.buttons['gs_refresh'], 0, wx.EXPAND) |
147 self.sizers["svrbtns"].Add(self.buttons[GS_DISCONNECT], 0, wx.EXPAND) | 132 self.sizers["svrbtns"].Add(self.buttons['gs_disconnect'], 0, wx.EXPAND) |
148 self.sizers["server"].Add(adder, 0, wx.EXPAND) | 133 self.sizers["server"].Add(adder, 0, wx.EXPAND) |
149 self.sizers["server"].Add(self.texts["address"], 0, wx.EXPAND) | 134 self.sizers["server"].Add(self.texts["address"], 0, wx.EXPAND) |
150 self.sizers["server"].Add(servers, 0, wx.EXPAND) | 135 self.sizers["server"].Add(servers, 0, wx.EXPAND) |
151 self.sizers["server"].Add(self.server_list, 1, wx.EXPAND) | 136 self.sizers["server"].Add(self.server_list, 1, wx.EXPAND) |
152 self.sizers["server"].Add(self.sizers["svrbtns"], 0, wx.EXPAND) | 137 self.sizers["server"].Add(self.sizers["svrbtns"], 0, wx.EXPAND) |
153 | 138 |
154 #Build Rooms Sizer | 139 #Build Rooms Sizer |
155 self.room_list = wx.ListCtrl(self, LIST_ROOM, style=wx.LC_REPORT | wx.SUNKEN_BORDER) | 140 self.room_list = wx.ListCtrl(self, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER) |
156 self.room_list.InsertColumn(0,"Game", wx.LIST_FORMAT_LEFT,-1) | 141 self.room_list.InsertColumn(0,"Game", wx.LIST_FORMAT_LEFT,-1) |
157 self.room_list.InsertColumn(1,"Players", wx.LIST_FORMAT_LEFT,-1) | 142 self.room_list.InsertColumn(1,"Players", wx.LIST_FORMAT_LEFT,-1) |
158 self.room_list.InsertColumn(2,"PW", wx.LIST_FORMAT_LEFT,-1) | 143 self.room_list.InsertColumn(2,"PW", wx.LIST_FORMAT_LEFT,-1) |
159 self.buttons[GS_JOIN] = wx.Button(self, GS_JOIN, "Join Room") | 144 self.buttons['gs_join_room'] = wx.Button(self, wx.ID_ANY, "Join Room") |
160 self.buttons[GS_JOINLOBBY] = wx.Button(self, GS_JOINLOBBY, "Lobby") | 145 self.buttons['gs_join_lobby'] = wx.Button(self, wx.ID_ANY, "Lobby") |
161 self.sizers["roombtns"] = wx.BoxSizer(wx.HORIZONTAL) | 146 self.sizers["roombtns"] = wx.BoxSizer(wx.HORIZONTAL) |
162 self.sizers["roombtns"].Add(self.buttons[GS_JOIN], 0, wx.EXPAND) | 147 self.sizers["roombtns"].Add(self.buttons['gs_join_room'], 0, wx.EXPAND) |
163 self.sizers["roombtns"].Add(self.buttons[GS_JOINLOBBY], 0, wx.EXPAND) | 148 self.sizers["roombtns"].Add(self.buttons['gs_join_lobby'], 0, wx.EXPAND) |
164 self.sizers["rooms"].Add(self.room_list, 1, wx.EXPAND) | 149 self.sizers["rooms"].Add(self.room_list, 1, wx.EXPAND) |
165 self.sizers["rooms"].Add(self.sizers["roombtns"], 0, wx.EXPAND) | 150 self.sizers["rooms"].Add(self.sizers["roombtns"], 0, wx.EXPAND) |
166 | 151 |
167 #Build Close Sizer | 152 #Build Close Sizer |
168 self.buttons[OR_CLOSE] = wx.Button(self, OR_CLOSE,"Exit OpenRPG") | 153 self.buttons['close_orpg'] = wx.Button(self, wx.ID_ANY,"Exit OpenRPG") |
169 self.buttons[GS_CLOSE] = wx.Button(self, GS_CLOSE,"Close Window") | 154 self.buttons['gs_close'] = wx.Button(self, wx.ID_ANY,"Close Window") |
170 self.sizers["close"].Add(self.buttons[OR_CLOSE], 1, wx.ALIGN_CENTER_VERTICAL) | 155 self.sizers["close"].Add(self.buttons['close_orpg'], 1, wx.ALIGN_CENTER_VERTICAL) |
171 self.sizers["close"].Add(self.buttons[GS_CLOSE], 1, wx.ALIGN_CENTER_VERTICAL) | 156 self.sizers["close"].Add(self.buttons['gs_close'], 1, wx.ALIGN_CENTER_VERTICAL) |
172 | 157 |
173 #Build Create Room Sizer | 158 #Build Create Room Sizer |
174 rname = wx.StaticText(self,-1, "Room Name:") | 159 rname = wx.StaticText(self,-1, "Room Name:") |
175 self.texts["room_name"] = wx.TextCtrl(self, -1) | 160 self.texts["room_name"] = wx.TextCtrl(self, -1) |
176 rpass = wx.StaticText(self,-1, "Password:") | 161 rpass = wx.StaticText(self,-1, "Password:") |
177 self.buttons[GS_PWD] = wx.CheckBox(self, GS_PWD, "") | 162 self.buttons['gs_pwd'] = wx.CheckBox(self, wx.ID_ANY, "") |
178 self.texts["room_pwd"] = wx.TextCtrl(self, -1) | 163 self.texts["room_pwd"] = wx.TextCtrl(self, -1) |
179 self.texts["room_pwd"].Enable(0) | 164 self.texts["room_pwd"].Enable(0) |
180 pwsizer = wx.BoxSizer(wx.HORIZONTAL) | 165 pwsizer = wx.BoxSizer(wx.HORIZONTAL) |
181 pwsizer.Add(self.buttons[GS_PWD],0,0) | 166 pwsizer.Add(self.buttons['gs_pwd'],0,0) |
182 pwsizer.Add(self.texts["room_pwd"], 1, wx.EXPAND) | 167 pwsizer.Add(self.texts["room_pwd"], 1, wx.EXPAND) |
183 apass = wx.StaticText(self,-1, "Admin Password:") | 168 apass = wx.StaticText(self,-1, "Admin Password:") |
184 self.texts["room_boot_pwd"] = wx.TextCtrl(self, -1) | 169 self.texts["room_boot_pwd"] = wx.TextCtrl(self, -1) |
185 minver = wx.StaticText(self,-1, "Minimum Version:") | 170 minver = wx.StaticText(self,-1, "Minimum Version:") |
186 self.texts["room_min_version"] = wx.TextCtrl(self, -1) | 171 self.texts["room_min_version"] = wx.TextCtrl(self, -1) |
192 self.sizers["c_room_layout"].Add(apass, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL) | 177 self.sizers["c_room_layout"].Add(apass, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
193 self.sizers["c_room_layout"].Add(self.texts["room_boot_pwd"], 0, wx.EXPAND) | 178 self.sizers["c_room_layout"].Add(self.texts["room_boot_pwd"], 0, wx.EXPAND) |
194 self.sizers["c_room_layout"].Add(minver, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL) | 179 self.sizers["c_room_layout"].Add(minver, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
195 self.sizers["c_room_layout"].Add(self.texts["room_min_version"], 0, wx.EXPAND) | 180 self.sizers["c_room_layout"].Add(self.texts["room_min_version"], 0, wx.EXPAND) |
196 self.sizers["c_room_layout"].AddGrowableCol(1) | 181 self.sizers["c_room_layout"].AddGrowableCol(1) |
197 self.buttons[GS_CREATE_ROOM] = wx.Button(self, GS_CREATE_ROOM, "Create Room") | 182 self.buttons['gs_create_room'] = wx.Button(self, wx.ID_ANY, "Create Room") |
198 self.sizers["c_room"].Add(self.sizers["c_room_layout"], 1, wx.EXPAND) | 183 self.sizers["c_room"].Add(self.sizers["c_room_layout"], 1, wx.EXPAND) |
199 self.sizers["c_room"].Add(self.buttons[GS_CREATE_ROOM], 0, wx.EXPAND) | 184 self.sizers["c_room"].Add(self.buttons['gs_create_room'], 0, wx.EXPAND) |
200 | 185 |
201 #Build Main Sizer | 186 #Build Main Sizer |
202 self.sizers["main"].Add(self.sizers["server"], (0,0), span=(2,1), flag=wx.EXPAND) | 187 self.sizers["main"].Add(self.sizers["server"], (0,0), span=(2,1), flag=wx.EXPAND) |
203 self.sizers["main"].Add(self.sizers["rooms"], (0,1), flag=wx.EXPAND) | 188 self.sizers["main"].Add(self.sizers["rooms"], (0,1), flag=wx.EXPAND) |
204 self.sizers["main"].Add(self.sizers["close"], (2,0), flag=wx.EXPAND) | 189 self.sizers["main"].Add(self.sizers["close"], (2,0), flag=wx.EXPAND) |
209 self.SetSizer(self.sizers["main"]) | 194 self.SetSizer(self.sizers["main"]) |
210 self.SetAutoLayout(True) | 195 self.SetAutoLayout(True) |
211 self.Fit() | 196 self.Fit() |
212 | 197 |
213 ## Event Handlers | 198 ## Event Handlers |
214 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_CONNECT) | 199 self.Bind(wx.EVT_BUTTON, self.gs_connect, self.buttons['gs_connect']) |
215 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_DISCONNECT) | 200 self.Bind(wx.EVT_BUTTON, self.gs_disconnect, self.buttons['gs_disconnect']) |
216 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_CREATE_ROOM) | 201 self.Bind(wx.EVT_BUTTON, self.gs_create_room, self.buttons['gs_create_room']) |
217 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_JOIN) | 202 self.Bind(wx.EVT_BUTTON, self.gs_join, self.buttons['gs_join_room']) |
218 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_JOINLOBBY) | 203 self.Bind(wx.EVT_BUTTON, self.gs_join_lobby, self.buttons['gs_join_lobby']) |
219 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_SERVER_REFRESH) | 204 self.Bind(wx.EVT_BUTTON, self.gs_server_refresh, self.buttons['gs_refresh']) |
220 self.Bind(wx.EVT_BUTTON, self.on_button, id=GS_CLOSE) | 205 self.Bind(wx.EVT_BUTTON, self.gs_close, self.buttons['gs_close']) |
221 self.Bind(wx.EVT_BUTTON, self.on_button, id=OR_CLOSE) | 206 self.Bind(wx.EVT_BUTTON, self.close_orpg, self.buttons['close_orpg']) |
222 self.Bind(wx.EVT_CHECKBOX, self.on_button, id=GS_PWD) | 207 self.Bind(wx.EVT_CHECKBOX, self.gs_pwd, self.buttons['gs_pwd']) |
223 | 208 |
224 # Added double click handlers 5/05 -- Snowdog | 209 # Added double click handlers 5/05 -- Snowdog |
225 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_server_dbclick, id=LIST_SERVER) | 210 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_server_dbclick, self.server_list) |
226 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_room_dbclick, id=LIST_ROOM) | 211 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.on_room_dbclick, self.room_list) |
227 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_select, id=LIST_ROOM) | 212 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_room_select, self.room_list) |
228 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_select, id=LIST_SERVER) | 213 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_server_select, self.server_list) |
229 self.texts['address'].Bind(wx.EVT_SET_FOCUS, self.on_text) | 214 self.texts['address'].Bind(wx.EVT_SET_FOCUS, self.on_text) |
230 self.set_connected(self.session.is_connected()) | 215 self.set_connected(self.session.is_connected()) |
231 self.cur_room_index = -1 | 216 self.cur_room_index = -1 |
232 self.cur_server_index = -1 | 217 self.cur_server_index = -1 |
233 self.rmList = {} | 218 self.rmList = {} |
234 | 219 |
235 #--------------------------------------------------------- | 220 # Create Book Mark Image List |
236 # [END] Snowdog: Updated Game Server Window 12/02 | 221 self.server_list.Bind(wx.EVT_LEFT_DOWN, self.on_hit) |
237 #--------------------------------------------------------- | 222 self._imageList = wx.ImageList( 16, 16, False ) |
238 | 223 img = wx.Image(dir_struct["icon"]+"add.png", wx.BITMAP_TYPE_PNG).ConvertToBitmap() |
239 #----------------------------------------------------- | 224 self._imageList.Add( img ) |
240 # on_server_dbclick() | 225 img = wx.Image(dir_struct["icon"]+"star.png", wx.BITMAP_TYPE_PNG).ConvertToBitmap() |
241 # support for double click selection of server. | 226 self._imageList.Add( img ) |
242 # 5/16/05 -- Snowdog | 227 self.server_list.SetImageList( self._imageList, wx.IMAGE_LIST_SMALL ) |
243 #----------------------------------------------------- | 228 |
229 def bookmarks(self): | |
230 validate.config_file('server_bookmarks.xml', | |
231 'default_server_bookmarks.xml') | |
232 self.bookmarks = ElementTree() | |
233 self.bookmarks.parse(dir_struct['user'] + 'server_bookmarks.xml') | |
234 | |
235 def build_bookmark_menu(self): | |
236 gsm = self.frame.mainmenu.GetMenu( | |
237 self.frame.mainmenu.FindMenu('Game Server')) | |
238 self.bookmarks_menu = wx.Menu() | |
239 x = 0 | |
240 for server in self.bookmarks.findall('server'): | |
241 for svr in self.svrList: | |
242 address = svr.addy | |
243 if server.get('address') == address: self.server_list.SetItemImage(x, 1) | |
244 x += 1 | |
245 item = wx.MenuItem(self.bookmarks_menu, wx.ID_ANY, | |
246 server.get('name'), server.get('name')) | |
247 open_rpg.get_component('frame').Bind(wx.EVT_MENU, | |
248 self.on_bookmarks_menu, item) | |
249 self.bookmarks_menu.AppendItem(item) | |
250 gsm.AppendSubMenu(self.bookmarks_menu, "Bookmarks") | |
251 | |
252 def on_bookmarks_menu(self, evt): | |
253 id = evt.GetId() | |
254 menu = self.bookmarks_menu.FindItemById(id) | |
255 for server in self.bookmarks.findall('server'): | |
256 if server.get('name') == menu.GetLabel(): | |
257 address = server.get('address') | |
258 self.cur_server_index = 999 | |
259 self.name = server.get('name') | |
260 self.texts["address"].SetValue(address) | |
261 if self.session.is_connected(): | |
262 if self.session.host_server == address : return | |
263 else: self.frame.kill_mplay_session() | |
264 self.do_connect(address) | |
265 break | |
266 | |
267 def bookmark(self, item, flag): | |
268 name = self.svrList[item].name | |
269 address = self.svrList[item].addy | |
270 port = self.svrList[item].port | |
271 self.server_list.SetItemImage(item, 1) | |
272 for server in self.bookmarks.findall('server'): | |
273 if server.get('name') == name: | |
274 self.bookmarks_menu.Remove( | |
275 self.bookmarks_menu.FindItem(server.get('name'))) | |
276 self.bookmarks.getroot().remove(server) | |
277 self.server_list.SetItemImage(item, 0) | |
278 break | |
279 else: | |
280 server = Element('server') | |
281 server.set('name', name) | |
282 server.set('address', address + ':' + port) | |
283 self.bookmarks.getroot().append(server) | |
284 item = wx.MenuItem(self.bookmarks_menu, wx.ID_ANY, name, name) | |
285 open_rpg.get_component('frame').Bind(wx.EVT_MENU, | |
286 self.on_bookmarks_menu, item) | |
287 self.bookmarks_menu.AppendItem(item) | |
288 self.save_bookmarks() | |
289 | |
290 def save_bookmarks(self): | |
291 with open(dir_struct['user'] + 'server_bookmarks.xml', 'w') as f: | |
292 self.bookmarks.write(f) | |
293 | |
244 def on_server_dbclick(self, evt=None): | 294 def on_server_dbclick(self, evt=None): |
245 #make sure address is updated just in case list select wasn't done | 295 #make sure address is updated just in case list select wasn't done |
246 try: | 296 try: self.on_select(evt) |
247 self.on_select(evt) | 297 except: pass |
248 except: | |
249 pass | |
250 address = self.texts["address"].GetValue() | 298 address = self.texts["address"].GetValue() |
251 if self.session.is_connected(): | 299 if self.session.is_connected(): |
252 if self.session.host_server == address : | 300 if self.session.host_server == address : return |
253 #currently connected to address. Do nothing. | 301 else: self.frame.kill_mplay_session() |
254 return | |
255 else: | |
256 #address differs, disconnect. | |
257 self.frame.kill_mplay_session() | |
258 self.do_connect(address) | 302 self.do_connect(address) |
259 | |
260 | |
261 #----------------------------------------------------- | |
262 # on_room_dbclick() | |
263 # support for double click selection of server. | |
264 # 5/16/05 -- Snowdog | |
265 #----------------------------------------------------- | |
266 | 303 |
267 def on_room_dbclick(self, evt=None): | 304 def on_room_dbclick(self, evt=None): |
268 #make sure address is updated just in case list select wasn't done | 305 #make sure address is updated just in case list select wasn't done |
269 try: | 306 try: self.on_select(evt) |
270 self.on_select(evt) | 307 except: pass |
271 except: | |
272 pass | |
273 group_id = str(self.room_list.GetItemData(self.cur_room_index)) | 308 group_id = str(self.room_list.GetItemData(self.cur_room_index)) |
274 | |
275 if self.NoGroups: | 309 if self.NoGroups: |
276 self.NoGroups = False | 310 self.NoGroups = False |
277 self.session.group_id = group_id | 311 self.session.group_id = group_id |
278 self.on_server_dbclick() | 312 self.on_server_dbclick() |
279 return | 313 return |
280 | |
281 if self.cur_room_index >= 0: | 314 if self.cur_room_index >= 0: |
282 if self.cur_room_index != 0: | 315 if self.cur_room_index != 0: self.set_lobbybutton(1); |
283 self.set_lobbybutton(1); | 316 else: self.set_lobbybutton(0); |
284 else: | |
285 self.set_lobbybutton(0); | |
286 group = self.session.get_group_info(group_id) | 317 group = self.session.get_group_info(group_id) |
287 pwd = "" | 318 pwd = "" |
288 if (group[2] == "True") or (group[2] == "1"): | 319 if (group[2] == "True") or (group[2] == "1"): |
289 pwd = self.password_manager.GetPassword("room", group_id) | 320 pwd = self.password_manager.GetPassword("room", group_id) |
290 else: | 321 else: pwd = "" |
291 pwd = "" | |
292 self.session.send_join_group(group_id, pwd) | 322 self.session.send_join_group(group_id, pwd) |
293 | 323 |
294 | 324 def on_room_select(self,evt): |
295 def on_select(self,evt): | 325 self.cur_room_index = evt.m_itemIndex |
326 | |
327 def on_hit(self, evt): | |
328 pos = wx.Point( evt.GetX(), evt.GetY() ) | |
329 (item, flag) = self.server_list.HitTest( pos ) | |
330 ## Item == list[server], flag == (32 = 0 colum, 128 = else) ## | |
331 if flag == 32: self.bookmark(item, flag) | |
332 evt.Skip() | |
333 | |
334 def on_server_select(self,evt): | |
335 self.cur_server_index = evt.m_itemIndex | |
336 self.name = self.svrList[self.cur_server_index].name | |
337 address = self.svrList[self.cur_server_index].addy | |
338 port = self.svrList[self.cur_server_index].port | |
339 self.texts["address"].SetValue(address + ":" + str(port)) | |
340 self.refresh_room_list() | |
341 | |
342 def on_text(self, evt): | |
296 id = evt.GetId() | 343 id = evt.GetId() |
297 if id == LIST_ROOM: | 344 if (id == self.texts["address"].GetValue()) and (self.cur_server_index >= 0): |
298 self.cur_room_index = evt.m_itemIndex | |
299 elif id==LIST_SERVER: | |
300 self.cur_server_index = evt.m_itemIndex | |
301 self.name = self.svrList[self.cur_server_index].name | |
302 address = self.svrList[self.cur_server_index].addy | |
303 port = self.svrList[self.cur_server_index].port | |
304 self.texts["address"].SetValue(address+":"+str(port)) | |
305 self.refresh_room_list() | |
306 | |
307 def on_text(self,evt): | |
308 id = evt.GetId() | |
309 if (id == ADDRESS) and (self.cur_server_index >= 0): | |
310 #print "ADDRESS id = ", id, "index = ", self.cur_server_index | |
311 self.cur_server_index = -1 | 345 self.cur_server_index = -1 |
312 evt.Skip() | 346 evt.Skip() |
313 | 347 |
314 def add_room(self,data): | 348 def add_room(self, data): |
315 i = self.room_list.GetItemCount() | 349 i = self.room_list.GetItemCount() |
316 if (data[2]=="1") or (data[2]=="True"): pwd="yes" | 350 if (data[2]=="1") or (data[2]=="True"): pwd="yes" |
317 else: pwd="no" | 351 else: pwd="no" |
318 self.room_list.InsertStringItem(i,data[1]) | 352 self.room_list.InsertStringItem(i,data[1]) |
319 self.room_list.SetStringItem(i,1,data[3]) | 353 self.room_list.SetStringItem(i,1,data[3]) |
324 def del_room(self, data): | 358 def del_room(self, data): |
325 i = self.room_list.FindItemData(-1, int(data[0])) | 359 i = self.room_list.FindItemData(-1, int(data[0])) |
326 self.room_list.DeleteItem(i) | 360 self.room_list.DeleteItem(i) |
327 self.refresh_room_list() | 361 self.refresh_room_list() |
328 | 362 |
329 #--------------------------------------------------------- | 363 def update_room(self, data): |
330 # [START] Snowdog Password/Room Name altering code 12/02 | |
331 #--------------------------------------------------------- | |
332 | |
333 def update_room(self,data): | |
334 | |
335 #------------------------------------------------------- | |
336 # Udated 12/02 by Snowdog | |
337 # allows refresh of all room data not just player counts | |
338 #------------------------------------------------------- | |
339 i = self.room_list.FindItemData(-1,int(data[0])) | 364 i = self.room_list.FindItemData(-1,int(data[0])) |
340 if data[2]=="1" : pwd="yes" | 365 if data[2]=="1" : pwd="yes" |
341 else: pwd="no" | 366 else: pwd="no" |
342 self.room_list.SetStringItem(i,0,data[1]) | 367 self.room_list.SetStringItem(i,0,data[1]) |
343 self.room_list.SetStringItem(i,1,data[3]) | 368 self.room_list.SetStringItem(i,1,data[3]) |
344 self.room_list.SetStringItem(i,2,pwd) | 369 self.room_list.SetStringItem(i,2,pwd) |
345 self.refresh_room_list() | 370 self.refresh_room_list() |
346 | 371 |
347 #--------------------------------------------------------- | 372 def set_cur_room_text(self, name): |
348 # [END] Snowdog Password/Room Name altering code 12/02 | |
349 #--------------------------------------------------------- | |
350 | |
351 def set_cur_room_text(self,name): | |
352 pass | 373 pass |
353 #self.texts["cur_room"].SetLabel(name) | 374 #self.texts["cur_room"].SetLabel(name) |
354 #self.sizers["room"].Layout() | 375 #self.sizers["room"].Layout() |
355 | 376 |
356 def set_lobbybutton(self,allow): | 377 def set_lobbybutton(self, allow): |
357 self.buttons[GS_JOINLOBBY].Enable(allow) | 378 self.buttons['gs_join_lobby'].Enable(allow) |
358 | 379 |
359 def set_connected(self,connected): | 380 def set_connected(self, connected): |
360 self.buttons[GS_CONNECT].Enable(not connected) | 381 self.buttons['gs_connect'].Enable(not connected) |
361 self.buttons[GS_DISCONNECT].Enable(connected) | 382 self.buttons['gs_disconnect'].Enable(connected) |
362 self.buttons[GS_JOIN].Enable(connected) | 383 self.buttons['gs_join_room'].Enable(connected) |
363 self.buttons[GS_CREATE_ROOM].Enable(connected) | 384 self.buttons['gs_create_room'].Enable(connected) |
364 if not connected: | 385 if not connected: |
365 self.buttons[GS_JOINLOBBY].Enable(connected) | 386 self.buttons['gs_join_lobby'].Enable(connected) |
366 self.room_list.DeleteAllItems() | 387 self.room_list.DeleteAllItems() |
367 self.set_cur_room_text("Not Connected!") | 388 self.set_cur_room_text("Not Connected!") |
368 self.cur_room_index = -1 | 389 self.cur_room_index = -1 |
369 self.frame.status.set_connect_status("Not Connected") | 390 self.frame.status.set_connect_status("Not Connected") |
370 else: | 391 else: |
371 #data = self.session.get_my_group() | |
372 self.frame.status.set_connect_status(self.name) | 392 self.frame.status.set_connect_status(self.name) |
373 self.set_cur_room_text("Lobby") | 393 self.set_cur_room_text("Lobby") |
374 | 394 |
375 def on_button(self,evt): | 395 def gs_connect(self, evt): |
376 id = evt.GetId() | 396 address = self.texts['address'].GetValue() |
377 if id == GS_CONNECT: | 397 try: dummy = self.name |
378 address = self.texts["address"].GetValue() | 398 except: self.name = `address` |
379 ### check to see if this is a manual entry vs. list entry. | 399 self.do_connect(address) |
380 try: | 400 |
381 dummy = self.name | 401 def gs_disconnect(self, evt): |
382 except: | 402 self.frame.kill_mplay_session() |
383 self.name = `address` | 403 |
384 self.do_connect(address) | 404 def gs_create_room(self, evt): |
385 elif id == GS_DISCONNECT: self.frame.kill_mplay_session() | 405 self.do_create_group() |
386 elif id == GS_CREATE_ROOM: self.do_create_group() | 406 |
387 elif id == GS_JOIN: self.do_join_group() | 407 def gs_join(self, evt): |
388 elif id == GS_JOINLOBBY: self.do_join_lobby() | 408 self.do_join_group() |
389 elif id == GS_SERVER_REFRESH: self.refresh_server_list() | 409 |
390 elif id == GS_PWD: self.texts["room_pwd"].Enable(evt.Checked()) | 410 def gs_join_lobby(self, evt): |
391 elif id == OR_CLOSE: | 411 self.do_join_lobby() |
392 dlg = wx.MessageDialog(self,"Quit OpenRPG?","OpenRPG",wx.YES_NO) | 412 |
393 if dlg.ShowModal() == wx.ID_YES: | 413 def gs_server_refresh(self, evt): |
394 dlg.Destroy() | 414 self.refresh_server_list() |
395 self.frame.kill_mplay_session() | 415 |
396 self.frame.closed_confirmed() | 416 def gs_pwd(self, evt): |
397 elif id == GS_CLOSE: | 417 self.texts['room_pwd'].Enable(evt.Checked()) |
398 self.parent.OnMB_GameServerBrowseServers() | 418 |
399 | 419 def close_orpg(self, evt): |
420 dlg = wx.MessageDialog(self, 'Quit OpenRPG?', "OpenRPG", wx.YES_NO) | |
421 if dlg.ShowModal() == wx.ID_YES: | |
422 dlg.Destroy() | |
423 self.frame.kill_mplay_session() | |
424 self.frame.closed_confirmed() | |
425 | |
426 def gs_close(self, evt): | |
427 self.parent.OnMB_GameServerBrowseServers() | |
428 | |
400 def refresh_room_list(self): | 429 def refresh_room_list(self): |
401 self.room_list.DeleteAllItems() | 430 self.room_list.DeleteAllItems() |
402 address = self.texts["address"].GetValue() | 431 address = self.texts["address"].GetValue() |
403 try: | 432 try: cadder = self.session.host_server |
404 cadder = self.session.host_server | 433 except: cadder = '' |
405 except: | |
406 cadder = '' | |
407 if self.rmList.has_key(address) and len(self.rmList[address]) > 0 and cadder != address: | 434 if self.rmList.has_key(address) and len(self.rmList[address]) > 0 and cadder != address: |
408 groups = self.rmList[address] | 435 groups = self.rmList[address] |
409 self.NoGroups = True | 436 self.NoGroups = True |
410 else: | 437 else: |
411 self.NoGroups = False | 438 self.NoGroups = False |
431 | 458 |
432 def refresh_server_list(self): | 459 def refresh_server_list(self): |
433 try: | 460 try: |
434 self.svrList = [] | 461 self.svrList = [] |
435 self.server_list.DeleteAllItems() | 462 self.server_list.DeleteAllItems() |
436 xml_dom = meta_server_lib.get_server_list(["2"]); | 463 etreeEl = meta_server_lib.get_server_list(["2"]); |
437 node_list = xml_dom.getElementsByTagName('server') | 464 node_list = etreeEl.findall('server') |
438 hex = orpg.tools.rgbhex.RGBHex() | 465 hex = orpg.tools.rgbhex.RGBHex() |
439 color1 = settings.get_setting("RoomColor_Active") | 466 color1 = settings.get("RoomColor_Active") |
440 color2 = settings.get_setting("RoomColor_Locked") | 467 color2 = settings.get("RoomColor_Locked") |
441 color3 = settings.get_setting("RoomColor_Empty") | 468 color3 = settings.get("RoomColor_Empty") |
442 color4 = settings.get_setting("RoomColor_Lobby") | 469 color4 = settings.get("RoomColor_Lobby") |
443 | 470 |
444 if len(node_list): | 471 if len(node_list): |
445 length = len(node_list) | 472 length = len(node_list) |
446 part = 0 | 473 part = 0 |
447 partLength = 1.0/length | 474 partLength = 1.0/length |
448 for n in node_list: | 475 for n in node_list: |
449 if n.hasAttribute('id') and n.hasAttribute('name') and n.hasAttribute('num_users') and n.hasAttribute('address') and n.hasAttribute('port'): | 476 self.svrList.append(server_instance(n.get('id'), n.get('name'), |
450 self.svrList.append(server_instance(n.getAttribute('id'), n.getAttribute('name'), | 477 n.get('num_users'), n.get('address'), |
451 n.getAttribute('num_users'), n.getAttribute('address'), | 478 n.get('port'))) |
452 n.getAttribute('port'))) | 479 address = n.get('address') + ':' + n.get('port') |
453 address = n.getAttribute('address') + ':' + n.getAttribute('port') | 480 self.rmList[address] = [] |
454 self.rmList[address] = [] | 481 rooms = n.findall('room') |
455 rooms = n.getElementsByTagName('room') | 482 |
456 | 483 for room in rooms: |
457 for room in rooms: | 484 self.rmList[address].append((room.get("id"), room.get("name"), |
458 pwd = room.getAttribute("pwd") | 485 room.get("pwd"), room.get("num_users"))) |
459 id = room.getAttribute("id") | |
460 name = room.getAttribute("name") | |
461 nump = room.getAttribute("num_users") | |
462 self.rmList[address].append((id, name, pwd, nump)) | |
463 self.svrList.sort(server_instance_compare) | 486 self.svrList.sort(server_instance_compare) |
464 | 487 |
465 for n in self.svrList: | 488 for n in self.svrList: |
466 i = self.server_list.GetItemCount() | 489 i = self.server_list.GetItemCount() |
467 name = n.name | 490 name = n.name |
468 players = n.user | 491 players = n.user |
469 self.server_list.InsertStringItem(i,players) | 492 self.server_list.InsertImageStringItem(i, '', 0) |
470 self.server_list.SetStringItem(i,1,name) | 493 for server in self.bookmarks.findall('server'): |
494 if server.get('name') == name: self.server_list.SetItemImage(i, 1) | |
495 self.server_list.SetStringItem(i,1,players) | |
496 self.server_list.SetStringItem(i,2,name) | |
471 r,g,b = hex.rgb_tuple(color1) | 497 r,g,b = hex.rgb_tuple(color1) |
472 svrcolor = wx.Colour(red=r,green=g,blue=b) | 498 svrcolor = wx.Colour(red=r,green=g,blue=b) |
473 | 499 |
474 if players == "0": | 500 if players == "0": |
475 r,g,b = hex.rgb_tuple(color3) | 501 r,g,b = hex.rgb_tuple(color3) |
486 self.servers = node_list | 512 self.servers = node_list |
487 | 513 |
488 # No server is currently selected!!! Versus the broken and random 0! | 514 # No server is currently selected!!! Versus the broken and random 0! |
489 self.cur_server_index = -1 | 515 self.cur_server_index = -1 |
490 self.server_list.SetColumnWidth(0, wx.LIST_AUTOSIZE) | 516 self.server_list.SetColumnWidth(0, wx.LIST_AUTOSIZE) |
491 if self.server_list.GetColumnWidth(0) < 70: self.server_list.SetColumnWidth(0, 70) | |
492 self.server_list.SetColumnWidth(1, wx.LIST_AUTOSIZE) | 517 self.server_list.SetColumnWidth(1, wx.LIST_AUTOSIZE) |
518 if self.server_list.GetColumnWidth(1) < 70: self.server_list.SetColumnWidth(1, 70) | |
519 self.server_list.SetColumnWidth(2, wx.LIST_AUTOSIZE) | |
493 | 520 |
494 if self.serverNameSet == 0: | 521 if self.serverNameSet == 0: |
495 # Pointless to constantly set the address field to random | |
496 # server. This way, at least, if someone has their own local | |
497 # server it can now easily be connected with. Nor do we want | |
498 # to reset this every time as it would wipe any previously | |
499 # entered data or even the previously selected server data! | |
500 # Localhost should probably be used but some systems are ultra/lame | |
501 # broken about localhost use. | |
502 self.texts["address"].SetValue("127.0.0.1:6774") | 522 self.texts["address"].SetValue("127.0.0.1:6774") |
503 self.serverNameSet = 1 | 523 self.serverNameSet = 1 |
504 else: | 524 else: pass |
505 pass | |
506 | |
507 # Allow xml_dom to be collected | |
508 try: | |
509 xml_dom.unlink() | |
510 except: | |
511 pass | |
512 except Exception, e: | 525 except Exception, e: |
513 print "Server List not available." | 526 print "Server List not available." |
514 traceback.print_exc() | 527 traceback.print_exc() |
515 | 528 |
516 def failed_connection(self): | 529 def failed_connection(self): |
517 if(self.cur_server_index >= 0): | 530 if(self.cur_server_index >= 0): |
518 id = self.servers[self.cur_server_index].getAttribute('id') | 531 server_index = self.servers[self.cur_server_index] |
519 meta = self.servers[self.cur_server_index].getAttribute('meta') | 532 if(meta_server_lib.post_failed_connection(server_index.get('id'), |
520 address = self.servers[self.cur_server_index].getAttribute('address') | 533 meta=server_index.get('meta'), address=server_index.get('address'), |
521 port = self.servers[self.cur_server_index].getAttribute('port') | 534 port=server_index.get('port'))): |
522 # post_failed_connection will return a non-zero if the server | |
523 # was removed. If it was, refresh the display | |
524 if(meta_server_lib.post_failed_connection(id,meta=meta,address=address,port=port)): | |
525 self.refresh_server_list() | 535 self.refresh_server_list() |
526 | 536 |
527 def do_connect(self, address): | 537 def do_connect(self, address): |
528 chat = component.get('chat') | 538 chat = component.get('chat') |
529 chat.InfoPost("Locating server at " + address + "...") | 539 chat.InfoPost("Locating server at " + address + "...") |
530 if self.session.connect(address): | 540 if self.session.connect(address): self.frame.start_timer() |
531 self.frame.start_timer() | |
532 else: | 541 else: |
533 chat.SystemPost("Failed to connect to game server...") | 542 chat.SystemPost("Failed to connect to game server...") |
534 self.failed_connection() | 543 self.failed_connection() |
535 | 544 |
536 def do_join_lobby(self): | 545 def do_join_lobby(self): |
537 self.cur_room_index = 0 | 546 self.cur_room_index = 0 |
538 self.session.send_join_group("0","") | 547 self.session.send_join_group("0", "") |
539 self.set_lobbybutton(0); | 548 self.set_lobbybutton(0); |
540 | 549 |
541 def do_join_group(self): | 550 def do_join_group(self): |
542 if self.cur_room_index >= 0: | 551 if self.cur_room_index >= 0: |
543 if self.cur_room_index != 0: | 552 if self.cur_room_index != 0: self.set_lobbybutton(1); |
544 self.set_lobbybutton(1); | 553 else: self.set_lobbybutton(0); |
545 else: | |
546 self.set_lobbybutton(0); | |
547 group_id = str(self.room_list.GetItemData(self.cur_room_index)) | 554 group_id = str(self.room_list.GetItemData(self.cur_room_index)) |
548 group = self.session.get_group_info(group_id) | 555 group = self.session.get_group_info(group_id) |
549 pwd = "" | 556 pwd = "" |
550 if (group[2] == "True") or (group[2] == "1"): | 557 if (group[2] == "True") or (group[2] == "1"): |
551 pwd = self.password_manager.GetPassword("room", group_id) | 558 pwd = self.password_manager.GetPassword("room", group_id) |
552 #dlg = wx.TextEntryDialog(self,"Password?","Join Private Room") | 559 #dlg = wx.TextEntryDialog(self,"Password?","Join Private Room") |
553 #if dlg.ShowModal() == wx.ID_OK: | 560 #if dlg.ShowModal() == wx.ID_OK: |
554 # pwd = dlg.GetValue() | 561 # pwd = dlg.GetValue() |
555 #dlg.Destroy() | 562 #dlg.Destroy() |
556 else: | 563 else: pwd = "" |
557 pwd = "" | 564 if pwd != None: #pwd == None means the user clicked "Cancel" |
558 if pwd != None: #pwd==None means the user clicked "Cancel" | 565 self.session.send_join_group(group_id, pwd) |
559 self.session.send_join_group(group_id,pwd) | |
560 | 566 |
561 def do_create_group(self): | 567 def do_create_group(self): |
562 name = self.texts["room_name"].GetValue() | 568 name = self.texts["room_name"].GetValue() |
563 boot_pwd = self.texts["room_boot_pwd"].GetValue() | 569 boot_pwd = self.texts["room_boot_pwd"].GetValue() |
564 minversion = self.texts["room_min_version"].GetValue() | 570 minversion = self.texts["room_min_version"].GetValue() |
590 if loc > -1: | 596 if loc > -1: |
591 b = name[:loc] | 597 b = name[:loc] |
592 e = name[loc+1:] | 598 e = name[loc+1:] |
593 name = b + "'" + e | 599 name = b + "'" + e |
594 oldloc = loc+1 | 600 oldloc = loc+1 |
595 if self.buttons[GS_PWD].GetValue(): | 601 if self.buttons['gs_pwd'].GetValue(): pwd = self.texts["room_pwd"].GetValue() |
596 pwd = self.texts["room_pwd"].GetValue() | 602 else: pwd = "" |
597 else: | 603 if name == "": wx.MessageBox("Invalid Name","Error"); |
598 pwd = "" | |
599 if name == "": | |
600 wx.MessageBox("Invalid Name","Error"); | |
601 else: | 604 else: |
602 msg = "%s is creating room \'%s.\'" % (self.session.name, name) | 605 msg = "%s is creating room \'%s.\'" % (self.session.name, name) |
603 self.session.send( msg ) | 606 self.session.send(msg) |
604 self.session.send_create_group(name,pwd,boot_pwd,minversion) | 607 self.session.send_create_group(name, pwd, boot_pwd, minversion) |
605 self.set_lobbybutton(1); #enable the Lobby quickbutton | 608 self.set_lobbybutton(1); |
606 | 609 |
607 | 610 def on_size(self, evt): |
608 #--------------------------------------------------------- | |
609 # [START] Snowdog: Updated Game Server Window 12/02 | |
610 #--------------------------------------------------------- | |
611 | |
612 def on_size(self,evt): | |
613 # set column widths for room list | |
614 | |
615 | |
616 # set column widths for server list | |
617 pass | 611 pass |
618 | |
619 | |
620 | |
621 #--------------------------------------------------------- | |
622 # [END] Snowdog: Updated Game Server Window 12/02 | |
623 #--------------------------------------------------------- | |
624 | |
625 | 612 |
626 def colorize_group_list(self, groups): | 613 def colorize_group_list(self, groups): |
627 try: | 614 try: |
628 hex = orpg.tools.rgbhex.RGBHex() | 615 hex = orpg.tools.rgbhex.RGBHex() |
629 | |
630 for gr in groups: | 616 for gr in groups: |
631 item_list_location = self.room_list.FindItemData(-1,int(gr[0])) | 617 item_list_location = self.room_list.FindItemData(-1,int(gr[0])) |
632 if item_list_location != -1: | 618 if item_list_location != -1: |
633 item = self.room_list.GetItem(item_list_location) | 619 item = self.room_list.GetItem(item_list_location) |
634 if gr[0] == "0": | 620 if gr[0] == "0": r,g,b = hex.rgb_tuple(settings.get("RoomColor_Lobby")) |
635 | |
636 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Lobby")) | |
637 elif gr[3] <> "0": | 621 elif gr[3] <> "0": |
638 | |
639 if gr[2] == "True" or gr[2] == "1": | 622 if gr[2] == "True" or gr[2] == "1": |
640 | 623 r,g,b = hex.rgb_tuple(settings.get("RoomColor_Locked")) |
641 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Locked")) | 624 else: r,g,b = hex.rgb_tuple(settings.get("RoomColor_Active")) |
642 else: | 625 else: r,g,b = hex.rgb_tuple(settings.get("RoomColor_Empty")) |
643 | |
644 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Active")) | |
645 else: | |
646 | |
647 r,g,b = hex.rgb_tuple(settings.get_setting("RoomColor_Empty")) | |
648 | |
649 | |
650 color = wx.Colour(red=r,green=g,blue=b) | 626 color = wx.Colour(red=r,green=g,blue=b) |
651 item.SetTextColour(color) | 627 item.SetTextColour(color) |
652 self.room_list.SetItem(item) | 628 self.room_list.SetItem(item) |
653 except: | 629 except: traceback.print_exc() |
654 traceback.print_exc() |