| Index: third_party/twisted_8_1/twisted/words/im/pbsupport.py
|
| diff --git a/third_party/twisted_8_1/twisted/words/im/pbsupport.py b/third_party/twisted_8_1/twisted/words/im/pbsupport.py
|
| deleted file mode 100644
|
| index 7e750b7306da801b00b00a1fd3efa11d33f0c7d1..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/words/im/pbsupport.py
|
| +++ /dev/null
|
| @@ -1,260 +0,0 @@
|
| -# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -
|
| -"""L{twisted.words} support for Instance Messenger."""
|
| -
|
| -from __future__ import nested_scopes
|
| -
|
| -from twisted.internet import defer
|
| -from twisted.internet import error
|
| -from twisted.python import log
|
| -from twisted.python.failure import Failure
|
| -from twisted.spread import pb
|
| -
|
| -from twisted.words.im.locals import ONLINE, OFFLINE, AWAY
|
| -
|
| -from twisted.words.im import basesupport, interfaces
|
| -from zope.interface import implements
|
| -
|
| -
|
| -class TwistedWordsPerson(basesupport.AbstractPerson):
|
| - """I a facade for a person you can talk to through a twisted.words service.
|
| - """
|
| - def __init__(self, name, wordsAccount):
|
| - basesupport.AbstractPerson.__init__(self, name, wordsAccount)
|
| - self.status = OFFLINE
|
| -
|
| - def isOnline(self):
|
| - return ((self.status == ONLINE) or
|
| - (self.status == AWAY))
|
| -
|
| - def getStatus(self):
|
| - return self.status
|
| -
|
| - def sendMessage(self, text, metadata):
|
| - """Return a deferred...
|
| - """
|
| - if metadata:
|
| - d=self.account.client.perspective.directMessage(self.name,
|
| - text, metadata)
|
| - d.addErrback(self.metadataFailed, "* "+text)
|
| - return d
|
| - else:
|
| - return self.account.client.perspective.callRemote('directMessage',self.name, text)
|
| -
|
| - def metadataFailed(self, result, text):
|
| - print "result:",result,"text:",text
|
| - return self.account.client.perspective.directMessage(self.name, text)
|
| -
|
| - def setStatus(self, status):
|
| - self.status = status
|
| - self.chat.getContactsList().setContactStatus(self)
|
| -
|
| -class TwistedWordsGroup(basesupport.AbstractGroup):
|
| - implements(interfaces.IGroup)
|
| - def __init__(self, name, wordsClient):
|
| - basesupport.AbstractGroup.__init__(self, name, wordsClient)
|
| - self.joined = 0
|
| -
|
| - def sendGroupMessage(self, text, metadata=None):
|
| - """Return a deferred.
|
| - """
|
| - #for backwards compatibility with older twisted.words servers.
|
| - if metadata:
|
| - d=self.account.client.perspective.callRemote(
|
| - 'groupMessage', self.name, text, metadata)
|
| - d.addErrback(self.metadataFailed, "* "+text)
|
| - return d
|
| - else:
|
| - return self.account.client.perspective.callRemote('groupMessage',
|
| - self.name, text)
|
| -
|
| - def setTopic(self, text):
|
| - self.account.client.perspective.callRemote(
|
| - 'setGroupMetadata',
|
| - {'topic': text, 'topic_author': self.client.name},
|
| - self.name)
|
| -
|
| - def metadataFailed(self, result, text):
|
| - print "result:",result,"text:",text
|
| - return self.account.client.perspective.callRemote('groupMessage',
|
| - self.name, text)
|
| -
|
| - def joining(self):
|
| - self.joined = 1
|
| -
|
| - def leaving(self):
|
| - self.joined = 0
|
| -
|
| - def leave(self):
|
| - return self.account.client.perspective.callRemote('leaveGroup',
|
| - self.name)
|
| -
|
| -
|
| -
|
| -class TwistedWordsClient(pb.Referenceable, basesupport.AbstractClientMixin):
|
| - """In some cases, this acts as an Account, since it a source of text
|
| - messages (multiple Words instances may be on a single PB connection)
|
| - """
|
| - def __init__(self, acct, serviceName, perspectiveName, chatui,
|
| - _logonDeferred=None):
|
| - self.accountName = "%s (%s:%s)" % (acct.accountName, serviceName, perspectiveName)
|
| - self.name = perspectiveName
|
| - print "HELLO I AM A PB SERVICE", serviceName, perspectiveName
|
| - self.chat = chatui
|
| - self.account = acct
|
| - self._logonDeferred = _logonDeferred
|
| -
|
| - def getPerson(self, name):
|
| - return self.chat.getPerson(name, self)
|
| -
|
| - def getGroup(self, name):
|
| - return self.chat.getGroup(name, self)
|
| -
|
| - def getGroupConversation(self, name):
|
| - return self.chat.getGroupConversation(self.getGroup(name))
|
| -
|
| - def addContact(self, name):
|
| - self.perspective.callRemote('addContact', name)
|
| -
|
| - def remote_receiveGroupMembers(self, names, group):
|
| - print 'received group members:', names, group
|
| - self.getGroupConversation(group).setGroupMembers(names)
|
| -
|
| - def remote_receiveGroupMessage(self, sender, group, message, metadata=None):
|
| - print 'received a group message', sender, group, message, metadata
|
| - self.getGroupConversation(group).showGroupMessage(sender, message, metadata)
|
| -
|
| - def remote_memberJoined(self, member, group):
|
| - print 'member joined', member, group
|
| - self.getGroupConversation(group).memberJoined(member)
|
| -
|
| - def remote_memberLeft(self, member, group):
|
| - print 'member left'
|
| - self.getGroupConversation(group).memberLeft(member)
|
| -
|
| - def remote_notifyStatusChanged(self, name, status):
|
| - self.chat.getPerson(name, self).setStatus(status)
|
| -
|
| - def remote_receiveDirectMessage(self, name, message, metadata=None):
|
| - self.chat.getConversation(self.chat.getPerson(name, self)).showMessage(message, metadata)
|
| -
|
| - def remote_receiveContactList(self, clist):
|
| - for name, status in clist:
|
| - self.chat.getPerson(name, self).setStatus(status)
|
| -
|
| - def remote_setGroupMetadata(self, dict_, groupName):
|
| - if dict_.has_key("topic"):
|
| - self.getGroupConversation(groupName).setTopic(dict_["topic"], dict_.get("topic_author", None))
|
| -
|
| - def joinGroup(self, name):
|
| - self.getGroup(name).joining()
|
| - return self.perspective.callRemote('joinGroup', name).addCallback(self._cbGroupJoined, name)
|
| -
|
| - def leaveGroup(self, name):
|
| - self.getGroup(name).leaving()
|
| - return self.perspective.callRemote('leaveGroup', name).addCallback(self._cbGroupLeft, name)
|
| -
|
| - def _cbGroupJoined(self, result, name):
|
| - groupConv = self.chat.getGroupConversation(self.getGroup(name))
|
| - groupConv.showGroupMessage("sys", "you joined")
|
| - self.perspective.callRemote('getGroupMembers', name)
|
| -
|
| - def _cbGroupLeft(self, result, name):
|
| - print 'left',name
|
| - groupConv = self.chat.getGroupConversation(self.getGroup(name), 1)
|
| - groupConv.showGroupMessage("sys", "you left")
|
| -
|
| - def connected(self, perspective):
|
| - print 'Connected Words Client!', perspective
|
| - if self._logonDeferred is not None:
|
| - self._logonDeferred.callback(self)
|
| - self.perspective = perspective
|
| - self.chat.getContactsList()
|
| -
|
| -
|
| -pbFrontEnds = {
|
| - "twisted.words": TwistedWordsClient,
|
| - "twisted.reality": None
|
| - }
|
| -
|
| -
|
| -class PBAccount(basesupport.AbstractAccount):
|
| - implements(interfaces.IAccount)
|
| - gatewayType = "PB"
|
| - _groupFactory = TwistedWordsGroup
|
| - _personFactory = TwistedWordsPerson
|
| -
|
| - def __init__(self, accountName, autoLogin, username, password, host, port,
|
| - services=None):
|
| - """
|
| - @param username: The name of your PB Identity.
|
| - @type username: string
|
| - """
|
| - basesupport.AbstractAccount.__init__(self, accountName, autoLogin,
|
| - username, password, host, port)
|
| - self.services = []
|
| - if not services:
|
| - services = [('twisted.words', 'twisted.words', username)]
|
| - for serviceType, serviceName, perspectiveName in services:
|
| - self.services.append([pbFrontEnds[serviceType], serviceName,
|
| - perspectiveName])
|
| -
|
| - def logOn(self, chatui):
|
| - """
|
| - @returns: this breaks with L{interfaces.IAccount}
|
| - @returntype: DeferredList of L{interfaces.IClient}s
|
| - """
|
| - # Overriding basesupport's implementation on account of the
|
| - # fact that _startLogOn tends to return a deferredList rather
|
| - # than a simple Deferred, and we need to do registerAccountClient.
|
| - if (not self._isConnecting) and (not self._isOnline):
|
| - self._isConnecting = 1
|
| - d = self._startLogOn(chatui)
|
| - d.addErrback(self._loginFailed)
|
| - def registerMany(results):
|
| - for success, result in results:
|
| - if success:
|
| - chatui.registerAccountClient(result)
|
| - self._cb_logOn(result)
|
| - else:
|
| - log.err(result)
|
| - d.addCallback(registerMany)
|
| - return d
|
| - else:
|
| - raise error.ConnectionError("Connection in progress")
|
| -
|
| -
|
| - def _startLogOn(self, chatui):
|
| - print 'Connecting...',
|
| - d = pb.getObjectAt(self.host, self.port)
|
| - d.addCallbacks(self._cbConnected, self._ebConnected,
|
| - callbackArgs=(chatui,))
|
| - return d
|
| -
|
| - def _cbConnected(self, root, chatui):
|
| - print 'Connected!'
|
| - print 'Identifying...',
|
| - d = pb.authIdentity(root, self.username, self.password)
|
| - d.addCallbacks(self._cbIdent, self._ebConnected,
|
| - callbackArgs=(chatui,))
|
| - return d
|
| -
|
| - def _cbIdent(self, ident, chatui):
|
| - if not ident:
|
| - print 'falsely identified.'
|
| - return self._ebConnected(Failure(Exception("username or password incorrect")))
|
| - print 'Identified!'
|
| - dl = []
|
| - for handlerClass, sname, pname in self.services:
|
| - d = defer.Deferred()
|
| - dl.append(d)
|
| - handler = handlerClass(self, sname, pname, chatui, d)
|
| - ident.callRemote('attach', sname, pname, handler).addCallback(handler.connected)
|
| - return defer.DeferredList(dl)
|
| -
|
| - def _ebConnected(self, error):
|
| - print 'Not connected.'
|
| - return error
|
| -
|
|
|