Mercurial > traipse_dev
annotate orpg/networking/meta_server_lib.py @ 228:24769389a7ba alpha
Traipse Alpha 'OpenRPG' {100612-01}
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 (Preparing to close updates)
New Features:
New to Map, can re-order Grid, Miniatures, and Whiteboard layer draw order
Fixes:
Fix to InterParse that was causing an Infernal Loop with Namespace Internal
Fix to XML data, removed old Minidom and switched to Element Tree
Fix to Server that was causing eternal attempt to find a Server ID, in Register Rooms thread
Fix to metaservers.xml file not being created
author | sirebral |
---|---|
date | Sat, 12 Jun 2010 04:38:29 -0500 |
parents | b633f4c64aae |
children | 2e2281ed40a9 |
rev | line source |
---|---|
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
1 #!/usr/bin/python2.1 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
2 # Copyright (C) 2000-2001 The OpenRPG Project |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
3 # |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
4 # openrpg-dev@lists.sourceforge.net |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
5 # |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
6 # This program is free software; you can redistribute it and/or modify |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
7 # it under the terms of the GNU General Public License as published by |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
8 # the Free Software Foundation; either version 2 of the License, or |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
9 # (at your option) any later version. |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
10 # |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
11 # This program is distributed in the hope that it will be useful, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
14 # GNU General Public License for more details. |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
15 # |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
16 # You should have received a copy of the GNU General Public License |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
17 # along with this program; if not, write to the Free Software |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
18 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
19 # -- |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
20 # |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
21 # File: meta_server_lib.py |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
22 # Author: Chris Davis |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
23 # Maintainer: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
24 # Version: |
195 | 25 # $Id: meta_server_lib.py,v Traipse 'Ornery-Orc' prof.ebral Exp $ |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
26 # |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
27 # Description: A collection of functions to communicate with the meta server. |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
28 # |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
29 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
30 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
31 #added debug flag for meta messages to cut console server spam --Snowdog |
228 | 32 META_DEBUG = False |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
33 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
34 __version__ = "$Id: meta_server_lib.py,v 1.40 2007/04/04 01:18:42 digitalxero Exp $" |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
35 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
36 from orpg.orpg_version import PROTOCOL_VERSION |
96 | 37 from orpg.orpgCore import component |
38 from orpg.tools.validate import validate | |
39 from orpg.dirpath import dir_struct | |
124 | 40 |
41 import urllib, time, sys, traceback, re | |
42 | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
43 from threading import * |
124 | 44 from random import uniform |
228 | 45 import urllib2 |
124 | 46 from urllib import urlopen, urlencode |
47 from orpg.tools.orpg_log import debug | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
48 |
228 | 49 from xml.etree.ElementTree import Element, fromstring, parse, tostring |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
50 metacache_lock = RLock() |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
51 |
228 | 52 def get_server_dom(data=None, path=None, string=False): |
53 if path[len(path)-1] != "/": path += '/' | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
54 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
55 # POST the data |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
56 if META_DEBUG: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
57 print |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
58 print "Sending the following POST info to Meta at " + path + ":" |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
59 print "==========================================" |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
60 print data |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
61 print |
228 | 62 #recvdata = urllib2.Request(path, data) |
63 response = urllib2.urlopen(path, data) | |
64 data = response.read() | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
65 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
66 # Remove any leading or trailing data. This can happen on some satellite connections |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
67 p = re.compile('(<servers>.*?</servers>)',re.DOTALL|re.IGNORECASE) |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
68 mo = p.search(data) |
96 | 69 if mo: data = mo.group(0) |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
70 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
71 if META_DEBUG: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
72 print |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
73 print "Got this string from the Meta at " + path + ":" |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
74 print "===============================================" |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
75 print data |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
76 print |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
77 # build dom |
228 | 78 if string: return data |
79 else: return fromstring(data) | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
80 |
119 | 81 def post_server_data(name, realHostName=None): |
124 | 82 if realHostName: data = urlencode({"server_data[name]":name, |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
83 "server_data[version]":PROTOCOL_VERSION, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
84 "act":"new", |
119 | 85 "REMOTE_ADDR": realHostName }) |
86 # print "Letting meta server decide the hostname to list..." | |
124 | 87 else: data = urlencode({"server_data[name]":name, |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
88 "server_data[version]":PROTOCOL_VERSION, |
119 | 89 "act":"new"}) |
228 | 90 path = component.get('settings').get('MetaServerBaseURL') #getMetaServerList() |
119 | 91 etreeEl = get_server_dom(data, path) |
92 return int(etreeEl.get('id')) | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
93 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
94 def post_failed_connection(id,meta=None,address=None,port=None): |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
95 # For now, turning this off. This needs to be re-vamped for |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
96 # handling multiple Metas. |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
97 return 0 |
124 | 98 #data = urlencode({"id":id,"act":"failed"}); |
96 | 99 #xml_dom = get_server_dom(data) |
100 #ret_val = int(xml_dom.getAttribute("return")) | |
101 #return ret_val | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
102 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
103 def remove_server(id): |
124 | 104 data = urlencode({"id":id,"act":"del"}); |
119 | 105 etreeEl = get_server_dom(data) |
106 return int(etreeEl.get("return")) | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
107 |
119 | 108 def byStartAttribute(first, second): |
109 # This function is used to easily sort a list of nodes by their start time | |
110 # Ensure there is something to sort with for each | |
111 first_start = int(first.get('start')) or 0 | |
112 second_start = int(second.get('start')) or 0 | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
113 # Return the result of the cmp function on the two strings |
119 | 114 return cmp(first_start, second_start) |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
115 |
119 | 116 def byNameAttribute(first, second): |
117 # This function is used to easily sort a list of nodes by their name attribute | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
118 # Ensure there is something to sort with for each |
119 | 119 first_name = first.get('name') or '' |
120 second_name = second.get('name') or '' | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
121 # Return the result of the cmp function on the two strings |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
122 return cmp(first_name,second_name) |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
123 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
124 |
228 | 125 def get_server_list(versions=None, sort_by="start"): |
124 | 126 data = urlencode({"version":PROTOCOL_VERSION,"ports":"%"}) |
228 | 127 #all_metas = getMetaServers(versions, False) # get the list of metas |
128 meta_list = getMetaServerList() | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
129 #all_metas.reverse() # The last one checked will take precedence, so reverse the order |
119 | 130 # so that the top one on the actual list is checked last |
131 return_hash = {} # this will end up with an amalgamated list of servers | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
132 |
228 | 133 for meta in meta_list: # check all of the metas |
96 | 134 #get the server's xml from the current meta |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
135 bad_meta = 0 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
136 #print "Getting server list from " + meta + "..." |
228 | 137 try: xml_dom = get_server_dom(data, meta.get('url')) |
138 except: bad_meta = 1; print "Trouble getting servers from " + meta.get('url') + "..." | |
119 | 139 if bad_meta: continue |
124 | 140 node_list = xml_dom.findall('server') |
228 | 141 if len(node_list): |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
142 for n in node_list: |
122 | 143 if not n.get('name'): n.set('name','NO_NAME_GIVEN') |
119 | 144 name = n.get('name') |
122 | 145 if not n.get('num_users'): n.set('num_users','N/A') |
119 | 146 num_users = n.get('num_users') |
122 | 147 if not n.get('address'): n.set('address','NO_ADDRESS_GIVEN') |
119 | 148 address = n.get('address') |
122 | 149 if not n.get('port'): n.set('port','6774') |
119 | 150 port = n.get('port') |
151 n.set('meta',meta) | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
152 end_point = str(address) + ":" + str(port) |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
153 if return_hash.has_key(end_point): |
228 | 154 print end_point |
155 print n | |
156 | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
157 if META_DEBUG: print "Replacing duplicate server entry at " + end_point |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
158 return_hash[end_point] = n |
119 | 159 server_list = Element('servers') |
160 sort_list = return_hash.values() | |
161 if sort_by == "start": sort_list.sort(byStartAttribute) | |
162 elif sort_by == "name": sort_list.sort(byNameAttribute) | |
163 for n in sort_list: server_list.append(n) | |
164 return server_list | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
165 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
166 ## List Format: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
167 ## <servers> |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
168 ## <server address=? id=? name=? failed_count=? > |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
169 ## </servers> |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
170 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
171 def updateMetaCache(xml_dom): |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
172 try: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
173 if META_DEBUG: print "Updating Meta Server Cache" |
119 | 174 metaservers = xml_dom.findall('metaservers') # pull out the metaservers bit |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
175 if len(metaservers) == 0: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
176 cmetalist = getRawMetaList() |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
177 xml_dom = get_server_dom(cmetalist[0]) |
119 | 178 metaservers = xml_dom.findall('metaservers') |
179 authoritative = metaservers[0].get('auth') | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
180 if META_DEBUG: print " Authoritive Meta: "+str(authoritative) |
119 | 181 metas = metaservers[0].findall("meta") # get the list of metas |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
182 if META_DEBUG: print " Meta List ("+str(len(metas))+" servers)" |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
183 try: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
184 metacache_lock.acquire() |
96 | 185 ini = open(dir_struct["user"]+"metaservers.cache","w") |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
186 for meta in metas: |
119 | 187 if META_DEBUG: print " Writing: "+str(meta.get('path')) |
188 ini.write(str(meta.get('path')) + " " + str(meta.get('versions')) + "\n") | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
189 ini.close() |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
190 finally: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
191 metacache_lock.release() |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
192 except Exception, e: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
193 if META_DEBUG: traceback.print_exc() |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
194 print "Meta Server Lib: UpdateMetaCache(): " + str(e) |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
195 |
228 | 196 |
197 def getMetaServerList(): | |
198 # get meta server URL | |
199 meta_list = fromstring(""" | |
200 <metaservers> | |
201 <meta url="http://orpgmeta.appspot.com" versions="1 2" /> | |
202 <meta url="http://traipsemeta.madmathlabs.info" versions="1 2" /> | |
203 </metaservers>""" | |
204 ) | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
205 try: |
228 | 206 component.get('validate').config_file("metaservers.xml","default_metaservers.xml") |
96 | 207 component.get('validate').config_file("settings.xml","default_settings.xml") |
228 | 208 setting = parse(dir_struct["user"]+"settings.xml") |
209 tree = setting.getroot() | |
210 node_list = tree.getiterator("MetaServers") | |
211 if len(node_list) == 0: | |
212 component.get('frame').add_setting('Meta Servers') | |
213 setting = parse(dir_struct["user"]+"settings.xml") | |
214 metas = parse(dir_struct["user"]+'metaservers.xml').getroot() | |
215 else: | |
216 meta = node_list[0].get("value") | |
217 metas = parse(dir_struct["user"]+meta).getroot() | |
218 meta_list = metas.findall('meta') | |
219 return meta_list | |
220 except Exception,e: print e | |
221 return meta_list | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
222 |
96 | 223 """ |
224 Beginning of Class registerThread | |
225 | |
226 A Class to Manage Registration with the Meta2 | |
227 Create an instance and call it's start() method | |
228 if you want to be (and stay) registered. This class | |
229 will take care of registering and re-registering as | |
230 often as necessary to stay in the Meta list. | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
231 |
96 | 232 You may call register() yourself if you wish to change your |
233 server's name. It will immediately update the Meta. There | |
234 is no need to unregister first. | |
235 | |
236 Call unregister() when you no longer want to be registered. | |
237 This will result in the registerThread dying after | |
238 attempting to immediately remove itself from the Meta. | |
239 | |
240 If you need to become registered again after that, you | |
241 must create a new instance of class registerThread. Don't | |
242 just try to call register() on the old, dead thread class. | |
243 """ | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
244 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
245 class registerThread(Thread): |
96 | 246 """ |
247 Originally, I wrote this as a sub-class of wxThread, but | |
248 A) I couldn't get it to import right | |
249 B) I realized that I want this to be used in a server, | |
250 which I don't want needing wxWindows to run! | |
251 | |
252 Because of this fact, there are some methods from wxThread | |
253 that I implemented to minimize changes to the code I had | |
254 just written, i.e. TestDeleteStatus() and Delete() | |
255 """ | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
256 |
119 | 257 def __init__(self, name=None, realHostName=None, num_users="0", |
258 MetaPath=None, port=6774, register_callback=None): | |
259 Thread.__init__(self, name="registerThread") | |
260 self.rlock = RLock() # Re-entrant lock used to make this class thread safe | |
261 self.die_event = Event() # The main loop in run() will wait with timeout on this | |
262 self.name = name or 'Unnamed Server' # Name that the server want's displayed on the Meta | |
263 # But use Unnamed Server if for some crazy reason | |
264 # no name is passed to the constructor | |
265 self.num_users = num_users # the number of users currently on this server | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
266 self.realHostName = realHostName # Name to advertise for connection |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
267 self.id = "0" # id returned from Meta. Defaults to "0", which |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
268 # indicates a new registration. |
119 | 269 self.cookie = "0" # cookie returned from Meta. Defaults to "0", which |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
270 # indicates a new registration. |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
271 self.interval = 0 # interval returned from Meta. Is how often to |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
272 # re-register, in minutes. |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
273 self.destroy = 0 # Used to flag that this thread should die |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
274 self.port = str(port) |
96 | 275 self.register_callback = register_callback # set a method to call to report result of register |
276 """ | |
277 This thread will communicate with one and only one | |
278 Meta. If the Meta in ini.xml is changed after | |
279 instantiation, then this instance must be | |
280 unregistered and a new instance instantiated. | |
281 | |
282 Also, if MetaPath is specified, then use that. Makes | |
283 it easier to have multiple registerThreads going to keep the server registered | |
284 on multiple (compatible) Metas. | |
285 """ | |
228 | 286 if MetaPath == None: self.path = getMetaServerList() # Do this if no Meta specified |
119 | 287 else: self.path = MetaPath |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
288 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
289 def getIdAndCookie(self): |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
290 return self.id, self.cookie |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
291 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
292 def TestDeleteStatus(self): |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
293 try: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
294 self.rlock.acquire() |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
295 return self.die_event.isSet() |
119 | 296 finally: self.rlock.release() |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
297 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
298 def Delete(self): |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
299 try: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
300 self.rlock.acquire() |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
301 self.die_event.set() |
119 | 302 finally: self.rlock.release() |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
303 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
304 def run(self): |
96 | 305 """ |
306 This method gets called by Thread implementation | |
307 when self.start() is called to begin the thread's | |
308 execution | |
309 | |
310 We will basically enter a loop that continually | |
311 re-registers this server and sleeps Interval | |
312 minutes until the thread is ordered to die in place | |
313 """ | |
119 | 314 while(not self.TestDeleteStatus()): # Loop while until told to die |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
315 # Otherwise, call thread safe register(). |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
316 self.register(self.name, self.realHostName, self.num_users) |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
317 if META_DEBUG: print "Sent Registration Data" |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
318 # register() will end up setting the state variables |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
319 # for us, including self.interval. |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
320 try: |
119 | 321 self.rlock.acquire() # Serialize access to this state information |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
322 |
119 | 323 if self.interval >= 3: # If the number of minutes is one or greater |
324 self.interval -= 1 # wake up with 30 seconds left to re-register | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
325 else: |
119 | 326 self.interval = .5 # Otherwise, we probably experienced some kind |
327 # of error from the Meta in register(). Sleep | |
328 # for 6 seconds and start from scratch. | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
329 |
119 | 330 finally: self.rlock.release() # no matter what, release the lock |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
331 # Wait interval minutes for a command to die |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
332 die_signal = self.die_event.wait(self.interval*60) |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
333 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
334 # If we get past the while loop, it's because we've been asked to die, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
335 # so just let run() end. Once this occurs, the thread is dead and |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
336 # calls to Thread.isAlive() return False. |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
337 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
338 def unregister(self): |
96 | 339 """ |
340 This method can (I hope) be called from both within the thread | |
341 and from other threads. It will attempt to unregister this | |
342 server from the Meta database | |
343 When this is either accomplished or has been tried hard enough | |
344 (after which it just makes sense to let the Meta remove the | |
345 entry itself when we don't re-register using this id), | |
346 this method will either cause the thread to immediately die | |
347 (if called from this thread's context) or set the Destroy flag | |
348 (if called from the main thread), a positive test for which will cause | |
349 the code in Entry() to exit() when the thread wakes up and | |
350 checks TestDeleteStatus(). | |
351 lock the critical section. The unlock will | |
352 automatically occur at the end of the function in the finally clause | |
353 """ | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
354 try: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
355 self.rlock.acquire() |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
356 if not self.isAlive(): # check to see if this thread is dead |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
357 return 1 # If so, return an error result |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
358 # Do the actual unregistering here |
228 | 359 data = urlencode( { "server_data[id]":self.id, |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
360 "server_data[cookie]":self.cookie, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
361 "server_data[version]":PROTOCOL_VERSION, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
362 "act":"unregister"} ) |
228 | 363 for path in getMetaServerList(): |
364 try: # this POSTS the request and returns the result | |
365 etreeEl = get_server_dom(data, path.get('url')) | |
366 if etreeEl.get("errmsg") != None: | |
367 print "Error durring unregistration: " + etreeEl.get("errmsg") | |
368 except Exception, e: | |
369 if META_DEBUG: print "Problem talking to Meta. Will go ahead and die, letting Meta remove us." | |
370 if META_DEBUG: print e | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
371 # If there's an error, echo it to the console |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
372 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
373 # No special handling is required. If the de-registration worked we're done. If |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
374 # not, then it's because we've already been removed or have a bad cookie. Either |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
375 # way, we can't do anything else, so die. |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
376 self.Delete() # This will cause the registerThread to die in register() |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
377 # prep xml_dom for garbage collection |
96 | 378 try: xml_dom.unlink() |
379 except: pass | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
380 return 0 |
96 | 381 finally: self.rlock.release() |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
382 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
383 def register(self, name=None, realHostName=None, num_users=None): |
96 | 384 """ |
385 Designed to handle the registration, both new and | |
386 repeated. | |
387 | |
388 It is intended to be called once every interval | |
389 (or interval - delta) minutes. | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
390 |
96 | 391 lock the critical section. The unlock will |
392 automatically occur at the end of the function in the finally clause | |
393 """ | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
394 try: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
395 self.rlock.acquire() |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
396 if not self.isAlive(): # check to see if this thread is dead |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
397 return 1 # If so, return an error result |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
398 |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
399 # Set the server's attibutes, if specified. |
96 | 400 if name: self.name = name |
228 | 401 if num_users != None: |
402 try: self.num_users = len(num_users) | |
403 except: self.num_users = num_users; print num_users | |
404 else: self.num_users = 0 | |
96 | 405 if realHostName: self.realHostName = realHostName |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
406 # build POST data |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
407 if self.realHostName: |
228 | 408 data = urlencode( { "server_data[id]":self.id, |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
409 "server_data[cookie]":self.cookie, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
410 "server_data[name]":self.name, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
411 "server_data[port]":self.port, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
412 "server_data[version]":PROTOCOL_VERSION, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
413 "server_data[num_users]":self.num_users, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
414 "act":"register", |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
415 "server_data[address]": self.realHostName } ) |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
416 else: |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
417 if META_DEBUG: print "Letting meta server decide the hostname to list..." |
228 | 418 data = urlencode( { "server_data[id]":self.id, |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
419 "server_data[cookie]":self.cookie, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
420 "server_data[name]":self.name, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
421 "server_data[port]":self.port, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
422 "server_data[version]":PROTOCOL_VERSION, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
423 "server_data[num_users]":self.num_users, |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
424 "act":"register"} ) |
228 | 425 for path in getMetaServerList(): |
426 try: # this POSTS the request and returns the result | |
427 etreeEl = get_server_dom(data, path.get('url')) | |
428 except Exception, e: | |
429 if META_DEBUG: print "Problem talking to server. Setting interval for retry ..." | |
430 if META_DEBUG: print data | |
431 if META_DEBUG: print e | |
432 self.interval = 0 | |
433 """ | |
434 If we are in the registerThread thread, then setting interval to 0 | |
435 will end up causing a retry in about 6 seconds (see self.run()) | |
436 If we are in the main thread, then setting interval to 0 will do one | |
437 of two things: | |
438 1) Do the same as if we were in the registerThread | |
439 2) Cause the next, normally scheduled register() call to use the values | |
440 provided in this call. | |
441 | |
442 Which case occurs depends on where the registerThread thread is when | |
443 the main thread calls register(). | |
444 """ | |
445 return 0 # indicates that it was okay to call, not that no errors occurred | |
96 | 446 |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
447 # If there is a DOM returned .... |
228 | 448 if etreeEl != None: |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
449 # If there's an error, echo it to the console |
228 | 450 print tostring(etreeEl) |
451 if etreeEl.get("errmsg") != None: | |
119 | 452 print "Error durring registration: " + etreeEl.get("errmsg") |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
453 if META_DEBUG: print data |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
454 if META_DEBUG: print |
96 | 455 """ |
456 No special handling is required. If the registration worked, id, cookie, and interval | |
457 can be stored and used for the next time. | |
458 If an error occurred, then the Meta will delete us and we need to re-register as | |
459 a new server. The way to indicate this is with a "0" id and "0" cookie sent to | |
460 the server during the next registration. Since that's what the server returns to | |
461 us on an error anyway, we just store them and the next registration will | |
462 automatically be set up as a new one. | |
463 | |
464 Unless the server calls register() itself in the meantime. Of course, that's okay | |
465 too, because a success on THAT register() call will set up the next one to use | |
466 the issued id and cookie. | |
467 | |
468 The interval is stored unconditionally for similar reasons. If there's an error, | |
469 the interval will be less than 1, and the main thread's while loop will reset it | |
470 to 6 seconds for the next retry. | |
471 Is it wrong to have a method where there's more comments than code? :) | |
472 """ | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
473 try: |
119 | 474 self.interval = int(etreeEl.get("interval")) |
475 self.id = etreeEl.get("id") | |
476 self.cookie = etreeEl.get("cookie") | |
228 | 477 #if etreeEl.get("errmsg") == None: updateMetaCache(xml_dom) |
478 except Exception, e: | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
479 if META_DEBUG: print |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
480 if META_DEBUG: print "OOPS! Is the Meta okay? It should be returning an id, cookie, and interval." |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
481 if META_DEBUG: print "Check to see what it really returned.\n" |
228 | 482 if META_DEBUG: print e |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
483 # Let xml_dom get garbage collected |
119 | 484 try: xml_dom.unlink() |
485 except: pass | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
486 else: # else if no DOM is returned from get_server_dom() |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
487 print "Error - no DOM constructed from Meta message!" |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
488 return 0 # Let caller know it was okay to call us |
119 | 489 finally: self.rlock.release() |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
490 # End of class registerThread |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
491 ################################################################################ |