Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.94 KB | None | 0 0
  1. #coding: utf-8
  2. from PyQt4.QtCore import QThread,SIGNAL
  3. from xmpp import client
  4. from xmpp import protocol
  5. import traceback
  6.  
  7. def execute(method):
  8.     def wrapper(self):
  9.         try:
  10.             method(self)
  11.         except protocol.SystemShutdown:
  12.             self.error("Disconnected","Сервер сбросил подключение, выключился")
  13.         except protocol.Conflict:
  14.             self.error("Disconnected","Конфликт ресурсов.\nУдалённое соединение на сервере заменено новым подключением")
  15.         except Exception:
  16.             self.error("Exception in ThreadConnection.Disconnect",traceback.format_exc())
  17.             self.Disconnect()
  18.     return wrapper
  19.    
  20. class ThreadConnection(QThread):
  21.     XMPP=None
  22.     def __init__(self,config):
  23.         QThread.__init__(self)
  24.         self.__TERMINATING=True
  25.         self._config=config
  26.         self.error=lambda x,y:self.emit(SIGNAL('error'),self.trUtf8(x),self.trUtf8(y))
  27.     @execute   
  28.     def run(self):
  29.         self.setPriority(QThread.HighestPriority)
  30.         if self._connection():         
  31.             del self._config
  32.             self._RegisterHandlers()
  33.             while self.__TERMINATING:
  34.                 self.XMPP.process(5)   
  35.     def _connection(self):
  36.         self.XMPP=client.Client(self._config['HOST'],self._config['PORT'])
  37.         if not self.XMPP.connect(self._config['SSL'],self._config['USE_RESOLVE']):
  38.             self.error("Ошибка подключения","Подключение не возможно")
  39.             return False
  40.         if not self.XMPP.auth(self._config['USER'],self._config['PASSWORD'],self._config['RESOURCE']):
  41.             self.error("Ошибка авторизации","Ошибка при авторизации\n Не корректный логин/пароль")
  42.             return False
  43.         self.XMPP.setStatus(None, None,self._config['PRIORITY'])
  44.         self.emit(SIGNAL('connected()'))
  45.         return True
  46.     def Disconnect(self):
  47.         if self.XMPP.isConnected():
  48.             self.XMPP.disconnected()
  49.         self.__TERMINATING=False
  50.     def isConnected(self):
  51.         return self.XMPP.isConnected()
  52.     def _RegisterHandlers(self):
  53.         self.XMPP.registerHandler("iq",self.IQ)
  54.         self.XMPP.registerHandler("message",self.replyOnline,htype='',namespace="askseelove:event:profileview")
  55.         #self.XMPP.registerHandler("message",self.recvMsgTet,namespace="askseelove:event:poke")
  56.         self.XMPP.registerDisconnectHandler(self.Disconnect)
  57.     def sendAndCallForResponse(self,stanza,func,*args):
  58.         self.XMPP.sendAndCallForResponse(stanza,func,*args)
  59.     def send(self,stz):
  60.         self.XMPP.send(stz)
  61.     def IQ(self,stanza):
  62.         fulljid = stanza.getFrom() 
  63.         if fulljid is None : return
  64.         if stanza.getTags("ping", {}, protocol.NS_PING):
  65.             iq = stanza.buildReply(protocol.TYPE_RESULT)
  66.         else:
  67.             iq = stanza.buildReply(protocol.TYPE_ERROR)
  68.             error = iq.addChild("error", {"type": "cancel"})
  69.             error.addChild("feature-not-implemented", {}, [], protocol.NS_STANZAS)
  70.         self.send(iq)
  71.     def replyOnline(self,stanza):
  72.         reply=protocol.Message(stanza.getFrom())
  73.         reply.setTag("event'",namespace="askseelove:event:online")
  74.         self.XMPP.send(reply)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement