コード例 #1
0
		def cbGroups(groups):
			def gotSize(size, group):
				return group.name, size, group.meta.get('topic')
			d = defer.DeferredList([
				group.size().addCallback(gotSize, group) for group in groups])
			d.addCallback(lambda results: self.list([r for (s, r) in results if s]))
			return d
コード例 #2
0
	def setMetadata(self, meta):
		self.meta = meta
		sets = []
		for p in self.users.itervalues():
			d = defer.maybeDeferred(p.groupMetaUpdate, self, meta)
			d.addErrback(self._ebUserCall, p=p)
			sets.append(d)
		defer.DeferredList(sets).addCallback(self._cbUserCall)
		return defer.succeed(None)
コード例 #3
0
	def receive(self, sender, recipient, message):
		assert recipient is self
		receives = []
		for p in self.users.itervalues():
			if p is not sender:
				d = defer.maybeDeferred(p.receive, sender, self, message)
				d.addErrback(self._ebUserCall, p=p)
				receives.append(d)
		defer.DeferredList(receives).addCallback(self._cbUserCall)
		return defer.succeed(None)
コード例 #4
0
ファイル: pbsupport.py プロジェクト: samis/blockBox
	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)
コード例 #5
0
	def add(self, user):
		assert iwords.IChatClient.providedBy(user), "%r is not a chat client" % (user,)
		if user.name not in self.users:
			additions = []
			self.users[user.name] = user
			for p in self.users.itervalues():
				if p is not user:
					d = defer.maybeDeferred(p.userJoined, self, user)
					d.addErrback(self._ebUserCall, p=p)
					additions.append(d)
			defer.DeferredList(additions).addCallback(self._cbUserCall)
		return defer.succeed(None)
コード例 #6
0
	def remove(self, user, reason=None):
		assert reason is None or isinstance(reason, unicode)
		try:
			del self.users[user.name]
		except KeyError:
			pass
		else:
			removals = []
			for p in self.users.itervalues():
				if p is not user:
					d = defer.maybeDeferred(p.userLeft, self, user, reason)
					d.addErrback(self._ebUserCall, p=p)
					removals.append(d)
			defer.DeferredList(removals).addCallback(self._cbUserCall)
		return defer.succeed(None)
コード例 #7
0
	def irc_LIST(self, prefix, params):
		"""List query

		Return information about the indicated channels, or about all
		channels if none are specified.

		Parameters: [ <channel> *( "," <channel> ) [ <target> ] ]
		"""
		#<< list #python
		#>> :orwell.freenode.net 321 exarkun Channel :Users  Name
		#>> :orwell.freenode.net 322 exarkun #python 358 :The Python programming language
		#>> :orwell.freenode.net 323 exarkun :End of /LIST
		if params:
			# Return information about indicated channels
			try:
				channels = params[0].decode(self.encoding).split(',')
			except UnicodeDecodeError:
				self.sendMessage(
					irc.ERR_NOSUCHCHANNEL, params[0],
					":No such channel (could not decode your unicode!)")
				return

			groups = []
			for ch in channels:
				if ch.startswith('#'):
					ch = ch[1:]
				groups.append(self.realm.lookupGroup(ch))

			groups = defer.DeferredList(groups, consumeErrors=True)
			groups.addCallback(lambda gs: [r for (s, r) in gs if s])
		else:
			# Return information about all channels
			groups = self.realm.itergroups()

		def cbGroups(groups):
			def gotSize(size, group):
				return group.name, size, group.meta.get('topic')
			d = defer.DeferredList([
				group.size().addCallback(gotSize, group) for group in groups])
			d.addCallback(lambda results: self.list([r for (s, r) in results if s]))
			return d
		groups.addCallback(cbGroups)