package Ġcom . vint ed . action c able . client . kotlin Ċ Ċ import Ġcom . vint ed . action c able . client . kotlin . Message . Type .* Ċ import Ġjava . net . URI Ċ Ċ /** Ċ Ġ* ĠThe ĠConsumer Ġestab lishes Ġthe Ġconnection Ġto Ġa Ġserver - side ĠRuby ĠConnection Ġobject . Ċ Ġ* ĠOnce Ġestablished , Ġthe ĠConnection Monitor Ġwill Ġensure Ġthat Ġits Ġproperly Ġmaintained Ġthrough Ġheart beats Ġand Ġchecking Ġfor Ġstale Ġupdates . Ċ Ġ* ĠThe ĠConsumer Ġinstance Ġis Ġalso Ġthe Ġgateway Ġto Ġestablish ing Ġsubscriptions Ġto Ġdesired Ġchannels . Ċ Ġ* Ċ Ġ* Ġ@ property Ġsubscriptions ĠSub scriptions Ġcontainer . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġval Ġconsumer Ġ= ĠAction Cable . create Consumer ( uri , Ġoptions ) Ċ Ġ* Ġval Ġappearance Channel Ġ= ĠChannel (" Appearance Channel ") Ċ Ġ* Ġval Ġsubscription Ġ= Ġconsumer . subscriptions . create ( appearance Channel ) Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ class ĠConsumer ( ĊĠĠĠĠĠĠĠ Ġuri : ĠURI , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġoptions : ĠOptions Ġ= ĠOptions () Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConsumer Ġoptions . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġconnection ĠConnection Ġoptions . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ* Ġval Ġoptions Ġ= ĠConsumer . Options () ĊĠĠĠĠ Ġ* Ġoptions . connection . re connection Ġ= Ġtrue ĊĠĠĠĠ Ġ* Ġoptions . connection . query Ġ= Ġmap Of (" user _ id " Ġto Ġ" 1 ") ĊĠĠĠĠ Ġ* Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠOptions ( val Ġconnection : ĠConnection . Options Ġ= ĠConnection . Options ()) ĊĊĠĠĠ Ġval Ġsubscriptions : ĠSub scriptions Ġ= ĠSub scriptions ( this ) ĊĊĠĠĠ Ġprivate Ġval Ġconnection : ĠConnection Ġ= ĠConnection ( uri , Ġoptions . connection ) ĊĊĠĠĠ Ġprivate Ġval Ġconnection Monitor : ĠConnection Monitor Ġ= ĠConnection Monitor ( connection , Ġoptions . connection ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection . on Open Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconnection . on Message Ġ= Ġ{ Ġjson String Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparsed Message Ġ= ĠMessage . createFrom Json String ( json String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( parsed Message . message Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW EL CO ME Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Monitor . record Connect () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriptions . reload () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP ING Ġ-> Ġconnection Monitor . record Ping () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCON FIRM ATION Ġ-> Ġsubscriptions . notify Connected ( parsed Message . identifier !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRE JECTION Ġ-> Ġsubscriptions . reject ( parsed Message . identifier !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMESSAGE Ġ-> Ġsubscriptions . notify Received ( parsed Message . identifier !! , Ġparsed Message . body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconnection . onClose Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriptions . notify Disconnected () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Monitor . record Disconnect () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconnection . on Failure Ġ= Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscriptions . notify Failed ( error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEst ablish Ġconnection . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection . open () ĊĠĠĠĠĠĠĠ Ġif Ġ( options . connection . re connection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Monitor . start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis connect Ġthe Ġunderlying Ġconnection . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection . terminate () ĊĠĠĠĠĠĠĠ Ġconnection Monitor . terminate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend ( command : ĠCommand ) Ġ= Ġconnection . send ( command ) Ċ } Ċ