рдлрд┐рд░ рднреА рдПрдХ рдФрд░ рдЕрдЬрдЧрд░ рдЪреИрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ

рдЕрднрд┐рд╡рд╛рджрди, рд╣рдмреНрд░рд╛рдпреБрдЬрд╝рд░ред
рдПрдХ рд╣рдм рдкрд░ рдЕрдЬрдЧрд░ рдкрд░ рдПрдХ рдЪреИрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд▓реЗрдЦ рдерд╛ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдореБрдЭреЗ рдЕрдХрд╛рджрдорд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдмрд╛рдЗрдХ рд▓рд┐рдЦреА, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рд╣рдо рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ: рдЬрдмреНрдмрд╛рд░ (рдЕрд╕рдордорд┐рдд рдЖрд░рдПрд╕рдП рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди) + рдкрд╛рдпрдХреНрдпреВрдЯред
рдпрджрд┐ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдмреЗрд╢рдХ, рди рдХреЗрд╡рд▓ рдпрд╣, рдмрд▓реНрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЪреИрдЯ рдЯреИрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рд┐рд░реНрдл рдЕрдЬрдЧрд░ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдХреЛ рдмрдврд╝рд╛рдПрдВред
рдпрд╣ рдХреЛрдб рдбреЗрдмрд┐рдпрди, рдкрд╛рдпрдерди 2.7, рдХреНрдпреВрдЯреА 4.7 рдХреЗ рддрд╣рдд рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рд░реВрдк рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдВред
1. рдкреНрд░рдореБрдЦ рдЕрдиреБрд░реЛрдз
тЧПgetche "рдпрджрд┐ рдЖрдк рдпрд╣ рд╕рдВрджреЗрд╢ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ..."
2. рдПрдХ рдХреБрдВрдЬреА рднреЗрдЬ рд░рд╣рд╛ рд╣реИ
# рдПрд╕реЗрдВрдбрдХреА 234234234
3. рд╕рдВрджреЗрд╢
#mesg 123123123
4. рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ (рд▓рд╛рдЧреВ рдирд╣реАрдВ)
#getlastmesg
рдореИрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ # <рдХреБрдЫ> рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд╛рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рд╕рдВрджреЗрд╢ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рд╕рдВрджреЗрд╢ # <рдХреБрдЫ рднреА> рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдореИрдВ рд╕рд┐рд░реНрдл рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдмрдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдЖрдЗрдП рд╕рд░рд▓ рднрд╛рдЧ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ рдЬреЗрдмрдмреАрд░ рднрд╛рдЧред


рдЧрд┐рд▓рдмрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЗрдВрдЬрди рд▓рд┐рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЪрд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП xmpppy рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
sudo easy_install xmpppy
рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рддреБрд░рдВрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдФрд░ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓ рджреЗрдВ, рдЬреЛ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд░рд┐рдлреНрд▓реИрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╣рдорд╛рд░рд╛ рдЬреАрдбреА, рд╣рдорд╛рд░рд╛ рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХред
jabber.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import xmpp,sys #     xmpp class sjabber: def __init__(self,xmpp_jid,xmpp_pwd): self.xmpp_jid = xmpp_jid self.xmpp_pwd = xmpp_pwd self.jid = xmpp.protocol.JID(xmpp_jid) self.client = xmpp.Client(self.jid.getDomain(),debug=[]) def connect(self): con=self.client.connect() if not con: print 'could not connect!' sys.exit() print 'connected with',con auth = self.client.auth(self.jid.getNode(),str(self.xmpp_pwd),resource='xmpppy') if not auth: print 'could not authenticate!' sys.exit() print 'authenticated using',auth #    ! self.client.sendInitPresence(1) def Process(self): a = self.client.Process(1) def send(self,to,mess): id = self.client.send(xmpp.protocol.Message(to,mess)) print 'sent message with id',id def disconnect(self): self.client.sendInitPresence(1) self.client.disconnect() def userList(self): return self.client.getRoster().keys() def StepOn(self): try: self.Process() except: return 0 return 1 def setCB(self, CB): self.CB = CB self.client.RegisterHandler('message',self.messageCB) def messageCB(self,conn,mess): if ( mess.getBody() == None ): return self.CB(self,mess) 


рдпрд╣ рдХреЛрдб, рдирд┐рд░реНрдорд┐рдд рд╣реЛрдиреЗ рдкрд░, рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рдХрдиреЗрдХреНрдЯ рдХрдорд╛рдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИред рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рднреА рд╣реИред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рд╣реИред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХрд╛рдлреА рдХрдо рд╕рдордп рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╣рдо рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдлрд╛рд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВред


рдореИрдВрдиреЗ RSA рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрд╕рдордорд┐рдд рд╣реИ, рдЕрд░реНрдерд╛рддред рдкреНрд░рддреНрдпреЗрдХ рд╕рддреНрд░ рдореЗрдВ рд╣рдо рдирдП рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрд╛рдЧ рд╡рд┐рддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдмрдЬрд╛рдп, рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ HEX рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
рдореИрдВрдиреЗ рдЙрдиреНрд╣реАрдВ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрд▓рдЧ рдмрдирд╛рдпрд╛ред

rsa_decor.py
 # -*- coding: utf-8 -*- import rsa class Crypt: def __init__(self): #        self.keys = dict() #     (a,b) = self.genKey(1024) self.privateKey = b self.pubKey = a def hasKey(self,id): #      if self.keys.has_key(id)==False: return False else: return True def decodeKey(self,key): #         return rsa.PublicKey(1,1).load_pkcs1(key,format='DER') def saveKey(self,id,key): #  self.keys[id]= key def genKey(self,size): #   return rsa.newkeys(size, poolsize=8) def cryptMesg(self,to,mesg): #  getHex =mesg.encode('utf-8').encode('hex') a = rsa.encrypt(getHex, self.keys[to]) #print len(mesg),len(a) return a.encode('hex') def decryptMesg(self,mesg): #  ,    try: mess = rsa.decrypt(mesg.decode("hex"),self.privateKey) except rsa.pkcs1.DecryptionError: print "cant decrypt" return "#errorDecrypt" return mess.decode('hex').decode('utf-8') 


рдпрд╣рд╛рдБ рднреА, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рд╣рдо рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рд╕реНрдЯреЛрд░ рднреА рдХрд░рддреЗ рд╣реИрдВ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реА рдирд┐рдЬреА рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬрд┐рдпрд╛рдБ, рдЬрд┐рди рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢)ред

рдЪрд▓реЛ рдореБрдЦреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛ


рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдЬрд▓реНрджреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЛ рдореВрд░реНрддрд┐рдХрд▓рд╛ рджреЗрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЖрд╡реЗрджрди рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрд░, рдЬреЛ рднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рдерд╛ред

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЯреАрдХреЗ рдкрд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓рд╛, рдФрд░ рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдЕрдЬрдЧрд░ рдХреНрдпреВрдЯреА рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдо Pytt рдХреЛ Qt рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рд╕рдВрд╕реНрдХрд░рдг 4.7 рдерд╛ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╡рд┐рди рдХреЗ рддрд╣рдд рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЖрдкрдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рдкреИрдХреЗрдЬ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ)
sudo apt-get install pyqt4-dev-рдЯреВрд▓реНрд╕ libqt4-core libqt4-dev libqt4-gu python-qt4 qt4-designer
рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдпрд╣ рд╕реЗрдЯ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рддреЛ рдЪрд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдХреНрдпреВрдЯреА рдбрд┐рдЬрд╛рдЗрдирд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
рдкреНрд░рдкрддреНрд░ main_widget рдмрдирд╛рдПрдБред
рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ, рдХреЗрдВрджреНрд░реАрдп рд╡рд┐рдЬреЗрдЯ
- рд▓рдВрдмрд╡рдд рдкрд░рддред
рд╣рдо рдЗрд╕рдореЗрдВ 2 рд╡рд┐рдЬреЗрдЯ рд░рдЦреЗрдВрдЧреЗ: рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рдкрд░рдд рдЬрд┐рд╕рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЧрд╣ рд╣реЛрдЧреА рдФрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди, рдПрдХ рдлрд╛рдбрд╝рдиреЗрд╡рд╛рд▓рд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рда рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдПрдХ рд╡рд┐рдЬреЗрдЯ рд╢реАрдЯ рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕рдВрдкрд░реНрдХ рд╕реВрдЪреА рдбрд╛рд▓рддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдо QtDesigner рдХреЗ рдХрд╛рдо рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ (Qt рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИрдВ)
Ui рдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдкрд╛рдпрдерди рдХреЛрдб рдореЗрдВ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ pyuic4 рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
pyuic4 main_window.ui -o gui.py
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд╕рд╛рде, рдЬреИрдмрд░ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
рдЗрд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдХрдХреНрд╖рд╛ рд▓рд┐рдЦреЗрдВрдЧреЗред
        def __init__(self):               #                  self.loadConfig()               #                  self.crypt = Crypt()               #                   self.jb = sjabber(self.xmpp_jid,self.xmpp_pwd)               self.jb.connect()               #                   self.jb.setCB(self.messageCB)              # Qt-                  self.app = QApplication(sys.argv)               self.window = QMainWindow()               self.ui = Ui_MainWindow()               self.ui.setupUi(self.window) 

рдпрд╣рд╛рдВ рд╣рдо рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреВрдЯреА рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдФрд░ рд╕реНрд▓реЙрдЯ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдЗрд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП QApplication рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рд╡рд┐рдВрдбреЛ рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдмрдирд╛рдПрдВрдЧреЗ (рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдКрдкрд░ рдмрдирд╛рдпрд╛ рд╣реИ), рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рд╡рд┐рдВрдбреЛ рдореЗрдВ рд░рдЦреЗрдВрдЧреЗред
                #                       self.ui.pushButton.clicked.connect(self.sendMsg)               self.ui.lineEdit.returnPressed.connect(self.sendMsg)               self.window.show()               #                  userList = self.jb.userList()               for i in userList:                       self.ui.listWidget.addItem(i)               #                   self.ui.listWidget.currentRowChanged.connect(self.setToRow)               #                   self.ui.listWidget.setCurrentRow(0)               #    ""                 self.workThread = WorkThread()               self.workThread.setWorker(self.jb)               self.workThread.start() 

рдЬрдмреНрдмрд╛рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ "рдЪрд┐рдХреЛрдЯреА" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдХреЛ рднреА рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рд░рд╣реЗрдВрдЧреЗ рдФрд░ рдЧреИрдмрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рд╕реЗрд╡рд╛ рдХрд░реЗрдВрдЧреЗред рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдпрд╣ рд╡рд░реНрдЧ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреВрдЯреА рдХреЗ рд▓рд┐рдП рд╕реА ++ рдХреЛрдб рдХреЗ рд╕рдорд╛рди рд╣реИред
 class WorkThread(QThread):       def __init__(self):               QThread.__init__(self)       def setWorker(self,jb):               self.jb = jb       def run(self):               while self.jb.StepOn(): pass 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рд╣реИ, рдХреЙрд▓рдмреИрдХ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдереЛрдбрд╝реА рдЕрд▓рдЧ рдЫреЛрдЯреА рдЪреАрдЬреЛрдВ) рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдбреАрдИрдПрдлрд╝ рд╕рдВрджреЗрд╢ рд╕рдВрджреЗрд╢ (рд╕реЗрд▓реНрдл, рдХреЛрди, рдореЗрд╕)
        def messageCB(self,conn,mess):               #    ,                 #   ,                  if ( mess.getBody() == None ):                       return               msg = mess.getBody()               patern = re.compile('^#(getkey|sendkey|mesg|getlastmesg) ?(.*)')               res = patern.search(msg)               if res:                       #                       a = res.groups()[0]                       if a == "getkey":                               self.sendKey(mess.getFrom())                               if  self.crypt.hasKey(mess.getFrom())!=False:                                       conn.send(mess.getFrom(),"#getkey")                           elif a == "sendkey":                               if res.groups()[1]!='':                                       a = self.crypt.decodeKey(res.groups()[1].decode("hex"))                                       self.crypt.saveKey(mess.getFrom().getStripped(),a)                       elif a == "mesg":                               decryptMess = self.crypt.decryptMesg(res.groups()[1])                               if decryptMess=="#errorDecrypt":                                       self.sendKey(mess.getFrom())                                       self.print_("Error decrypt sendKey")                               else:                                       self.print_(self.to+"--> "+decryptMess)                       elif a == "getlastmesg*":                               print a 



рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЧ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реВрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд░рдордг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рдФрд░ рдбрд░рд╛рд╡рдирд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд░рд╣рд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рдирдХ рдЖрд░рдПрд╕рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреБрдВрдЬреА рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рддрд╛рд░реЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ 1024 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреЛрдб рдореЗрдВ рд▓рдЧрднрдЧ 52 рд╡рд░реНрдг рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдпрд╣ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рднреЗрдЬрддрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдПрдХ рднрдпрд╛рдирдХ рдмреИрд╕рд╛рдЦреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЬрдЧрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рдЬреНрдЮрд╛рди рдиреЗ рдореБрдЭреЗ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреАред

рдЖрдк рдЬреАрдердм рдкрд░ рд╕рднреА рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо

рд╕рдВрд╣рд┐рддрд╛ рдХреА рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

Source: https://habr.com/ru/post/In165243/


All Articles