package Ġinfo . mqtt . android . service Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Context Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . Mqtt Client Persistence Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . Mqtt Callback Extended Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . IM qtt Delivery Token Ċ import Ġjava . util . HashMap Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . Mqtt Message Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . Mqtt Connect Options Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . Mqtt Async Client Ċ import Ġkotlin . jvm . Volatile Ċ import Ġandroid . os . Power Manager . Wake Lock Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . Disconnected Buffer Options Ċ import Ġandroid . os . Bundle Ċ import Ġjava . io . File Ċ import Ġjava . lang . Exception Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . persist . Memory Persistence Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . persist . Mqtt Default File Persistence Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . IM qtt ActionListener Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . IM qtt Token Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . Mqtt Exception Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . Arrays Ċ import Ġorg . eclipse . p aho . client . mqtt v 3 . IM qtt Message Listener Ċ import Ġandroid . util . Log Ċ import Ġandroid . os . Power Manager Ċ import Ġinfo . mqtt . android . service . ping . Alarm Ping Sender Ċ Ċ /** Ċ Ġ* ĠM qtt Connection Ġholds Ġa ĠM qtt Async Client Ġ{ host , port , clientId } Ġinstance Ġto Ġperform Ċ Ġ* ĠMQTT Ġoperations Ġto ĠMQTT Ġbroker . Ċ Ġ* Ċ Ġ* ĠMost Ġof Ġthe Ġmajor ĠAPI Ġhere Ġis Ġintended Ġto Ġimplement Ġthe Ġmost Ġgeneral Ġforms Ġof Ċ Ġ* Ġthe Ġmethods Ġin ĠIM qtt Async Client , Ġwith Ġslight Ġadjust ments Ġfor Ġthe ĠAndroid Ċ Ġ* Ġenvironment < br ></ br > Ċ Ġ* ĠThese Ġadjust ments Ġusually Ġconsist Ġof Ġadding Ġtwo Ġparameters Ġto Ġeach Ġmethod Ġ:- Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġinvocation Context Ġ- Ġa Ġstring Ġpassed Ġfrom Ġthe Ġapplication Ġto Ġidentify Ġthe Ċ Ġ* Ġcontext Ġof Ġthe Ġoperation Ġ( main ly Ġincluded Ġfor Ġsupport Ġof Ġthe Ġjavascript ĠAPI Ċ Ġ* Ġimplementation ) Ċ Ġ* Ġ Ġ* Ġactivity Token Ġ- Ġa Ġstring Ġpassed Ġfrom Ġthe ĠActivity Ġto Ġre late Ġback Ġto Ġa Ċ Ġ* Ġcallback Ġmethod Ġor Ġother Ġcontext - specific Ġdata Ċ Ġ* Ċ Ġ* ĠOperations Ġare Ġvery Ġmuch Ġasynchronous , Ġso Ġsuccess Ġand Ġfailure Ġare Ġnotified Ġby Ċ Ġ* Ġpack ing Ġthe Ġrelevant Ġdata Ġinto ĠIntent Ġobjects Ġwhich Ġare Ġbroadcast Ġback Ġto Ġthe Ċ Ġ* ĠActivity Ġvia Ġthe ĠM qtt Service . callback To Activity () Ġmethod . Ċ Ġ* Ċ Ġ* ĠConstructor Ġ- Ġcreate Ġan ĠM qtt Connection Ġto Ġcommunicate Ġwith ĠMQTT Ġserver Ċ Ġ* Ċ Ġ* Ġ@ param Ġservice ĠĠĠĠĠ Ġour Ġ" parent " Ġservice Ġ- Ġwe Ġmake Ġcallbacks Ġto Ġit Ċ Ġ* Ġ@ param Ġserver URI ĠĠĠ Ġthe ĠURI Ġof Ġthe ĠMQTT Ġserver Ġto Ġwhich Ġwe Ġwill Ġconnect Ċ Ġ* Ġ@ param ĠclientId ĠĠĠĠ Ġthe Ġname Ġby Ġwhich Ġwe Ġwill Ġidentify Ġourselves Ġto Ġthe ĠMQTT Ċ Ġ* Ġserver Ċ Ġ* Ġ@ param Ġpersistence Ġ Ġthe Ġpersistence Ġclass Ġto Ġuse Ġto Ġstore Ġin - flight Ġmessage . ĠIf Ċ Ġ* Ġnull Ġthen Ġthe Ġdefault Ġpersistence Ġmechanism Ġis Ġused Ċ Ġ* Ġ@ param Ġclient Handle Ġthe Ġ" handle " Ġby Ġwhich Ġthe Ġactivity Ġwill Ġidentify Ġus Ċ Ġ*/ Ċ internal Ġclass ĠM qtt Connection ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠM qtt Service , Ġ// Ġfields Ġfor Ġthe Ġconnection Ġdefinition ĊĠĠĠ Ġvar Ġserver URI : ĠString , Ġvar ĠclientId : ĠString , Ġprivate Ġvar Ġpersistence : ĠM qtt Client Persistence ?, Ġ// ĠClient Ġhandle , Ġused Ġfor Ġcallbacks ... ĊĠĠĠ Ġvar Ġclient Handle : ĠString Ċ ) Ġ: ĠM qtt Callback Extended Ġ{ ĊĠĠĠ Ġ// ĠSaved Ġsent Ġmessages Ġand Ġtheir Ġcorresponding ĠTop ics , Ġactivity Tokens Ġand ĊĠĠĠ Ġ// Ġinvocation Contexts , Ġso Ġwe Ġcan Ġhandle Ġ" delivery Complete " Ġcallbacks Ġfrom Ġthe Ġmqtt Client ĊĠĠĠ Ġprivate Ġval Ġsaved Topics : ĠMutable Map < IM qtt Delivery Token ?, ĠString > Ġ= ĠHashMap () ĊĠĠĠ Ġprivate Ġval Ġsaved Sent Messages : ĠMutable Map < IM qtt Delivery Token ?, ĠM qtt Message > Ġ= ĠHashMap () ĊĠĠĠ Ġprivate Ġval Ġsaved Activity Tokens : ĠMutable Map < IM qtt Delivery Token ?, ĠString > Ġ= ĠHashMap () ĊĠĠĠ Ġprivate Ġval Ġsaved Invocation Contexts : ĠMutable Map < IM qtt Delivery Token ?, ĠString > Ġ= ĠHashMap () ĊĠĠĠ Ġprivate Ġval Ġwake Lock Tag Ġ= Ġjava Class . simple Name Ġ+ Ġ" Ġ" Ġ+ ĠclientId Ġ+ Ġ" Ġ" Ġ+ Ġ" on Ġhost Ġ" Ġ+ Ġserver URI ĊĠĠĠ Ġprivate Ġvar Ġconnect Options : ĠM qtt Connect Options ? Ġ= Ġnull ĊĊĠĠĠ Ġ// store Ġconnect ĠActivity Token Ġfor Ġreconnect ĊĠĠĠ Ġprivate Ġvar Ġreconnect Activity Token : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġour Ġclient Ġobject Ġ- Ġinstantiated Ġon Ġconnect ĊĠĠĠ Ġprivate Ġvar Ġmy Client : ĠM qtt Async Client ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġalarm Ping Sender : ĠAlarm Ping Sender ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġdisconnected Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġclean Session Ġ= Ġtrue ĊĊĠĠĠ Ġ// ĠIndic ate Ġthis Ġconnection Ġis Ġconnecting Ġor Ġnot . ĊĠĠĠ Ġ// ĠThis Ġvariable Ġuses Ġto Ġavoid Ġreconnect Ġmultiple Ġtimes . ĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġis Connecting Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġwake lock : ĠW ake Lock ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbuffer Opts : ĠDis connected Buffer Options ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConnect Ġto Ġthe Ġserver Ġspecified Ġwhen Ġwe Ġwere Ġinstantiated ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġoptions ĠĠĠĠĠĠĠĠĠĠ Ġtimeout , Ġetc ĊĠĠĠĠ Ġ* Ġ@ param Ġinvocation Context Ġarbitrary Ġdata Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Token ĠĠĠĠ Ġarbitrary Ġidentifier Ġto Ġbe Ġpassed Ġback Ġto Ġthe ĠActivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġconnect ( options : ĠM qtt Connect Options ?, Ġinvocation Context : ĠString ?, Ġactivity Token : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnect Options Ġ= Ġoptions ĊĠĠĠĠĠĠĠ Ġreconnect Activity Token Ġ= Ġactivity Token ĊĠĠĠĠĠĠĠ Ġif Ġ( options Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclean Session Ġ= Ġoptions . is Clean Session ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( options . is Clean Session ) Ġ{ Ġ// Ġif Ġit 's Ġa Ġclean Ġsession , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdiscard Ġold Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . message Store . persistence Dao (). delete Client Handle ( client Handle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġservice . trace Debug (" Connecting Ġ{$ server URI } Ġas Ġ{$ clientId }") ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġactivity Token ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġinvocation Context ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . CONNECT _ ACTION ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( persistence Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġask ĠAndroid Ġwhere Ġwe Ġcan Ġput Ġfiles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsome Ġmagic ĠAndroid ĠOS Ġhas Ġno Ġexternal File Dir Ġor Ġit Ġwill Ġthrow Ġan Ġexception , Ġso Ġuse Ġinternal Ġstorage Ġdirectly . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmy Dir : ĠFile ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuse Ġinternal Ġstorage Ġinstead . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Dir Ġ= Ġservice . get Dir ( TEMP , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// skip ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Dir Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Dir Ġ= Ġservice . files Dir ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Dir Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= Ġmy Dir . absolute Path Ġ+ ĠFile . separator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Dir Ġ= ĠFile ( string Builder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Dir . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Dir Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersistence Ġ= Ġif Ġ( my Dir Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcompatible Ġvery Ġfew Ġmagic ĠAndroid ĠOS . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMemory Persistence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuse Ġthat Ġto Ġsetup ĠMQTT Ġclient Ġpersistence Ġstorage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM qtt Default File Persistence ( my Dir . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= Ġobject Ġ: ĠM qtt Connection Listener ( result Bundle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( async Action Token : ĠIM qtt Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . put Boolean ( Mqtt Service Constants . SESSION _ PRESENT , Ġasync Action Token . session Present ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo After Connect Success ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" connect Ġsuccess !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( async Action Token : ĠIM qtt Token ?, Ġexception : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , Ġexception ?. localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . put Serializable ( Mqtt Service Constants . CALLBACK _ EXCEPTION , Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error (" connect Ġfail , Ġcall Ġconnect Ġto Ġreconnect . reason : Ġ${ exception ?. message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo After Connect Fail ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Connecting ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" my Client Ġ!= Ġnull Ġand Ġthe Ġclient Ġis Ġconnecting . ĠConnect Ġreturn Ġdirectly .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" Connect Ġreturn : is Connecting :$ is Connecting . disconnected :$ disconnected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! disconnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" my Client Ġ!= Ġnull Ġand Ġthe Ġclient Ġis Ġconnected Ġand Ġnotify !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo After Connect Success ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" my Client Ġ!= Ġnull Ġand Ġthe Ġclient Ġis Ġnot Ġconnected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" Do ĠReal Ġconnect !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Connecting State ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. connect ( connect Options , Ġinvocation Context , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalarm Ping Sender Ġ= ĠAlarm Ping Sender ( service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client Ġ= ĠM qtt Async Client ( server URI , ĠclientId , Ġpersistence , Ġalarm Ping Sender ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// , Ġnull , ĉ new ĠAndroid High Resolution Timer ()); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. set Callback ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" Do ĠReal Ġconnect !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Connecting State ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. connect ( connect Options , Ġinvocation Context , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error (" Exception Ġoccurred Ġattempting Ġto Ġconnect : Ġ" Ġ+ Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Connecting State ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo After Connect Success ( result Bundle : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// since Ġthe Ġdevice 's Ġcpu Ġcan Ġgo Ġto Ġsleep , Ġacquire Ġa Ġwake lock Ġand Ġdrop Ġit Ġlater . ĊĠĠĠĠĠĠĠ Ġacquire Wake Lock () ĊĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . OK , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġdeliver Back log () ĊĠĠĠĠĠĠĠ Ġset Connecting State ( false ) ĊĠĠĠĠĠĠĠ Ġdisconnected Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġrelease Wake Lock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconnect Complete ( reconnect : ĠBoolean , Ġserver URI : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . CONNECT _ EXT ENDED _ ACTION ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . put Boolean ( Mqtt Service Constants . CALLBACK _ RE CONNECT , Ġreconnect ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ SERVER _ URI , Ġserver URI ) ĊĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . OK , Ġresult Bundle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo After Connect Fail ( result Bundle : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġacquire Wake Lock () ĊĠĠĠĠĠĠĠ Ġdisconnected Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġset Connecting State ( false ) ĊĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġrelease Wake Lock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Exception ( result Bundle : ĠBundle , Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , Ġe . localized Message ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . put Serializable ( Mqtt Service Constants . CALLBACK _ EXCEPTION , Ġe ) ĊĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAttempt Ġto Ġdeliver Ġany Ġoutstanding Ġmessages Ġwe 've Ġreceived Ġbut Ġwhich Ġthe ĊĠĠĠĠ Ġ* Ġapplication Ġhasn 't Ġacknowled ged . ĠIf Ġ" clean Session " Ġwas Ġspecified , Ġwe 'll ĊĠĠĠĠ Ġ* Ġhave Ġalready Ġpur ged Ġany Ġsuch Ġmessages Ġfrom Ġour Ġmessage Store . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdeliver Back log () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . message Store . persistence Dao (). all Ar rived ( client Handle ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= Ġmessage To Bundle ( it . message Id , Ġit . topic , Ġit . mqtt Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . MESSAGE _ AR RI VED _ ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . OK , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġbundle Ġcontaining Ġall Ġrelevant Ġdata Ġpert aining Ġto Ġa Ġmessage ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠmessageId Ġthe Ġmessage 's Ġidentifier Ġin Ġthe Ġmessage Store , Ġso Ġthat Ġa ĊĠĠĠĠ Ġ* Ġcallback Ġcan Ġbe Ġmade Ġto Ġremove Ġit Ġonce Ġdelivered ĊĠĠĠĠ Ġ* Ġ@ param Ġtopic ĠĠĠĠ Ġthe Ġtopic Ġon Ġwhich Ġthe Ġmessage Ġwas Ġdelivered ĊĠĠĠĠ Ġ* Ġ@ param Ġmessage ĠĠ Ġthe Ġmessage Ġitself ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġbundle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmessage To Bundle ( message Id : ĠString ?, Ġtopic : ĠString ?, Ġmessage : ĠM qtt Message ): ĠBundle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult . putString ( Mqtt Service Constants . CALLBACK _ MESSAGE _ ID , ĠmessageId ) ĊĠĠĠĠĠĠĠ Ġresult . putString ( Mqtt Service Constants . CALLBACK _ DEST INATION _ NAME , Ġtopic ) ĊĠĠĠĠĠĠĠ Ġresult . put Parcelable ( Mqtt Service Constants . CALLBACK _ MESSAGE _ PAR CEL , ĠParcel able Mqtt Message ( message )) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClose Ġconnection Ġfrom Ġthe Ġserver ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . trace Debug (" close () ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠM qtt Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPass Ġa Ġnew Ġbundle , Ġlet Ġhandle Exception Ġstores Ġerror Ġmessages . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( Bundle (), Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis connect Ġfrom Ġthe Ġserver ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġqu ies ce Timeout ĠĠĠ Ġin Ġmilliseconds ĊĠĠĠĠ Ġ* Ġ@ param Ġinvocation Context Ġarbitrary Ġdata Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Token ĠĠĠĠ Ġarbitrary Ġstring Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġactivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdisconnect ( qu ies ce Timeout : ĠLong , Ġinvocation Context : ĠString ?, Ġactivity Token : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . trace Debug (" disconnect () ") ĊĠĠĠĠĠĠĠ Ġdisconnected Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġactivity Token ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġinvocation Context ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . DIS CONNECT _ ACTION ) ĊĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ!= Ġnull Ġ&& Ġmy Client !!. isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= ĠM qtt Connection Listener ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. disconnect ( qu ies ce Timeout , Ġinvocation Context , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error ( Mqtt Service Constants . DIS CONNECT _ ACTION Ġ+ Ġ" Ġ" Ġ+ ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( connect Options Ġ!= Ġnull Ġ&& Ġconnect Options !!. is Clean Session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassume Ġwe 'll Ġclear Ġthe Ġstored Ġmessages Ġat Ġthis Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . message Store . persistence Dao (). delete Client Handle ( client Handle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrelease Wake Lock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis connect Ġfrom Ġthe Ġserver ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinvocation Context Ġarbitrary Ġdata Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Token ĠĠĠĠ Ġarbitrary Ġstring Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġactivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdisconnect ( invocation Context : ĠString ?, Ġactivity Token : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . trace Debug (" disconnect () ") ĊĠĠĠĠĠĠĠ Ġdisconnected Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġactivity Token ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġinvocation Context ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . DIS CONNECT _ ACTION ) ĊĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ!= Ġnull Ġ&& Ġmy Client !!. isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= ĠM qtt Connection Listener ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. disconnect ( invocation Context , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error ( Mqtt Service Constants . DIS CONNECT _ ACTION Ġ+ Ġ" Ġ" Ġ+ ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( connect Options Ġ!= Ġnull Ġ&& Ġconnect Options !!. is Clean Session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassume Ġwe 'll Ġclear Ġthe Ġstored Ġmessages Ġat Ġthis Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . message Store . persistence Dao (). delete Client Handle ( client Handle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrelease Wake Lock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġwe Ġare Ġconnected Ġto Ġan ĠMQTT Ġserver ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Connected : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmy Client Ġ!= Ġnull Ġ&& Ġmy Client !!. isConnected ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPublish Ġa Ġmessage Ġon Ġa Ġtopic ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtopic ĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Ġtopic Ġon Ġwhich Ġto Ġpublish Ġ- Ġrepresented Ġas Ġa Ġstring , Ġnot ĊĠĠĠĠ Ġ* Ġan ĠM qtt Topic Ġobject ĊĠĠĠĠ Ġ* Ġ@ param Ġpayload ĠĠĠĠĠĠĠĠĠĠ Ġthe Ġcontent Ġof Ġthe Ġmessage Ġto Ġpublish ĊĠĠĠĠ Ġ* Ġ@ param Ġq os ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Ġquality Ġof Ġservice Ġrequested ĊĠĠĠĠ Ġ* Ġ@ param Ġretained ĠĠĠĠĠĠĠĠĠ Ġwhether Ġthe ĠMQTT Ġserver Ġshould Ġretain Ġthis Ġmessage ĊĠĠĠĠ Ġ* Ġ@ param Ġinvocation Context Ġarbitrary Ġdata Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Token ĠĠĠĠ Ġarbitrary Ġstring Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġactivity ĊĠĠĠĠ Ġ* Ġ@ return Ġtoken Ġfor Ġtracking Ġthe Ġoperation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpublish ( ĊĠĠĠĠĠĠĠ Ġtopic : ĠString , ĊĠĠĠĠĠĠĠ Ġpayload : ĠByteArray ?, ĊĠĠĠĠĠĠĠ Ġq os : ĠQ oS , ĊĠĠĠĠĠĠĠ Ġretained : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġinvocation Context : ĠString ?, ĊĠĠĠĠĠĠĠ Ġactivity Token : ĠString ĊĠĠĠ Ġ): ĠIM qtt Delivery Token ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . SEND _ ACTION ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġactivity Token ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġinvocation Context ) ĊĠĠĠĠĠĠĠ Ġvar Ġsend Token : ĠIM qtt Delivery Token ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ!= Ġnull Ġ&& Ġmy Client !!. isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= ĠM qtt Connection Listener ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠM qtt Message ( payload ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . qos Ġ= Ġq os . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . is Ret ained Ġ= Ġretained ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Token Ġ= Ġmy Client !!. publish ( topic , Ġpayload , Ġq os . value , Ġretained , Ġinvocation Context , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore Send Details ( topic , Ġmessage , Ġsend Token , Ġinvocation Context , Ġactivity Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error ( Mqtt Service Constants . SEND _ ACTION Ġ+ Ġ" Ġ" Ġ+ ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsend Token ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPublish Ġa Ġmessage Ġon Ġa Ġtopic ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtopic ĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Ġtopic Ġon Ġwhich Ġto Ġpublish Ġ- Ġrepresented Ġas Ġa Ġstring , Ġnot ĊĠĠĠĠ Ġ* Ġan ĠM qtt Topic Ġobject ĊĠĠĠĠ Ġ* Ġ@ param Ġmessage ĠĠĠĠĠĠĠĠĠĠ Ġthe Ġmessage Ġto Ġpublish ĊĠĠĠĠ Ġ* Ġ@ param Ġinvocation Context Ġarbitrary Ġdata Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Token ĠĠĠĠ Ġarbitrary Ġstring Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġactivity ĊĠĠĠĠ Ġ* Ġ@ return Ġtoken Ġfor Ġtracking Ġthe Ġoperation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpublish ( topic : ĠString , Ġmessage : ĠM qtt Message , Ġinvocation Context : ĠString ?, Ġactivity Token : ĠString ): ĠIM qtt Delivery Token ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . SEND _ ACTION ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġactivity Token ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġinvocation Context ) ĊĠĠĠĠĠĠĠ Ġvar Ġsend Token : ĠIM qtt Delivery Token ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ!= Ġnull Ġ&& Ġmy Client !!. isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= ĠM qtt Connection Listener ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Token Ġ= Ġmy Client !!. publish ( topic , Ġmessage , Ġinvocation Context , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore Send Details ( topic , Ġmessage , Ġsend Token , Ġinvocation Context , Ġactivity Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( my Client Ġ!= Ġnull Ġ&& Ġbuffer Opts Ġ!= Ġnull Ġ&& Ġbuffer Opts !!. is Buffer Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClient Ġis Ġnot Ġconnected , Ġbut Ġbuffer Ġis Ġenabled , Ġso Ġsending Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= ĠM qtt Connection Listener ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Token Ġ= Ġmy Client !!. publish ( topic , Ġmessage , Ġinvocation Context , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstore Send Details ( topic , Ġmessage , Ġsend Token , Ġinvocation Context , Ġactivity Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Client Ġis Ġnot Ġconnected , Ġso Ġnot Ġsending Ġmessage ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error ( Mqtt Service Constants . SEND _ ACTION Ġ+ Ġ" Ġ" Ġ+ ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsend Token ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSubscribe Ġto Ġa Ġtopic ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtopic ĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġpossibly Ġwildcard Ġtopic Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġq os ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Ġquality Ġof Ġservice Ġfor Ġthe Ġtopic ĊĠĠĠĠ Ġ* Ġ@ param Ġinvocation Context Ġarbitrary Ġdata Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Token ĠĠĠĠ Ġarbitrary Ġidentifier Ġto Ġbe Ġpassed Ġback Ġto Ġthe ĠActivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsubscribe ( topic : ĠString , Ġq os : ĠQ oS , Ġinvocation Context : ĠString ?, Ġactivity Token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . trace Debug (" subscribe ({ $ topic }, $ qos , {$ invocation Context }, Ġ{$ activity Token }") ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . SUB SCR IBE _ ACTION ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġactivity Token ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġinvocation Context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ!= Ġnull Ġ&& Ġmy Client !!. isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= ĠM qtt Connection Listener ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. subscribe ( topic , Ġq os . value , Ġinvocation Context , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error (" subscribe Ġ$ NOT _ CONNECTED ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSubscribe Ġto Ġone Ġor Ġmore Ġtopics ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtopic ĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġlist Ġof Ġpossibly Ġwildcard Ġtopic Ġnames ĊĠĠĠĠ Ġ* Ġ@ param Ġq os ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequested Ġquality Ġof Ġservice Ġfor Ġeach Ġtopic ĊĠĠĠĠ Ġ* Ġ@ param Ġinvocation Context Ġarbitrary Ġdata Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Token ĠĠĠĠ Ġarbitrary Ġidentifier Ġto Ġbe Ġpassed Ġback Ġto Ġthe ĠActivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsubscribe ( topic : ĠArray < String >, Ġq os : ĠInt Array ?, Ġinvocation Context : ĠString ?, Ġactivity Token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . trace Debug ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" subscribe ({" Ġ+ Ġtopic . content ToString () Ġ+ Ġ" }," Ġ+ ĠArrays ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString ( qos ) Ġ+ Ġ", {" Ġ+ Ġinvocation Context Ġ+ Ġ" }, Ġ{" Ġ+ Ġactivity Token Ġ+ Ġ" }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . SUB SCR IBE _ ACTION ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġactivity Token ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġinvocation Context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ!= Ġnull Ġ&& Ġmy Client !!. isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= ĠM qtt Connection Listener ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. subscribe ( topic , Ġq os , Ġinvocation Context , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error (" subscribe Ġ$ NOT _ CONNECTED ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubscribe ( ĊĠĠĠĠĠĠĠ Ġtopic Filters : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġq os : ĠArray < Qo S >, ĊĠĠĠĠĠĠĠ Ġinvocation Context : ĠString ?, ĊĠĠĠĠĠĠĠ Ġactivity Token : ĠString , ĊĠĠĠĠĠĠĠ Ġmessage Listeners : ĠArray < IM qtt Message Listener >? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . trace Debug ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" subscribe ({" Ġ+ Ġtopic Filters . content ToString () Ġ+ Ġ" }," Ġ+ Ġq os . content ToString () Ġ+ Ġ", {" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġinvocation Context Ġ+ Ġ" }, Ġ{" Ġ+ Ġactivity Token Ġ+ Ġ" }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . SUB SCR IBE _ ACTION ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġactivity Token ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġinvocation Context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ!= Ġnull Ġ&& Ġmy Client !!. isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= ĠM qtt Connection Listener ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. subscribe ( topic Filters , Ġq os . map Ġ{ Ġit . value Ġ}. to IntArray (), Ġnull , Ġlistener , Ġmessage Listeners ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error (" subscribe Ġ$ NOT _ CONNECTED ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUn subscribe Ġfrom Ġa Ġtopic ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtopic ĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġpossibly Ġwildcard Ġtopic Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġinvocation Context Ġarbitrary Ġdata Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Token ĠĠĠĠ Ġarbitrary Ġidentifier Ġto Ġbe Ġpassed Ġback Ġto Ġthe ĠActivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġunsubscribe ( topic : ĠString , Ġinvocation Context : ĠString ?, Ġactivity Token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . trace Debug (" unsubscribe ({ $ topic }, {$ invocation Context }, Ġ{$ activity Token }) ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . UN SUB SCR IBE _ ACTION ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġactivity Token ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġinvocation Context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ!= Ġnull Ġ&& Ġmy Client !!. isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= ĠM qtt Connection Listener ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. unsubscribe ( topic , Ġinvocation Context , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error (" subscribe Ġ$ NOT _ CONNECTED ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUn subscribe Ġfrom Ġone Ġor Ġmore Ġtopics ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtopic ĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġlist Ġof Ġpossibly Ġwildcard Ġtopic Ġnames ĊĠĠĠĠ Ġ* Ġ@ param Ġinvocation Context Ġarbitrary Ġdata Ġto Ġbe Ġpassed Ġback Ġto Ġthe Ġapplication ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Token ĠĠĠĠ Ġarbitrary Ġidentifier Ġto Ġbe Ġpassed Ġback Ġto Ġthe ĠActivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġunsubscribe ( topic : ĠArray < String >, Ġinvocation Context : ĠString ?, Ġactivity Token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . trace Debug (" unsubscribe ({" Ġ+ Ġtopic . content ToString () Ġ+ Ġ" },{" Ġ+ Ġinvocation Context Ġ+ Ġ" }, Ġ{" Ġ+ Ġactivity Token Ġ+ Ġ" }) ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . UN SUB SCR IBE _ ACTION ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġactivity Token ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġinvocation Context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ!= Ġnull Ġ&& Ġmy Client !!. isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= ĠM qtt Connection Listener ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. unsubscribe ( topic , Ġinvocation Context , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , ĠNOT _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error (" subscribe Ġ$ NOT _ CONNECTED ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġtokens Ġfor Ġall Ġoutstanding Ġdeliver ies Ġfor Ġa Ġclient ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġan Ġarray Ġ( possibly Ġempty ) Ġof Ġtokens ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpending Delivery Tokens : ĠArray < IM qtt Delivery Token > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmy Client !!. pending Delivery Tokens ĊĠĠĠ Ġ// ĠImplement ĠM qtt Callback ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġfor Ġconnection Lost ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġwhy Ġthe Ġexception Ġcausing Ġthe Ġbreak Ġin Ġcommunications ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġconnection Lost ( why : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( why Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" connection Lost (${ why . message }) ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" connection Lost ( NO _ REASON )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdisconnected Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! connect Options !!. is Automatic Re connect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. disconnect ( null , Ġobject Ġ: ĠIM qtt ActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( async Action Token : ĠIM qtt Token ) Ġ= ĠUnit ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( async Action Token : ĠIM qtt Token ?, Ġexception : ĠThrowable ?) Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUsing Ġthe Ġnew ĠAutomatic Ġreconnect Ġfunctionality . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġcan 't Ġforce Ġa Ġdis connection , Ġbut Ġwe Ġcan Ġspeed Ġone Ġup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalarm Ping Sender !!. schedule ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignore Ġit Ġ- Ġwe 've Ġdone Ġour Ġbest ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . ON _ CONNECTION _ LO ST _ ACTION ) ĊĠĠĠĠĠĠĠ Ġif Ġ( why Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , Ġwhy . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( why Ġis ĠM qtt Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . put Serializable ( Mqtt Service Constants . CALLBACK _ EXCEPTION , Ġwhy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ EXCEPTION _ STACK , ĠLog . get StackTrace String ( why )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . OK , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ// Ġclient Ġhas Ġlost Ġconnection Ġno Ġneed Ġfor Ġwake Ġlock ĊĠĠĠĠĠĠĠ Ġrelease Wake Lock () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġto Ġindicate Ġa Ġmessage Ġhas Ġbeen Ġdelivered Ġ( the Ġexact Ġmeaning Ġof ĊĠĠĠĠ Ġ* Ġ" has Ġbeen Ġdelivered " Ġis Ġdependent Ġon Ġthe ĠQ OS Ġvalue ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmessage Token Ġthe Ġmessage Ġtoken Ġprovided Ġwhen Ġthe Ġmessage Ġwas Ġoriginally Ġsent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdelivery Complete ( message Token : ĠIM qtt Delivery Token ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . trace Debug (" delivery Complete ($ message Token )") ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= Ġpop Send Details ( message Token ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Bundle Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Mqtt Service Constants . SEND _ ACTION Ġ== Ġresult Bundle . getString ( Mqtt Service Constants . CALLBACK _ ACTION )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . OK , Ġresult Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . MESSAGE _ DE LI VER ED _ ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . OK , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġnotification Ġwill Ġhave Ġkept Ġthe Ġconnection Ġalive Ġbut Ġsend Ġthe Ġpreviously Ġscheduled Ġping Ġanyway ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġwhen Ġa Ġmessage Ġis Ġreceived ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtopic ĠĠ Ġthe Ġtopic Ġon Ġwhich Ġthe Ġmessage Ġwas Ġreceived ĊĠĠĠĠ Ġ* Ġ@ param Ġmessage Ġthe Ġmessage Ġitself ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġmessage Ar rived ( topic : ĠString , Ġmessage : ĠM qtt Message ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . trace Debug (" message Ar rived ($ topic , {$ message }) ") ĊĠĠĠĠĠĠĠ Ġval ĠmessageId Ġ= Ġservice . message Store . store Ar rived ( client Handle , Ġtopic , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= Ġmessage To Bundle ( message Id , Ġtopic , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . MESSAGE _ AR RI VED _ ACTION ) ĊĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ MESSAGE _ ID , ĠmessageId ) ĊĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . OK , Ġresult Bundle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoved Ġstore Ġdetails Ġof Ġsent Ġmessages Ġin Ġ" delivery Complete " ĊĠĠĠĠ Ġ* Ġcallbacks Ġfrom Ġthe Ġmqtt Client ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġpop Send Details ( message Token : ĠIM qtt Delivery Token ): ĠBundle ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġsaved Sent Messages . remove ( message Token ) ĊĠĠĠĠĠĠĠ Ġif Ġ( message Ġ!= Ġnull ) Ġ{ Ġ// ĠIf ĠI Ġdon 't Ġknow Ġabout Ġthe Ġmessage , Ġit 's ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġir relevant ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtopic Ġ= Ġsaved Topics . remove ( message Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Token Ġ= Ġsaved Activity Tokens . remove ( message Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinvocation Context Ġ= Ġsaved Invocation Contexts . remove ( message Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= Ġmessage To Bundle ( null , Ġtopic , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Token Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . SEND _ ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġactivity Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġinvocation Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult Bundle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStore Ġdetails Ġof Ġsent Ġmessages Ġso Ġwe Ġcan Ġhandle Ġ" delivery Complete " ĊĠĠĠĠ Ġ* Ġcallbacks Ġfrom Ġthe Ġmqtt Client ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġstore Send Details ( ĊĠĠĠĠĠĠĠ Ġtopic : ĠString , Ġmsg : ĠM qtt Message , Ġmessage Token : ĠIM qtt Delivery Token ?, ĊĠĠĠĠĠĠĠ Ġinvocation Context : ĠString ?, Ġactivity Token : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsaved Topics [ message Token ] Ġ= Ġtopic ĊĠĠĠĠĠĠĠ Ġsaved Sent Messages [ message Token ] Ġ= Ġmsg ĊĠĠĠĠĠĠĠ Ġsaved Activity Tokens [ message Token ] Ġ= Ġactivity Token ĊĠĠĠĠĠĠĠ Ġinvocation Context ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsaved Invocation Contexts [ message Token ] Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAc quire s Ġa Ġpartial Ġwake Ġlock Ġfor Ġthis Ġclient ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġacquire Wake Lock () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( wake lock Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpm Ġ= Ġservice . getSystem Service ( Service . POWER _ SERVICE ) Ġas ĠPower Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwake lock Ġ= Ġpm . new Wake Lock ( Power Manager . PAR TIAL _ WAKE _ LOCK , Ġwake Lock Tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwake lock !!. acquire ( 1 0 Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 L Ġ/* 1 0 Ġminutes */) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRelease s Ġthe Ġcurrently Ġheld Ġwake Ġlock Ġfor Ġthis Ġclient ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrelease Wake Lock () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( wake lock Ġ!= Ġnull Ġ&& Ġwake lock !!. is Hel d ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwake lock !!. release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReceive Ġnotification Ġthat Ġwe Ġare Ġoffline < br ></ br > ĊĠĠĠĠ Ġ* Ġif Ġclean Session Ġis Ġtrue , Ġwe Ġneed Ġto Ġregard Ġthis Ġas Ġa Ġdis connection ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġoffline () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! disconnected Ġ&& Ġ! clean Session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠException (" Android Ġoffline ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Lost ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe connect < br ></ br > ĊĠĠĠĠ Ġ* ĠOnly Ġappropriate Ġif Ġclean Session Ġis Ġfalse Ġand Ġwe Ġwere Ġconnected . ĊĠĠĠĠ Ġ* ĠDeclare Ġas Ġsynchronized Ġto Ġavoid Ġmultiple Ġcalls Ġto Ġthis Ġmethod Ġto Ġsend Ġconnect ĊĠĠĠĠ Ġ* Ġmultiple Ġtimes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġreconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( my Client Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error (" Re connect Ġmy Client Ġ= Ġnull . ĠWill Ġnot Ġdo Ġreconnect ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( is Connecting ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" The Ġclient Ġis Ġconnecting . ĠRe connect Ġreturn Ġdirectly .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! service . is Online ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" The Ġnetwork Ġis Ġnot Ġreachable . ĠWill Ġnot Ġdo Ġreconnect ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( connect Options !!. is Automatic Re connect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// The ĠAutomatic Ġreconnect Ġfunctionality Ġis Ġenabled Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Request ing ĠAutomatic Ġreconnect Ġusing ĠNew ĠJava ĠAC ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġreconnect Activity Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . CONNECT _ ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. reconnect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠM qtt Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( ex , Ġ" Exception Ġoccurred Ġattempting Ġto Ġreconnect : Ġ${ ex . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Connecting State ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( disconnected Ġ&& Ġ! clean Session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuse Ġthe Ġactivity To ke Ġthe Ġsame Ġwith Ġaction Ġconnect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" Do ĠReal ĠRe connect !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTIVITY _ TOKEN , Ġreconnect Activity Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ IN VOC ATION _ CONTEXT , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ACTION , ĠM qtt Service Constants . CONNECT _ ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠIM qtt ActionListener Ġ= Ġobject Ġ: ĠM qtt Connection Listener ( result Bundle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( async Action Token : ĠIM qtt Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsince Ġthe Ġdevice 's Ġcpu Ġcan Ġgo Ġto Ġsleep , Ġacquire Ġa Ġwake lock Ġand Ġdrop Ġit Ġlater . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" Re connect ĠSuccess !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Debug (" Deliver Back log Ġwhen Ġreconnect .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . put Boolean ( Mqtt Service Constants . SESSION _ PRESENT , Ġasync Action Token . session Present ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo After Connect Success ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( async Action Token : ĠIM qtt Token ?, Ġexception : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , Ġexception ?. localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . put Serializable ( Mqtt Service Constants . CALLBACK _ EXCEPTION , Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo After Connect Fail ( result Bundle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Client !!. connect ( connect Options , Ġnull , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Connecting State ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠM qtt Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error (" Cannot Ġreconnect Ġto Ġremote Ġserver ." Ġ+ Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Connecting State ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ ĠTODO : ĠAdded ĠDue Ġto : Ġhttps :// github . com / eclipse / p aho . mqtt . android / issues / 1 0 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFor Ġsome Ġreason Ġin Ġa Ġsmall Ġnumber Ġof Ġcases , Ġmy Client Ġis Ġnull Ġhere Ġand Ġso ĊĉĉĉĉĠĠĠ Ġa ĠNull Pointer ĠException Ġis Ġthrown . ĠThis Ġis Ġa Ġworkaround Ġto Ġpass Ġthe Ġexception ĊĉĉĉĉĠĠĠ Ġup Ġto Ġthe Ġapplication . Ġmy Client Ġshould Ġnot Ġbe Ġnull Ġso Ġmore Ġinvestigation Ġis ĊĉĉĉĉĠĠĠ Ġrequired . Ċĉĉĉ ĉ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . trace Error (" Cannot Ġreconnect Ġto Ġremote Ġserver ." Ġ+ Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Connecting State ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ex Ġ= ĠM qtt Exception ( Mqtt Exception . REASON _ CODE _ UN EXPECTED _ ERROR . toInt (), Ġe . cause ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( result Bundle , Ġnew Ex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġset Connecting State ( is Connecting : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is Connecting Ġ= Ġis Connecting ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe ĠDis connected Buffer Options Ġfor Ġthis Ġclient ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Buffer Opts ( buffer Opts : ĠDis connected Buffer Options ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . buffer Opts Ġ= Ġbuffer Opts ĊĠĠĠĠĠĠĠ Ġmy Client !!. set Buffer Opts ( buffer Opts ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbuffered Message Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmy Client !!. buffered Message Count ĊĊĠĠĠ Ġfun Ġget Buffered Message ( buffer Index : ĠInt ): ĠM qtt Message Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmy Client !!. get Buffered Message ( buffer Index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Buffered Message ( buffer Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Client !!. delete Buffered Message ( buffer Index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġin Flight Message Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmy Client !!. in Flight Message Count ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGeneral - purpose ĠIM qtt ActionListener Ġfor Ġthe ĠClient Ġcontext ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSimply Ġhandles Ġthe Ġbasic Ġsuccess / failure Ġcases Ġfor Ġoperations Ġwhich Ġdon 't Ġreturn Ġresults ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġopen Ġinner Ġclass ĠM qtt Connection Listener ( private Ġval Ġresult Bundle : ĠBundle ) Ġ: ĠIM qtt ActionListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( async Action Token : ĠIM qtt Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . OK , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( async Action Token : ĠIM qtt Token ?, Ġexception : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . putString ( Mqtt Service Constants . CALLBACK _ ERROR _ MESSAGE , Ġexception ?. localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Bundle . put Serializable ( Mqtt Service Constants . CALLBACK _ EXCEPTION , Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . callback To Activity ( client Handle , ĠStatus . ERROR , Ġresult Bundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEMP Ġ= Ġ" Mqtt Connection " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNOT _ CONNECTED Ġ= Ġ" not Ġconnected " ĊĠĠĠ Ġ} Ċ Ċ } Ċ