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
b633f4c64aae Traipse Alpha 'OpenRPG' {100219-00}
sirebral
parents: 151
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
37 from orpg.orpgCore import component
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
38 from orpg.tools.validate import validate
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
39 from orpg.dirpath import dir_struct
124
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
40
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
41 import urllib, time, sys, traceback, re
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
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
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
44 from random import uniform
228
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
45 import urllib2
124
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
46 from urllib import urlopen, urlencode
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
52 def get_server_dom(data=None, path=None, string=False):
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
62 #recvdata = urllib2.Request(path, data)
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
63 response = urllib2.urlopen(path, data)
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
78 if string: return data
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
81 def post_server_data(name, realHostName=None):
124
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
85 "REMOTE_ADDR": realHostName })
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
86 # print "Letting meta server decide the hostname to list..."
124
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
89 "act":"new"})
228
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
90 path = component.get('settings').get('MetaServerBaseURL') #getMetaServerList()
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
91 etreeEl = get_server_dom(data, path)
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
98 #data = urlencode({"id":id,"act":"failed"});
96
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
99 #xml_dom = get_server_dom(data)
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
100 #ret_val = int(xml_dom.getAttribute("return"))
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
104 data = urlencode({"id":id,"act":"del"});
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
105 etreeEl = get_server_dom(data)
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
108 def byStartAttribute(first, second):
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
109 # This function is used to easily sort a list of nodes by their start time
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
110 # Ensure there is something to sort with for each
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
111 first_start = int(first.get('start')) or 0
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
116 def byNameAttribute(first, second):
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
119 first_name = first.get('name') or ''
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
125 def get_server_list(versions=None, sort_by="start"):
124
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
126 data = urlencode({"version":PROTOCOL_VERSION,"ports":"%"})
228
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
127 #all_metas = getMetaServers(versions, False) # get the list of metas
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
130 # so that the top one on the actual list is checked last
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
133 for meta in meta_list: # check all of the metas
96
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
137 try: xml_dom = get_server_dom(data, meta.get('url'))
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
138 except: bad_meta = 1; print "Trouble getting servers from " + meta.get('url') + "..."
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
139 if bad_meta: continue
124
8827271fbe1b Traipse Alpha 'OpenRPG' {091001-01}
sirebral
parents: 122
diff changeset
140 node_list = xml_dom.findall('server')
228
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
36919b8a3ef9 Traipse Alpha 'OpenRPG' {091031-00}
sirebral
parents: 119
diff changeset
143 if not n.get('name'): n.set('name','NO_NAME_GIVEN')
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
144 name = n.get('name')
122
36919b8a3ef9 Traipse Alpha 'OpenRPG' {091031-00}
sirebral
parents: 119
diff changeset
145 if not n.get('num_users'): n.set('num_users','N/A')
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
146 num_users = n.get('num_users')
122
36919b8a3ef9 Traipse Alpha 'OpenRPG' {091031-00}
sirebral
parents: 119
diff changeset
147 if not n.get('address'): n.set('address','NO_ADDRESS_GIVEN')
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
148 address = n.get('address')
122
36919b8a3ef9 Traipse Alpha 'OpenRPG' {091031-00}
sirebral
parents: 119
diff changeset
149 if not n.get('port'): n.set('port','6774')
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
150 port = n.get('port')
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
154 print end_point
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
155 print n
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
159 server_list = Element('servers')
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
160 sort_list = return_hash.values()
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
161 if sort_by == "start": sort_list.sort(byStartAttribute)
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
162 elif sort_by == "name": sort_list.sort(byNameAttribute)
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
163 for n in sort_list: server_list.append(n)
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
178 metaservers = xml_dom.findall('metaservers')
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
187 if META_DEBUG: print " Writing: "+str(meta.get('path'))
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
196
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
197 def getMetaServerList():
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
198 # get meta server URL
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
199 meta_list = fromstring("""
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
200 <metaservers>
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
201 <meta url="http://orpgmeta.appspot.com" versions="1 2" />
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
202 <meta url="http://traipsemeta.madmathlabs.info" versions="1 2" />
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
203 </metaservers>"""
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
204 )
0
4385a7d0efd1 Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff changeset
205 try:
228
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
206 component.get('validate').config_file("metaservers.xml","default_metaservers.xml")
96
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
207 component.get('validate').config_file("settings.xml","default_settings.xml")
228
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
208 setting = parse(dir_struct["user"]+"settings.xml")
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
209 tree = setting.getroot()
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
210 node_list = tree.getiterator("MetaServers")
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
211 if len(node_list) == 0:
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
212 component.get('frame').add_setting('Meta Servers')
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
213 setting = parse(dir_struct["user"]+"settings.xml")
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
214 metas = parse(dir_struct["user"]+'metaservers.xml').getroot()
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
215 else:
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
216 meta = node_list[0].get("value")
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
217 metas = parse(dir_struct["user"]+meta).getroot()
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
218 meta_list = metas.findall('meta')
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
219 return meta_list
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
220 except Exception,e: print e
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
223 """
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
224 Beginning of Class registerThread
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
225
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
226 A Class to Manage Registration with the Meta2
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
227 Create an instance and call it's start() method
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
228 if you want to be (and stay) registered. This class
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
229 will take care of registering and re-registering as
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
232 You may call register() yourself if you wish to change your
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
233 server's name. It will immediately update the Meta. There
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
234 is no need to unregister first.
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
235
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
236 Call unregister() when you no longer want to be registered.
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
237 This will result in the registerThread dying after
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
238 attempting to immediately remove itself from the Meta.
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
239
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
240 If you need to become registered again after that, you
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
241 must create a new instance of class registerThread. Don't
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
242 just try to call register() on the old, dead thread class.
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
246 """
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
247 Originally, I wrote this as a sub-class of wxThread, but
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
248 A) I couldn't get it to import right
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
249 B) I realized that I want this to be used in a server,
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
250 which I don't want needing wxWindows to run!
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
251
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
252 Because of this fact, there are some methods from wxThread
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
253 that I implemented to minimize changes to the code I had
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
254 just written, i.e. TestDeleteStatus() and Delete()
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
255 """
0
4385a7d0efd1 Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff changeset
256
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
257 def __init__(self, name=None, realHostName=None, num_users="0",
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
258 MetaPath=None, port=6774, register_callback=None):
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
259 Thread.__init__(self, name="registerThread")
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
260 self.rlock = RLock() # Re-entrant lock used to make this class thread safe
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
261 self.die_event = Event() # The main loop in run() will wait with timeout on this
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
262 self.name = name or 'Unnamed Server' # Name that the server want's displayed on the Meta
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
263 # But use Unnamed Server if for some crazy reason
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
264 # no name is passed to the constructor
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
275 self.register_callback = register_callback # set a method to call to report result of register
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
276 """
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
277 This thread will communicate with one and only one
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
278 Meta. If the Meta in ini.xml is changed after
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
279 instantiation, then this instance must be
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
280 unregistered and a new instance instantiated.
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
281
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
282 Also, if MetaPath is specified, then use that. Makes
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
283 it easier to have multiple registerThreads going to keep the server registered
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
284 on multiple (compatible) Metas.
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
285 """
228
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
286 if MetaPath == None: self.path = getMetaServerList() # Do this if no Meta specified
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
305 """
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
306 This method gets called by Thread implementation
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
307 when self.start() is called to begin the thread's
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
308 execution
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
309
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
310 We will basically enter a loop that continually
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
311 re-registers this server and sleeps Interval
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
312 minutes until the thread is ordered to die in place
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
313 """
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
323 if self.interval >= 3: # If the number of minutes is one or greater
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
326 self.interval = .5 # Otherwise, we probably experienced some kind
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
327 # of error from the Meta in register(). Sleep
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
339 """
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
340 This method can (I hope) be called from both within the thread
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
341 and from other threads. It will attempt to unregister this
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
342 server from the Meta database
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
343 When this is either accomplished or has been tried hard enough
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
344 (after which it just makes sense to let the Meta remove the
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
345 entry itself when we don't re-register using this id),
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
346 this method will either cause the thread to immediately die
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
347 (if called from this thread's context) or set the Destroy flag
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
348 (if called from the main thread), a positive test for which will cause
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
349 the code in Entry() to exit() when the thread wakes up and
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
350 checks TestDeleteStatus().
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
351 lock the critical section. The unlock will
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
352 automatically occur at the end of the function in the finally clause
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
363 for path in getMetaServerList():
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
364 try: # this POSTS the request and returns the result
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
365 etreeEl = get_server_dom(data, path.get('url'))
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
366 if etreeEl.get("errmsg") != None:
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
367 print "Error durring unregistration: " + etreeEl.get("errmsg")
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
368 except Exception, e:
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
369 if META_DEBUG: print "Problem talking to Meta. Will go ahead and die, letting Meta remove us."
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
378 try: xml_dom.unlink()
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
384 """
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
385 Designed to handle the registration, both new and
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
386 repeated.
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
387
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
388 It is intended to be called once every interval
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
391 lock the critical section. The unlock will
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
392 automatically occur at the end of the function in the finally clause
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
400 if name: self.name = name
228
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
401 if num_users != None:
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
402 try: self.num_users = len(num_users)
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
403 except: self.num_users = num_users; print num_users
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
404 else: self.num_users = 0
96
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
425 for path in getMetaServerList():
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
426 try: # this POSTS the request and returns the result
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
427 etreeEl = get_server_dom(data, path.get('url'))
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
428 except Exception, e:
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
429 if META_DEBUG: print "Problem talking to server. Setting interval for retry ..."
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
430 if META_DEBUG: print data
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
431 if META_DEBUG: print e
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
432 self.interval = 0
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
433 """
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
434 If we are in the registerThread thread, then setting interval to 0
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
435 will end up causing a retry in about 6 seconds (see self.run())
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
436 If we are in the main thread, then setting interval to 0 will do one
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
437 of two things:
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
438 1) Do the same as if we were in the registerThread
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
439 2) Cause the next, normally scheduled register() call to use the values
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
440 provided in this call.
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
441
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
442 Which case occurs depends on where the registerThread thread is when
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
443 the main thread calls register().
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
444 """
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
445 return 0 # indicates that it was okay to call, not that no errors occurred
96
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
450 print tostring(etreeEl)
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
451 if etreeEl.get("errmsg") != None:
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
455 """
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
456 No special handling is required. If the registration worked, id, cookie, and interval
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
457 can be stored and used for the next time.
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
458 If an error occurred, then the Meta will delete us and we need to re-register as
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
459 a new server. The way to indicate this is with a "0" id and "0" cookie sent to
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
460 the server during the next registration. Since that's what the server returns to
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
461 us on an error anyway, we just store them and the next registration will
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
462 automatically be set up as a new one.
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
463
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
464 Unless the server calls register() itself in the meantime. Of course, that's okay
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
465 too, because a success on THAT register() call will set up the next one to use
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
466 the issued id and cookie.
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
467
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
468 The interval is stored unconditionally for similar reasons. If there's an error,
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
469 the interval will be less than 1, and the main thread's while loop will reset it
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
470 to 6 seconds for the next retry.
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
471 Is it wrong to have a method where there's more comments than code? :)
65c1604e7949 Traipse Alpha 'OpenRPG' {090924-00}
sirebral
parents: 90
diff changeset
472 """
0
4385a7d0efd1 Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff changeset
473 try:
119
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
474 self.interval = int(etreeEl.get("interval"))
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
475 self.id = etreeEl.get("id")
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
476 self.cookie = etreeEl.get("cookie")
228
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
477 #if etreeEl.get("errmsg") == None: updateMetaCache(xml_dom)
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
24769389a7ba Traipse Alpha 'OpenRPG' {100612-01}
sirebral
parents: 195
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
484 try: xml_dom.unlink()
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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
9314d63c0941 Traipse Alpha 'OpenRPG' {091029-00}
sirebral
parents: 96
diff changeset
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 ################################################################################