XMPP рдкрдмреНрд▓рд┐рд╢ рдХрд░рдирд╛ / рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб рдХреЗ рд╕рд╛рде рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдирд╛

рдЖрдкрдХрд╛ рджрд┐рди рд╢реБрдн рд╣реЛ! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ XMPP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Twisted рдФрд░ Wokkel рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓ рдкреНрд░рдХрд╛рд╢рди / рд╕рджрд╕реНрдпрддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕реЗ рдХрд░реЗрдВред XMPP XEP-0060 рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдкрдм / рдЙрдк рдзрдиреНрдпрд╡рд╛рдж рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдкрдм / рдЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдШрдЯрдирд╛ рдФрд░ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ Apple рдЕрдкрдиреЗ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдВрджрд░ Wokkel- рдЖрдзрд╛рд░рд┐рдд рдкрдм / рдЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХред





рдХреНрдпреЛрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд / рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ?



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



рдЙрдкрдХрд░рдг



рд╕рдорд╛рдзрд╛рди XMPP рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ XEP-0060 рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред XMPP рдХреЛ рдЗрд╕рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдФрд░ рд╕рдореГрджреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдмрджрд▓реЗ рдореЗрдВ, рдореБрдбрд╝рдХрд░, рдЕрдЬрдЧрд░ рдореЗрдВ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдиреЗрдЯрд╡рд░реНрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред Twisted.words рдореЗрдВ рдХреБрдЫ рдореВрд▓ xmpp рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдорд░реНрдерди рд╣реИ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХреЛрдИ рдкрдм / рдЙрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред рд╡реЛрдХреНрдХреЗрд▓ рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб рдХреЗ рд▓рд┐рдП рдкрдм / рдЙрдк рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд╡реЛрдХреЗрд▓ рди рдХреЗрд╡рд▓ рдкрдм / рдЙрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ ( рд╕реЗрд╡рд╛ рдХреА рдЦреЛрдЬ ) рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред



рдЙрджрд╛рд╣рд░рдг



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



рдкрд╣рд▓реЗ рдЖрдкрдХреЛ XMPPClient рдХреНрд▓рд╛рд╕ рдХреА рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ (рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ)ред рд╡рд╣ рдЬрдмреНрдмрд╛рд░ рд╕рд░реНрд╡рд░ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдмрдВрдзрди рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред PubSubClient рдпрд╛ PubSubService рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдореЗрдВ рдкрдм / рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрддрд░ рдкрд░ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рд╣рдо setHandlerParent рдХрд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рд╕реЗрд╡рд╛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХреЗрдВред рд╣рдо рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрдм / рдЙрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдб рдХреЛ рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ; рдЬрдм рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВрдбрд▓рд░ рдХрд╣рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдХрджрдо рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИред



def рдореБрдЦреНрдп ( ) :

рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВред StartLogging ( sys ред рд╕реНрдЯрдбрдЖрдЙрдЯ )

рд╡рд┐рдХрд▓реНрдк, рдЖрд░реНрдЧ = parse_args ( )

jid, resource, password = args

рд╕реЗрд╡рд╛ = рд╡рд┐рдХрд▓реНрдкред рд╕реЗрд╡рд╛

рдлреБрд▓рдЬреАрдж = рдЬрдмреНрдмрд╛рд░ред рдЬрд┐рдж рдЗрдВрдЯрд░реНрдирдЬрд┐рдб ( jid + '/' + рд╕рдВрд╕рд╛рдзрди )

рдкрд░рд┐рд╡рд╣рди = XMPPClient ( рдлреБрд▓рдЬрд┐рдб, рдкрд╛рд╕рд╡рд░реНрдб )

рдкрд░рд┐рд╡рд╣рдиред logTraffic = рд╕рддреНрдп

рдкреНрд░реЛрдЯреЛрдХреЙрд▓ = рдЧреНрд░рд╛рд╣рдХ ( jabberред jid ред internJID ( рд╕реЗрд╡рд╛ ) ) рдпрджрд┐ рд╕реЗрд╡рд╛ рдФрд░ рд╕реЗрд╡рд╛ ( )

рдкреНрд░реЛрдЯреЛрдХреЙрд▓ред рд╕реЗрдЯрд╣реИрдВрдбрд▓рд░рдкреЗрдВрдЯ ( рдкрд░рд┐рд╡рд╣рди )

рдкрд░рд┐рд╡рд╣рдиред рдкреНрд░рд╛рд░рдВрдн рд╕реЗрд╡рд╛ ( )

рд░рд┐рдПрдХреНрдЯрд░ред рдЪрд▓рд╛рдПрдВ ( )




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



рд╡рд░реНрдЧ рд╕реЗрд╡рд╛ ( PubSubService ) :

def __init__ ( рд╕реНрд╡ ) :

PubSubServiceред __in__ ( рд╕реНрд╡ )

рд╕реНрд╡ ._ рд╕рджрд╕реНрдпрддрд╛рдПрдБ = { }



рдбреАрдИрдПрд▓ рдкреНрд░рдХрд╛рд╢рди ( рд╕реНрд╡рдпрдВ , рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛, рд╕реЗрд╡рд╛, рдиреЛрдбрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░, рдЖрдЗрдЯрдо ) :

рд╕реНрд╡ ред sendData ( рдЖрдЗрдЯрдо )

рд╡рд╛рдкрд╕реА рдХрд░рдирд╛ рд╕рдлрд▓ ( рдХреЛрдИ рдирд╣реАрдВ )



рдбреАрдИрдПрдлрд╝ рд╕рджрд╕реНрдпрддрд╛ ( рд╕реНрд╡рдпрдВ , рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛, рд╕реЗрд╡рд╛, рдиреЛрдбрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░, рдЧреНрд░рд╛рд╣рдХ ) :

рдпрджрд┐ рд╕реНрд╡ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рд╣реИрдВ ред_ рд╕рджрд╕реНрдпрддрд╛рдПрдБ:

рдЬрд╛рдирдХрд╛рд░реА = рд╕реНрд╡ ._ рд╕рджрд╕реНрдпрддрд╛рдПрдБ [ рдЧреНрд░рд╛рд╣рдХ ]

рдФрд░ :

рдЬрд╛рдирдХрд╛рд░реА = рд╕рджрд╕реНрдпрддрд╛ ( NODE_NAME, рдЧреНрд░рд╛рд╣рдХ, 'рд╕рджрд╕реНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд' )

рд╕реНрд╡рдпрдВ ._ рд╕рджрд╕реНрдпрддрд╛рдПрдБ [ рдЧреНрд░рд╛рд╣рдХ ] = рдЬрд╛рдирдХрд╛рд░реА

рд╡рд╛рдкрд╕реА рдХрд░рдирд╛ рд╕рдлрд▓ ( рдЬрд╛рдирдХрд╛рд░реА )



рдбреАрдПрдб рд╕реЗрдВрдбрдЯрд╛ ( рд╕реНрд╡рдпрдВ , рдЖрдЗрдЯрдо ) :

рдкреНрд░реЗрд╖рдХ = [ ]

рд╕реНрд╡ ._ рд╕рджрд╕реНрдпрддрд╛ рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП ред рдорд╛рди ( ) :

sendListред append ( [ рд╕рджрд╕реНрдпрддрд╛ред рдЧреНрд░рд╛рд╣рдХ , рдХреЛрдИ рдирд╣реАрдВ , рдЖрдЗрдЯрдо ] )

рд╕реНрд╡ ред рд╕реВрдЪрдирд╛рдкреНрд░рдХрд╛рд╢рдХ ( рд╕реНрд╡- рдЕрднрд┐рднрд╛рд╡рдХ ред jid , NODE_NAME, sendList )




рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо рдЙрд╕реЗ рдЙрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдкрддрд╛ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рд╡рд╣ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдЧрд╛ред рдЬрдм рд╕рд░реНрд╡рд┐рд╕ (XMPPClient) рдХреЛ рдЬреИрдмрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдзрд┐рдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдиреЗрдХреНрд╢рдирдЗрдирдСрд░реНрдЧреЗрдирд╛рдЗрдЬреНрдб рд╡рд┐рдзрд┐ рдХреЛ рд╕реЗрд╡рд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (XMPPClient) рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд╣рдореЗрдВ рдЬрд┐рд╕ рд╕реЗрд╡рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЙрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд╕рджрд╕реНрдпрддрд╛ рд▓реА рдЧрдИ рд╣реИред рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдРрд╕реА рдШрдЯрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ 4 рд╕реЗрдХрдВрдб рдореЗрдВ рд╣реЛрдЧреА рдФрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА рдФрд░ рд╕реЗрд╡рд╛ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬ рджреЗрдЧреАред рдЕрдЧреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдареАрдХ рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд XML рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╕ рдЗрддрдирд╛ рд╣реАред



рд╡рд░реНрдЧ рдЧреНрд░рд╛рд╣рдХ ( PubSubClient ) :

def __init__ ( рд╕реНрд╡рдпрдВ , рд╕реЗрд╡рд╛ ) :

PubSubClientред __in__ ( рд╕реНрд╡ )

рд╕реНрд╡рдпрдВ .__ рд╕реЗрд╡рд╛ = рд╕реЗрд╡рд╛



def рдХрдиреЗрдХреНрд╢рди

PubSubClientред рдХрдиреЗрдХреНрд╢рдирдпреБрдХреНрдд ( рд╕реНрд╡ )

d = рд╕реНрд╡ ред рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ ( рд╕реНрд╡ ред _ рд╕реЗрд╡рд╛, NODE_NAME, рд╕реНрд╡ ред рдорд╛рддрд╛-рдкрд┐рддрд╛ ред jid )

рдШред addCallback ( рд▓рдВрдмреЛ рд╕рдлрд▓рддрд╛: рдХрд╛рд░реНрдпред рд▓реВрдкрд┐рдВрдЧрдХреЙрд▓ ( SendGeneratedData, рдЖрддреНрдо ) )

рдШред AddCallback ( рд▓реИрдореНрдмреНрдбрд╛ lc: lcред рдкреНрд░рд╛рд░рдВрдн ( 5 , рдЕрдм = рд╕рддреНрдп ) )



рдбреАрдИрдПрдЯ рдЖрдЗрдЯрдо рд╣рдЯрд╛рдП рдЧрдП ( рд╕реНрд╡рдпрдВ , рдИрд╡реЗрдВрдЯ ) :

рдШрдЯрдирд╛ рдореЗрдВ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП ред рдЖрдЗрдЯрдо :

рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВред рд╕рдВрджреЗрд╢ ( рдЖрдЗрдЯрдоред getAttribute ( 'рдкреНрд░реЗрд╖рдХ' ) + 'рднреЗрдЬрддрд╛ рд╣реИ' +

рдЖрдЗрдЯрдоред getAttribute ( 'рд╕рдВрджреЗрд╢' ) + 'рдкрд░' рдЖрдЗрдЯрдоред getAttribute ( 'рд╕рдордп' )



рдбреАрдПрдб рд╕реЗрдВрдбрдЯрд╛ ( рд╕реНрд╡рдпрдВ , рдЖрдЗрдЯрдо ) :

рд╕реНрд╡ ред рдкреНрд░рдХрд╛рд╢рд┐рдд ( рд╕реНрд╡рдпрдВ .__ рд╕реЗрд╡рд╛, NODE_NAME, рдЖрдЗрдЯрдо )


def sendeneratedData ( рдкреНрд░реЛрдЯреЛрдХреЙрд▓ ) :

рддрддреНрд╡ = рддрддреНрд╡ ( ( рдХреЛрдИ рдирд╣реАрдВ , 'рдЖрдЗрдЯрдо' ) )

рддрддреНрд╡ред рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ [ 'рдкреНрд░реЗрд╖рдХ' ] = рдкреНрд░реЛрдЯреЛрдХреЙрд▓ред рдорд╛рддрд╛-рдкрд┐рддрд╛ред рдЬрд┐рдж рдкреВрд░реНрдг ( )

рддрддреНрд╡ред рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ [ 'рд╕рдордп' ] = рд╕рдордпред strftime ( "% H:% M:% S" , рд╕рдордпред рд╕реНрдерд╛рдиреАрдп рд╕рдордп ( ) )

рддрддреНрд╡ред рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ [ 'рд╕рдВрджреЗрд╢' ] = 'рд╣реИрд▓реЛ!'

рдкреНрд░реЛрдЯреЛрдХреЙрд▓ред sendData ( [ рддрддреНрд╡ ] )




рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ

рдСрдкрд░реЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ: pubsub.py test@example.com рд╕рд░реНрд╡рд░ рдкрд╛рд╕рд╡рд░реНрдб

рджреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЪрд▓рд╛рдПрдВ: pubsub.py --service test@example.com/server test@example.com client1 рдкрд╛рд╕рд╡рд░реНрдб

pubsub.py --service test@example.com/server test@example.com client2 рдкрд╛рд╕рд╡рд░реНрдб



Apple рдХреЛ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд▓реЗрдирд╛ рджреЗрдирд╛ рд╣реИ?



рдЬреЛ рд╣рдордиреЗ рдЕрднреА рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рд╕реИрдХрдбрд╝реЛрдВ рдкрдм / рдЙрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрджрд┐ рд╣рдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рд▓реАрдл рдиреЛрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди persistItems = рдЭреВрдареА рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд╕рд╛рде = рд╕рд╣реА рд▓реЛрдб рдФрд░ рдПрдХ рдУрдкрди рдПрдХреНрд╕реЗрд╕ рдореЙрдбрд▓, рд╕рдВрдмрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛, рдЦреЛрдЬ, рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдмрдирд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЖрджрд┐ред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдкреВрд░реЗ рдкрдм / рдЙрдк рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрд╡рд╢реНрдпрдХ рднрд╛рдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рд╡реЛрдХреНрдХрд╛рд▓ рдХреЗ рд▓реЗрдЦрдХ рд░рд╛рд▓реНрдлрд╝ рдореАрдЬреЗрд░ рдиреЗ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдФрд░ рдЗрджрд╛рд╡реЙрд▓ рдХреЛ рд▓рд┐рдЦрд╛ред рдЗрджрд╛рд╡рд▓ рд╡реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдРрдб-рдСрди рд╣реИред рдпрд╣ рд▓рдЧрднрдЧ XEP-0060 рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ http рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред Idavoll рдХрд╛ рдЙрдкрдпреЛрдЧ Apple рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЛ рдпрд╣рд╛рдВ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред



рдирд┐рд╖реНрдХрд░реНрд╖



рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдФрд░ krondo.com/?page_id=1327 рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡реЛрдХреЗрд▓ рдкрд░ рдмрд╣реБрдд рдХрдо рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрджрд╛рд╡рд▓ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдЙрддреНрдкрдиреНрди рдкреНрд░рд▓реЗрдЦрди рд░рд╣рддрд╛ рд╣реИред

рд╕реАрдЦрдиреЗ рдореЗрдВ рд╕рдлрд▓рддрд╛!



All Articles