Mercurial > traipse_dev
comparison orpg/networking/mplay_client.py @ 152:6081bdc2b8d5 beta
Traipse Beta 'OpenRPG' {091125-00}
Traipse is a distribution of OpenRPG that is designed to be easy to setup and go.
Traipse also makes it easy for developers to work on code without fear of
sacrifice. 'Ornery-Orc' continues the trend of 'Grumpy' and adds fixes to the
code. 'Ornery-Orc's main goal is to offer more advanced features and enhance the
productivity of the user.
Update Summary (Beta)
Added Bookmarks
Fix to Remote Admin Commands
Minor fix to text based Server
Fix to Pretty Print, from Core
Fix to Splitter Nodes not being created
Fix to massive amounts of images loading, from Core
Added 'boot' command to remote admin
Added confirmation window for sent nodes
Minor changes to allow for portability to an OpenSUSE linux OS
Miniatures Layer pop up box allows users to turn off Mini labels, from FlexiRPG
Zoom Mouse plugin added
Images added to Plugin UI
Switching to Element Tree
Map efficiency, from FlexiRPG
Added Status Bar to Update Manager
default_manifest.xml renamed to default_upmana.xml
Cleaner clode for saved repositories
New TrueDebug Class in orpg_log (See documentation for usage)
Mercurial's hgweb folder is ported to upmana
Pretty important update that can help remove thousands of dead children from your
gametree.
Children, <forms />, <group_atts />, <horizontal />, <cols />, <rows />, <height
/>, etc... are all tags now. Check your gametree and look for dead children!!
New Gametree Recursion method, mapping, and context sensitivity. !Infinite Loops
return error instead of freezing the software!
New Syntax added for custom PC sheets
Tip of the Day added, from Core and community
Fixed Whiteboard ID to prevent random line or text deleting. Modified ID's to
prevent non updated clients from ruining the fix.
author | sirebral |
---|---|
date | Wed, 25 Nov 2009 06:16:35 -0600 |
parents | 6cc9dd8ebcd4 |
children | dcae32e219f1 |
comparison
equal
deleted
inserted
replaced
150:6c5f46a5924b | 152:6081bdc2b8d5 |
---|---|
82 GROUP_UPDATE = 4 | 82 GROUP_UPDATE = 4 |
83 STATUS_SET_URL = 1 | 83 STATUS_SET_URL = 1 |
84 | 84 |
85 def parseXml(data): | 85 def parseXml(data): |
86 "parse and return doc" | 86 "parse and return doc" |
87 #print data | |
88 doc = xml.parseXml(data) | 87 doc = xml.parseXml(data) |
89 doc.normalize() | 88 doc.normalize() |
90 return doc | 89 return doc |
91 | 90 |
92 def myescape(data): | 91 def myescape(data): |
266 thread.start_new_thread( self.sendThread,(0,)) | 265 thread.start_new_thread( self.sendThread,(0,)) |
267 thread.start_new_thread( self.recvThread,(0,)) | 266 thread.start_new_thread( self.recvThread,(0,)) |
268 self.startedEvent.set() | 267 self.startedEvent.set() |
269 | 268 |
270 def disconnect(self): | 269 def disconnect(self): |
271 debug() | |
272 self.set_status(MPLAY_DISCONNECTING) | 270 self.set_status(MPLAY_DISCONNECTING) |
273 self.log_msg("client stub " + self.ip +" disconnecting...") | 271 self.log_msg("client stub " + self.ip +" disconnecting...") |
274 self.log_msg("closing sockets...") | 272 self.log_msg("closing sockets...") |
275 try: self.sock.shutdown(2) | 273 try: self.sock.shutdown(2) |
276 except Exception, e: | 274 except Exception, e: |
289 self.role = role | 287 self.role = role |
290 | 288 |
291 def use_roles(self): | 289 def use_roles(self): |
292 if self.useroles: return 1 | 290 if self.useroles: return 1 |
293 else: return 0 | 291 else: return 0 |
292 | |
294 def update_self_from_player(self, player): | 293 def update_self_from_player(self, player): |
295 try: (self.name, self.ip, self.id, | 294 try: (self.name, self.ip, self.id, |
296 self.text_status, self.version, | 295 self.text_status, self.version, |
297 self.protocol_version, self.client_string, role) = player | 296 self.protocol_version, self.client_string, role) = player |
298 except Exception, e: | 297 except Exception, e: |
313 el.set('version', self.version) | 312 el.set('version', self.version) |
314 el.set('protocol_version', self.protocol_version) | 313 el.set('protocol_version', self.protocol_version) |
315 el.set('client_string', self.client_string) | 314 el.set('client_string', self.client_string) |
316 el.set('useCompression', str(self.useCompression)) | 315 el.set('useCompression', str(self.useCompression)) |
317 cmpType = 'None' | 316 cmpType = 'None' |
318 if cmpBZ2 and (self.compressionType == 'Undefined' or self.compressionType == bz2): | 317 if cmpBZ2 and (self.compressionType == 'Undefined' or self.compressionType == bz2): cmpType = 'bz2' |
319 cmpType = 'bz2' | 318 elif cmpZLIB and (self.compressionType == 'Undefined' or self.compressionType == zlib): cmpType = 'zlib' |
320 elif cmpZLIB and (self.compressionType == 'Undefined' or self.compressionType == zlib): | |
321 cmpType = 'zlib' | |
322 el.set('cmpType', cmpType) | 319 el.set('cmpType', cmpType) |
323 return tostring(el) | 320 return tostring(el) |
324 | 321 |
325 def log_msg(self,msg): | 322 def log_msg(self,msg): |
326 debug(msg, log=False) | |
327 if self.log_console: self.log_console(msg) | 323 if self.log_console: self.log_console(msg) |
328 | 324 |
329 def get_status(self): | 325 def get_status(self): |
330 self.statLock.acquire() | 326 self.statLock.acquire() |
331 status = self.status | 327 status = self.status |
522 | 518 |
523 def boot_player(self,id,boot_pwd = ""): | 519 def boot_player(self,id,boot_pwd = ""): |
524 el = Element('boot') | 520 el = Element('boot') |
525 el.set('boot_pwd', boot_pwd) | 521 el.set('boot_pwd', boot_pwd) |
526 self.send(tostring(el), id) | 522 self.send(tostring(el), id) |
527 | |
528 #--------------------------------------------------------- | |
529 # [START] Snowdog Password/Room Name altering code 12/02 | |
530 #--------------------------------------------------------- | |
531 | 523 |
532 def set_room_pass(self, npwd, pwd=""): | 524 def set_room_pass(self, npwd, pwd=""): |
533 el = Element('alter') | 525 el = Element('alter') |
534 el.set('key', 'pwd') | 526 el.set('key', 'pwd') |
535 el.set('val', npwd) | 527 el.set('val', npwd) |
574 el.set('plr', self.id) | 566 el.set('plr', self.id) |
575 el.set('gid', self.group_id) | 567 el.set('gid', self.group_id) |
576 self.outbox.put(tostring(el)) | 568 self.outbox.put(tostring(el)) |
577 self.update() | 569 self.update() |
578 | 570 |
579 #--------------------------------------------------------- | |
580 # [END] Snowdog Password/Room Name altering code 12/02 | |
581 #--------------------------------------------------------- | |
582 | |
583 def display_roles(self): | 571 def display_roles(self): |
584 el = Element('role') | 572 el = Element('role') |
585 el.set('action', 'display') | 573 el.set('action', 'display') |
586 el.set('player', self.id) | 574 el.set('player', self.id) |
587 el.set('group_id', self.group_id) | 575 el.set('group_id', self.group_id) |
679 try: el = fromstring(data) | 667 try: el = fromstring(data) |
680 except ExpatError: | 668 except ExpatError: |
681 end = data.find(">") | 669 end = data.find(">") |
682 head = data[:end+1] | 670 head = data[:end+1] |
683 msg = data[end+1:] | 671 msg = data[end+1:] |
684 ### Alpha ### | 672 ### This if statement should help close invalid messages. ### |
685 if head[end:] != '/': | 673 if head[end:] != '/': |
686 if head[end:] != '>': head = head[:end] + '/>' | 674 if head[end:] != '>': head = head[:end] + '/>' |
687 ### This if statement should help close invalid messages. Since it needs fixing, use the try except message for now. | |
688 try: el = fromstring(head) | 675 try: el = fromstring(head) |
689 except: el = fromstring(head[:end] +'/>') | 676 except: el = fromstring(head[:end] +'/>') |
677 ########### | |
690 | 678 |
691 try: | 679 try: |
692 el1 = fromstring(msg) | 680 el1 = fromstring(msg) |
693 el.append(el1) | 681 el.append(el1) |
694 except ExpatError: | 682 except ExpatError: |
695 el.text = msg | 683 el.text = msg |
696 #logger.general("Bad Message: \n" + data) | |
697 id = el.get('from') or el.get('id') | 684 id = el.get('from') or el.get('id') |
698 if el.tag in self.msg_handlers: self.msg_handlers[el.tag](id, data, el) | 685 if el.tag in self.msg_handlers: self.msg_handlers[el.tag](id, data, el) |
699 | 686 |
700 def on_sound(self, id, data, etreeEl): | 687 def on_sound(self, id, data, etreeEl): |
701 (ignore_id,ignore_name) = self.get_ignore_list() | 688 (ignore_id,ignore_name) = self.get_ignore_list() |
716 # None get's interpreted in on_receive as the sys admin. | 703 # None get's interpreted in on_receive as the sys admin. |
717 # Doing it this way makes it harder to impersonate the admin | 704 # Doing it this way makes it harder to impersonate the admin |
718 elif self.is_valid_id(id): self.on_receive(msg, self.players[id]) | 705 elif self.is_valid_id(id): self.on_receive(msg, self.players[id]) |
719 | 706 |
720 def on_ping(self, id, msg, etreeEl): | 707 def on_ping(self, id, msg, etreeEl): |
721 #a REAL ping time implementation by Snowdog 8/03 | 708 # A REAL ping time implementation by Snowdog 8/03 |
722 # recieves special server <ping time="###" /> command | 709 # recieves special server <ping time="###" /> command |
723 # where ### is a returning time from the clients ping command | 710 # where ### is a returning time from the clients ping command |
724 #get current time, pull old time from object and compare them | 711 # get current time, pull old time from object and compare them |
725 # the difference is the latency between server and client * 2 | 712 # the difference is the latency between server and client * 2 |
726 ct = time.clock() | 713 ct = time.clock() |
727 ot = etreeEl.get("time") | 714 ot = etreeEl.get("time") |
728 latency = float(float(ct) - float(ot)) | 715 latency = float(float(ct) - float(ot)) |
729 latency = int(latency * 10000.0) | 716 latency = int(latency * 10000.0) |
770 elif act == "group": | 757 elif act == "group": |
771 self.group_id = etreeEl.get('group_id') | 758 self.group_id = etreeEl.get('group_id') |
772 self.clear_players() | 759 self.clear_players() |
773 self.on_mplay_event(mplay_event(MPLAY_GROUP_CHANGE, self.groups[self.group_id])) | 760 self.on_mplay_event(mplay_event(MPLAY_GROUP_CHANGE, self.groups[self.group_id])) |
774 self.players[self.id] = self.get_my_info() | 761 self.players[self.id] = self.get_my_info() |
775 #(self.name,self.ip,self.id,self.text_status) | |
776 self.on_player_event(mplay_event(PLAYER_NEW, self.players[self.id])) | 762 self.on_player_event(mplay_event(PLAYER_NEW, self.players[self.id])) |
777 elif act == "failed": | 763 elif act == "failed": |
778 self.on_mplay_event(mplay_event(MPLAY_GROUP_CHANGE_F)) | 764 self.on_mplay_event(mplay_event(MPLAY_GROUP_CHANGE_F)) |
779 elif act == "del": | 765 elif act == "del": |
780 self.on_player_event(mplay_event(PLAYER_DEL, self.players[id])) | 766 self.on_player_event(mplay_event(PLAYER_DEL, self.players[id])) |