home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / msn / NSSBAdapter.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  6.1 KB  |  164 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from logging import getLogger
  5. log = getLogger('msn.nssb')
  6. import msn
  7. from msn import MSNTextMessage
  8. from util import callsback
  9. from util.primitives.funcs import get
  10. from util.Events import EventMixin
  11.  
  12. class NSSBAdapter(EventMixin):
  13.     _instances = []
  14.     events = EventMixin.events | set(('on_buddy_join', 'on_buddy_leave', 'on_buddy_timeout', 'on_conn_success', 'on_authenticate', 'disconnect', 'contact_alias', 'needs_auth', 'recv_error', 'recv_text_msg', 'send_text_msg', 'typing_info', 'recv_action', 'recv_p2p_msg', 'transport_error'))
  15.     
  16.     def __init__(self, ns, to_invite = ()):
  17.         EventMixin.__init__(self)
  18.         self.ns = ns
  19.         self.principals = []
  20.         self.to_invite = to_invite
  21.         self._NSSBAdapter__chatbuddy = get(to_invite, 0, None)
  22.  
  23.     
  24.     def _closed(self):
  25.         return not (self.connected)
  26.  
  27.     _closed = property(_closed)
  28.     
  29.     def self_buddy(self):
  30.         return self.ns.self_buddy
  31.  
  32.     self_buddy = property(self_buddy)
  33.     
  34.     def invite(self, bname, callback = None):
  35.         self.buddy_join(bname)
  36.         callback.success()
  37.  
  38.     invite = callsback(invite)
  39.     
  40.     def buddy_join(self, bname):
  41.         if self._NSSBAdapter__chatbuddy is None:
  42.             self._NSSBAdapter__chatbuddy = bname
  43.         
  44.         if bname not in self.principals:
  45.             self.principals.append(bname)
  46.             self.event('on_buddy_join', bname)
  47.         
  48.  
  49.     
  50.     def send_text_message(self, message):
  51.         payload = message
  52.         netid = 32
  53.         msg = msn.Message('UUM', self._NSSBAdapter__chatbuddy, netid, 1, payload = str(payload))
  54.         self.ns.socket.send(msg, trid = True, callback = sentinel)
  55.         self.event('send_text_msg', payload)
  56.  
  57.     
  58.     def on_send_message(self, msg):
  59.         return NotImplemented
  60.  
  61.     
  62.     def leave(self):
  63.         if self in self._instances:
  64.             self._instances.remove(self)
  65.         
  66.         self.event('disconnect')
  67.  
  68.     
  69.     def connect(self, callback = None):
  70.         log.info('NSSB.connect()')
  71.         self._instances.append(self)
  72.         self.event('on_conn_success', self)
  73.         log.info('NSSB.on_conn_success()')
  74.         for bname in self.to_invite:
  75.             self.buddy_join(bname)
  76.         
  77.         self.event('on_authenticate')
  78.         log.info('NSSB.on_authenticate()')
  79.         callback.success()
  80.  
  81.     connect = callsback(connect)
  82.     
  83.     def connected(self):
  84.         return self.ns.connected()
  85.  
  86.     
  87.     def disconnect(self):
  88.         self.event('disconnect')
  89.  
  90.     
  91.     def close_transport(self):
  92.         pass
  93.  
  94.     
  95.     def on_conn_fail(self):
  96.         self.event('recv_error')
  97.  
  98.     
  99.     def authenticate(self, bname):
  100.         self.event('on_authenticate')
  101.  
  102.     
  103.     def send_typing_status(self, name, status):
  104.         payload = []
  105.         
  106.         line = lambda k, v: '%s: %s' % (k, v)
  107.         add = payload.append
  108.         add(line('MIME-Version', '1.0'))
  109.         add(line('Content-Type', 'text/x-msmsgscontrol'))
  110.         add(line('TypingUser', name))
  111.         add('')
  112.         add('')
  113.         payload = '\r\n'.join(payload)
  114.         netid = 32
  115.         msg = msn.Message('UUM', self._NSSBAdapter__chatbuddy, netid, 2, payload = payload)
  116.         self.ns.socket.send(msg, trid = True, callback = sentinel)
  117.  
  118.     
  119.     def on_error(self, msg):
  120.         pass
  121.  
  122.     
  123.     def recv_msg(self, msg):
  124.         
  125.         try:
  126.             print msg.type
  127.             getattr(self, 'recv_msg_%s' % msg.type, self.recv_msg_unknown)(msg)
  128.         except:
  129.             import traceback
  130.             traceback.print_exc()
  131.             print 'Exception handling MSG!'
  132.             print msg
  133.  
  134.  
  135.     
  136.     def recv_msg_plain(self, msg):
  137.         (name, nick) = msg.args[:2]
  138.         msg = MSNTextMessage.from_net(msg.payload)
  139.         self.event('recv_text_msg', name, msg)
  140.  
  141.     
  142.     def recv_msg_control(self, msg):
  143.         name = msg.args[0]
  144.         self.event('typing_info', name, bool(msg.payload.get('TypingUser', False)))
  145.  
  146.     
  147.     def recv_msg_unknown(self, msg):
  148.         print "ohnoes don't know this message type:", type(msg), msg
  149.  
  150.     
  151.     def incoming(cls, msg):
  152.         name = msg.args[0]
  153.         for x in cls._instances:
  154.             if x._NSSBAdapter__chatbuddy == name:
  155.                 break
  156.                 continue
  157.         else:
  158.             x = cls(None)
  159.         x.buddy_join(name)
  160.         x.recv_msg(msg)
  161.  
  162.     incoming = classmethod(incoming)
  163.  
  164.