Changeset 118

Show
Ignore:
Timestamp:
10/15/07 18:32:33 (3 years ago)
Author:
elghinn
Message:

plein de bugs en moins \o/

Location:
adventure
Files:
1 added
5 modified

Legend:

Unmodified
Added
Removed
  • adventure/adventuremuc.py

    r116 r118  
    22# -*- coding: utf-8 -*- 
    33 
    4 from xmpp import Component, JID, NS_COMPONENT_ACCEPT 
    54from sys import argv 
    65from world import World 
     6from xmpp import Component, JID, NS_COMPONENT_ACCEPT 
     7from xmpp_error import Error 
    78 
    89class AdventureMUC(Component): 
     
    5354    #        answer.type = :error 
    5455    #        answer.add(Jabber::Error.new('bad-request')) 
    55     #        self.component.send(answer) if iq.type != :error 
     56    #        self.send(answer) if iq.type != :error 
    5657    #        return 
    5758    #    answer = iq.answer 
     
    7273    #            answer.query.add(Jabber::Discovery::Feature.new(Jabber::MUC::XMUC.new.namespace)) 
    7374    #            answer.query.add(Jabber::Discovery::Feature.new(Jabber::MUC::XMUCUser.new.namespace)) 
    74     #    self.component.send(answer) 
     75    #    self.send(answer) 
    7576   
    7677    #def handle_disco_items(iq): 
     
    7879    #        answer = iq.answer 
    7980    #        answer.add(Jabber::Error.new('bad-request')) 
    80     #        self.component.send(answer) 
     81    #        self.send(answer) 
    8182    #        return 
    8283    #    answer = iq.answer 
     
    8687    #                      answer.query.add(Jabber::Discovery::Item.new(Jabber::JID::new(String::new(node), self.component.jid.domain), world.iname)) 
    8788    #                      } 
    88     #    self.component.send(answer) 
     89    #    self.send(answer) 
    8990 
    9091    def handle_presence(self, _, pres): 
    91         print 'presence: from %s type %s to %s' % (pres.getFrom(), pres.getType(), pres.getTo()) 
    92      
    93         world = self.worlds[pres.getTo().getNode()] 
    94         if not world: 
    95             answer = pres.buildReply() 
    96             answer.setType('error') 
    97             #answer.add(Jabber::Error.new('item-not-found', 'The world you are trying to reach is currently unavailable.')) 
    98             self.component.send(answer) 
     92        print 'presence: from %s type %s to %s' % (pres.getFrom(), 
     93                                                   pres.getType(), 
     94                                                   pres.getTo()) 
     95 
     96        world = pres.getTo().getNode() 
     97        if self.worlds.has_key(world): 
     98            self.worlds[world].handle_presence(pres) 
    9999        else: 
    100             world.handle_presence(self, pres) 
     100            answer = Error(pres, 'item-not-found', 'The world you are trying to reach is currently unavailable.') 
     101            self.send(answer) 
    101102        return True 
    102103 
    103104    def handle_message(self, _, msg): 
    104         print 'message: from %s type %s to %s: %s' % (msg.getFrom(), msg.getType(), msg.getTo(), repr(msg.getBody())) 
     105        print 'message: from %s type %s to %s: %s' % (msg.getFrom(), 
     106                                                      msg.getType(), 
     107                                                      msg.getTo(), 
     108                                                      repr(msg.getBody())) 
    105109 
    106         world = self.worlds[msg.getTo()] 
    107         if not world: 
    108             answer = msg.buildReply() 
    109             answer.setType('error') 
    110             #answer.add(Jabber::Error.new('item-not-found', 'The world you are trying to reach is currently unavailable.')) 
     110        world = msg.getTo().getNode() 
     111        if self.worlds.has_key(world): 
     112            self.worlds[world].handle_message(msg) 
     113        else: 
     114            answer = Error(msg, 'item-not-found', 'The world you are trying to reach is currently unavailable.') 
    111115            self.send(answer) 
    112         else: 
    113             #msg.body=REXML::Text::unnormalize(msg.body) 
    114             world.handle_message(msg) 
    115116        return True 
    116117 
  • adventure/place.py

    r102 r118  
    22 
    33class Place: 
    4     def _init__(self, name, description): 
     4    def __init__(self, name, description): 
    55        self.name = name 
    66        self.description = description 
  • adventure/player.py

    r115 r118  
    66class Player(Thing): 
    77    def __init__(self, world, name, jid): 
    8         self.world = world 
    9         self.name = name 
     8        Thing.__init__(self, world, name, None) 
    109        self.jid = unicode(jid) 
    1110        self.place = None 
  • adventure/thing.py

    r114 r118  
    55 
    66class Thing: 
    7     def _init__(self, world, name, parent): 
    8         self.word = word 
     7    def __init__(self, world, name, parent): 
     8        self.world = world 
    99        self.name = name 
    1010        self.parent = parent 
    11         self.aliases = list() # Noms alternatifs 
     11        self.aliases = (name,) # Noms alternatifs 
    1212        self.actions = list() 
    1313        self.presence = None 
     
    5454            target = None 
    5555            if command.action[2]: 
    56                 for object_ in self.place.objects: 
    57                     if object_.place == self.place and object_.name == command.action[2]: 
    58                         target = object_ 
    59                         break 
    60                 for participant in self.place.participants: 
    61                     if participant.place == self.place and participant.name == command.action[2]: 
    62                         target = participant 
     56                for thing in self.world.each_thing_by_place(self.place): 
     57                    if thing.name == command.action[2]: 
     58                        target = thing 
    6359                        break 
    6460            #else: 
  • adventure/world.py

    r117 r118  
    55from xml.dom.minidom import parse as xml_parse 
    66from xmpp import Message, Presence 
     7from xmpp_error import Error 
    78 
    89class World: 
     
    1112        self.places = dict() # {'place_name': place, ...} 
    1213        self.things = dict() 
    13         self.players = dict() 
    1414 
    1515        doc = xml_parse(filename) 
     
    3535    def send(self, resource, stanza): 
    3636        # Avoid sending to things without JID 
    37         if stanza.getTo() != None: 
     37        if stanza.getTo(): 
    3838            self.muc.snd(self.node, resource, stanza) 
    3939 
     
    5757                pres = Presence(node=t.presence) 
    5858                pres.setType('unavailable') 
    59                 pres.SetTo(thing.jid) 
     59                pres.setTo(thing.jid) 
    6060                if t.jid != thing.jid: 
    6161                    self.send(t.name, pres) 
     
    9999            t.on_enter(thing, oldplace) 
    100100 
    101     def handle_presence(self, _, pres): 
     101    def handle_presence(self, pres): 
    102102        # A help for the irritated first: 
    103103        if pres.getType() == 'subscribe': 
     
    117117            # Disallow nick changes 
    118118            if isinstance(thing, Player) and (pres.getFrom() == thing.jid) and (player != thing): 
    119                 answer = pres.buildReply() #False 
    120                 answer.setType('error') 
    121                 #answer.add(Jabber::Error.new('not-acceptable', 'Nickchange not allowed')) 
     119                answer = Error(pres, 'not-acceptable', 'Nickchange not allowed') #False 
    122120                self.send(thing.name, answer) 
    123121                return True 
     
    125123        # Either nick-collission or empty nick 
    126124        if player and pres.getFrom() != player.jid or len(pres.getTo().getResource()) < 2: 
    127             answer = pres.buildReply() 
    128             answer.setType('error') 
    129             #if len(pres.getTo().getResource()) > 1: 
    130             #    answer.add(Jabber::Error::new('conflict', 'Nickname already used')) 
    131             #else: 
    132             #    answer.add(Jabber::Error::new('not-acceptable', 'Please use a nickname')) 
     125            answer = None 
     126            if len(pres.getTo().getResource()) > 1: 
     127                answer = Error(pres, 'conflict', 'Nickname already used') 
     128            else: 
     129                answer = Error(pres, 'not-acceptable', 'Please use a nickname') 
    133130            self.send(None, answer) 
    134131            return True 
     
    138135            player = Player(self, pres.getTo().getResource(), pres.getFrom()) 
    139136            player.presence = pres 
    140             self.players[player.name] = player 
     137            self.things[player.name] = player 
    141138            self.move_thing(player, self.start) 
    142139            player.send_message('Help!', 'Send "?" to get a list of available commands any time.') 
     
    149146                pres = Presence(node=player.presence) 
    150147                pres.to = t.jid 
    151                 self.send(player.iname, pres) 
     148                self.send(player.name, pres) 
    152149     
    153150        # Remove the player instantly 
    154151        if pres.getType() in ('error', 'unavailable'): 
    155152            self.move_thing(player, None) 
    156             del self.players[player.name] 
    157  
    158     def handle_message(self, _, msg): 
     153            del self.things[player.name] 
     154 
     155    def handle_message(self, msg): 
    159156        player = None 
    160157        for thing in self.things.values(): 
    161             if isinstance(thing, Player) and msg.getTo().getResource() == None and msg.getFrom() == thing.jid: 
     158            print msg.getFrom(), thing.jid 
     159            if isinstance(thing, Player) and not msg.getTo().getResource() and msg.getFrom() == thing.jid: 
    162160                player = thing 
    163161 
    164162        if not player: 
    165             answer = msg.buildReply() 
    166             answer.setType('error') 
    167             #answer.add(Jabber::Error::new('forbidden')) 
     163            answer = Error(msg, 'forbidden') 
    168164            self.send(msg.getTo().getResource(), answer) 
    169165            return True 
    170166 
    171         if not command(player, msg.getBody()): 
     167        if not self.command(player, msg.getBody()): 
    172168            for thing in self.each_thing_by_place(player.place): 
    173                 thing.send_message(player.iname, msg.body) 
     169                thing.send_message(player.name, msg.getBody()) 
    174170 
    175171    def command(self, player, text): 
     
    180176                for exit_name in place.exits.keys(): 
    181177                    player.send_message(None, '(Command) go %s' % exit_name) 
    182             for thing in foreach_thing_by_place(player.place): 
     178            for thing in self.each_thing_by_place(player.place): 
    183179                for c in thing.actions: 
    184180                    player.send_message(None, '(Command) %s %s' % (c.expressions[0], thing.name)) 
     
    212208            else: 
    213209                handled = False 
    214                 for thing in each_thing_by_place(player.place): 
     210                for thing in self.each_thing_by_place(player.place): 
    215211                    if what.lower() in thing.aliases: 
    216212                        for action in thing.actions: