o b%@sdZddlmZddlmZmZddlmZddlm Z ddl m Z ddl m Z mZddlmZmZmZGd d d e jZeejGd d d e jZGd dde je jZeddZeejGddde jZdS)z2 L{twisted.words} support for Instance Messenger. ) implementer)defererror)log)Failure)pb) basesupport interfaces)AWAYOFFLINEONLINEc@s@eZdZdZddZddZddZdd Zd d Zd d Z dS)TwistedWordsPersonzHI a facade for a person you can talk to through a twisted.words service.cCstj|||t|_dSN)rAbstractPerson__init__r status)selfname wordsAccountrr?)rXrAget)rdict_ groupNamerrrremote_setGroupMetadatas  z*TwistedWordsClient.remote_setGroupMetadatacC&|||jd||j|S)N joinGroup)rWrEr r# addCallback_cbGroupJoinedrUrrrrwzTwistedWordsClient.joinGroupcCrvrH)rWrGr r#rx _cbGroupLeftrUrrrrIrzzTwistedWordsClient.leaveGroupcCs0|j||}|dd|jd|dS)Nsysz you joinedgetGroupMembers)r.rXrWrar r#rr-r groupConvrrrrys z!TwistedWordsClient._cbGroupJoinedcCs.td||j||d}|dddS)NleftrCr|zyou left)r+r.rXrWrar~rrrr{s zTwistedWordsClient._cbGroupLeftcCs4td||jdur|j|||_|jdS)NzConnected Words Client!)r+rNcallbackr r.r/)rr rrr connecteds   zTwistedWordsClient.connectedr)r2r3r4r5rrTrWrXrZr_rdrhrjrlrorqrurwrIryr{rrrrrrK`s(     rKN) twisted.wordsztwisted.realityc@sTeZdZdZeZeZ dddZddZ ddZ d d Z d d Z d dZ ddZdS) PBAccountPBNc CsXtj|||||||g|_|sdd|fg}|D]\}} } |jt|| | gqdS)z_ @param username: The name of your PB Identity. @type username: string rN)rAbstractAccountrservicesappend pbFrontEnds) rrM autoLoginusernamepasswordhostportr serviceTyperPrQrrrrs  zPBAccount.__init__csNjs"js"d_}|jfdd}|||Std)z @returns: this breaks with L{interfaces.IAccount} @returntype: DeferredList of L{interfaces.IClient}s rCcs6|D]\}}|r||qt|qdSr)registerAccountClient _cb_logOnrerr)resultssuccessr-rRrrr registerManys    z%PBAccount.logOn..registerManyzConnection in progress) _isConnecting _isOnline _startLogOnr! _loginFailedrxrConnectionError)rrRr'rrrrlogOns     zPBAccount.logOncCsdSrrrrrrlogOffszPBAccount.logOffcCs6tdddt|j|j}|j|j|j|fd|S)Nz Connecting... end callbackArgs)r+r getObjectAtrr addCallbacks _cbConnected _ebConnected)rrRr'rrrrs zPBAccount._startLogOncCs@tdtdddt||j|j}|j|j|j|fd|S)Nz Connected!zIdentifying...rrr)r+r authIdentityrrr_cbIdentr)rrootrRr'rrrrs  zPBAccount._cbConnectedc Cs|std|ttdStdg}|jD]"\}}}t}||||||||}|d||| |j qt |S)Nzfalsely identified.zusername or password incorrectz Identified!attach) r+rr ExceptionrrDeferredrr#rxr DeferredList) ridentrRdl handlerClasssnamepnamer'handlerrrrrs   zPBAccount._cbIdentcCs td|S)NzNot connected.)r+)rrrrrrszPBAccount._ebConnectedr)r2r3r4 gatewayTyper6 _groupFactoryr _personFactoryrrrrrrrrrrrrs  r)r5zope.interfacertwisted.internetrrtwisted.pythonrtwisted.python.failurertwisted.spreadrtwisted.words.imrr twisted.words.im.localsr r r rr IGroupr8r6 ReferenceableAbstractClientMixinrKrIAccountrrrrrrs    !* ]