/* Ċ Ġ* ĠDevelop ed Ġfor Ġthe ĠOpen Bot Ġproject Ġ( https :// open bot . org ) Ġby : Ċ Ġ* Ċ Ġ* ĠI vo ĠZ iv kov Ċ Ġ* Ġiz iv kov @ gmail . com Ċ Ġ* Ċ Ġ* ĠDate : Ġ 2 0 2 0 - 1 2 - 2 7 , Ġ 1 0 : 5 8 Ġp . m . Ċ Ġ*/ Ċ Ċ package Ġorg . open bot . controller Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġcom . google . android . gms . near by . Near by Ċ import Ġcom . google . android . gms . near by . connection .* Ċ import Ġorg . open bot . controller . utils . Event Processor Ċ import Ġorg . open bot . controller . utils . Utils Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġkotlin . reflect . K Property 0 Ċ Ċ object ĠN ear by Connection Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpayload Callback : ĠPayload Callback ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Near by Connection " ĊĠĠĠ Ġprivate Ġval Ġconnection Name Ġ= Ġ" Open Bot Connection " ĊĊĠĠĠ Ġ// ĠOur Ġhandle Ġto ĠN ear by ĠConnection s ĊĠĠĠ Ġprivate Ġvar Ġconnections Client : ĠConnection s Client ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpaired Device Endpoint Id : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpaired Device Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġconst Ġval ĠSERVICE _ ID Ġ= Ġ" OPEN BOT _ SERVICE _ ID " ĊĊĠĠĠ Ġprivate Ġval ĠSTR ATE GY Ġ= ĠStrategy . P 2 P _ POINT _ TO _ POINT ĊĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCallback s Ġfor Ġconnections Ġto Ġother Ġdevices ĊĠĠĠ Ġprivate Ġval Ġconnection Lifecycle Callback : ĠConnection Lifecycle Callback Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠConnection Lifecycle Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Connection Initi ated ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Info : ĠConnection Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Connection Initi ated : Ġaccepting Ġconnection " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnections Client !!. accept Connection ( endpoint Id , Ġpayload Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaired Device Name Ġ= Ġconnection Info . endpoint Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Connection Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult : ĠConnection Resolution ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . status . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . be ep ( Utils . T ONE . INTER CEPT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Connection Result : Ġconnection Ġsuccessful " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent : ĠEvent Processor . Progress Events Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Processor . Progress Events . Connection Successful ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Processor . onNext ( event ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnections Client !!. stop Ad vertising () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaired Device Endpoint Id Ġ= Ġendpoint Id ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabort Connection () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent : ĠEvent Processor . Progress Events Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Processor . Progress Events . Connection Failed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Processor . onNext ( event ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Connection Result : Ġconnection Ġfailed " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Disconnected ( endpoint Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent : ĠEvent Processor . Progress Events Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Processor . Progress Events . Disconnected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Processor . onNext ( event ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Disconnected : Ġdisconnected Ġfrom Ġthe Ġnearby Ġdevice " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconnect ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnections Client Ġ= ĠN ear by . get Connections Client ( context ) ĊĊĠĠĠĠĠĠĠ Ġstart Ad vertising () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠDis connect s Ġfrom Ġthe Ġopponent Ġand Ġreset Ġthe ĠUI . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevent : ĠEvent Processor . Progress Events Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Processor . Progress Events . Disconnect ing ĊĠĠĠĠĠĠĠ ĠEvent Processor . onNext ( event ) ĊĊĠĠĠĠĠĠĠ Ġconnections Client ?. stop Ad vertising () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( paired Device Endpoint Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnections Client ?. disconnect From Endpoint ( paired Device Endpoint Id !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġconnections Client ?. stop All Endpoints () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠBroadcast s Ġour Ġpresence Ġusing ĠN ear by ĠConnection s Ġso Ġthe Ġbot Ġcan Ġfind Ġus Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart Ad vertising () Ġ{ ĊĠĠĠĠĠĠĠ Ġconnections Client !!. start Ad vertising ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Name , ĠSERVICE _ ID , Ġconnection Lifecycle Callback , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAd vertising Options . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Strategy ( STR ATE GY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" start Ad vertising ", Ġ" We 're Ġadvertising ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent : ĠEvent Processor . Progress Events Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Processor . Progress Events . Start Ad vertising ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Processor . onNext ( event ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabort Connection () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent : ĠEvent Processor . Progress Events Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Processor . Progress Events . Ad vertising Failed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Processor . onNext ( event ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start Ad vertising ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" We Ġwere Ġunable Ġto Ġstart Ġadvertising ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġabort Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġdisconnect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsendMessage ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( connections Client Ġ== Ġnull Ġ|| Ġpaired Device Endpoint Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Cannot Ġsend ... No Ġconnection !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġconnections Client !!. send Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaired Device Endpoint Id !! , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayload . from Bytes ( message . toByteArray ( StandardCharsets . UTF _ 8 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Payload Callback ( payload Callback : ĠK Property 0 < Payload Callback >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . payload Callback Ġ= Ġpayload Callback . get () ĊĠĠĠ Ġ} Ċ } Ċ