Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #coding: utf-8
- from PyQt4.QtCore import QThread,SIGNAL
- from xmpp import client
- from xmpp import protocol
- import traceback
- def execute(method):
- def wrapper(self):
- try:
- method(self)
- except protocol.SystemShutdown:
- self.error("Disconnected","Сервер сбросил подключение, выключился")
- except protocol.Conflict:
- self.error("Disconnected","Конфликт ресурсов.\nУдалённое соединение на сервере заменено новым подключением")
- except Exception:
- self.error("Exception in ThreadConnection.Disconnect",traceback.format_exc())
- self.Disconnect()
- return wrapper
- class ThreadConnection(QThread):
- XMPP=None
- def __init__(self,config):
- QThread.__init__(self)
- self.__TERMINATING=True
- self._config=config
- self.error=lambda x,y:self.emit(SIGNAL('error'),self.trUtf8(x),self.trUtf8(y))
- @execute
- def run(self):
- self.setPriority(QThread.HighestPriority)
- if self._connection():
- del self._config
- self._RegisterHandlers()
- while self.__TERMINATING:
- self.XMPP.process(5)
- def _connection(self):
- self.XMPP=client.Client(self._config['HOST'],self._config['PORT'])
- if not self.XMPP.connect(self._config['SSL'],self._config['USE_RESOLVE']):
- self.error("Ошибка подключения","Подключение не возможно")
- return False
- if not self.XMPP.auth(self._config['USER'],self._config['PASSWORD'],self._config['RESOURCE']):
- self.error("Ошибка авторизации","Ошибка при авторизации\n Не корректный логин/пароль")
- return False
- self.XMPP.setStatus(None, None,self._config['PRIORITY'])
- self.emit(SIGNAL('connected()'))
- return True
- def Disconnect(self):
- if self.XMPP.isConnected():
- self.XMPP.disconnected()
- self.__TERMINATING=False
- def isConnected(self):
- return self.XMPP.isConnected()
- def _RegisterHandlers(self):
- self.XMPP.registerHandler("iq",self.IQ)
- self.XMPP.registerHandler("message",self.replyOnline,htype='',namespace="askseelove:event:profileview")
- #self.XMPP.registerHandler("message",self.recvMsgTet,namespace="askseelove:event:poke")
- self.XMPP.registerDisconnectHandler(self.Disconnect)
- def sendAndCallForResponse(self,stanza,func,*args):
- self.XMPP.sendAndCallForResponse(stanza,func,*args)
- def send(self,stz):
- self.XMPP.send(stz)
- def IQ(self,stanza):
- fulljid = stanza.getFrom()
- if fulljid is None : return
- if stanza.getTags("ping", {}, protocol.NS_PING):
- iq = stanza.buildReply(protocol.TYPE_RESULT)
- else:
- iq = stanza.buildReply(protocol.TYPE_ERROR)
- error = iq.addChild("error", {"type": "cancel"})
- error.addChild("feature-not-implemented", {}, [], protocol.NS_STANZAS)
- self.send(iq)
- def replyOnline(self,stanza):
- reply=protocol.Message(stanza.getFrom())
- reply.setTag("event'",namespace="askseelove:event:online")
- self.XMPP.send(reply)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement