package Ġio . re bble . lib pe bble common . packets Ċ Ċ import Ġcom . ben ash er 4 4 . uuid . Uuid Ċ import Ġio . re bble . lib pe bble common . protocol helpers . Packet Registry Ċ import Ġio . re bble . lib pe bble common . protocol helpers . P eb ble Packet Ċ import Ġio . re bble . lib pe bble common . protocol helpers . Protocol Endpoint Ċ import Ġio . re bble . lib pe bble common . struct mapper .* Ċ import Ġio . re bble . lib pe bble common . util . Data Buffer ĊĊ Ċ class ĠApp Message Tuple () Ġ: ĠStruct M appable () Ġ{ ĊĠĠĠ Ġenum Ġclass ĠType ( val Ġvalue : ĠU Byte ) Ġ{ ĊĠĠĠĠĠĠĠ ĠByteArray ( 0 u ), ĊĠĠĠĠĠĠĠ ĠCString ( 1 u ), ĊĠĠĠĠĠĠĠ ĠUInt ( 2 u ), ĊĠĠĠĠĠĠĠ ĠInt ( 3 u ); ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfrom Value ( value : ĠU Byte ): ĠType Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalues (). first OrNull Ġ{ Ġit . value Ġ== Ġvalue Ġ} Ġ?: Ġerror (" Unknown Ġtype : Ġ$ value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġkey Ġ= ĠS UInt ( m , Ġend i ann ess Ġ= Ġ'< ') ĊĠĠĠ Ġval Ġtype Ġ= ĠSU Byte ( m ) ĊĠĠĠ Ġval Ġdata Length Ġ= ĠSU Short ( m , Ġend i ann ess Ġ= Ġ'< ') ĊĠĠĠ Ġval Ġdata Ġ= ĠS Bytes ( m , Ġ 0 ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . link With Size ( data Length ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdata As Bytes : ĠU ByteArray ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata . get () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdata AsString : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Without Null Ġ= Ġdata . get (). drop Last ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata Without Null . to U ByteArray (). toByteArray (). decode ToString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdata As Signed Number : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġwhen Ġ( val Ġsize Ġ= Ġdata Length . get (). toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠS Byte ( Struct Mapper ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠS Short ( Struct Mapper (), Ġend i ann ess Ġ= Ġ'< ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> ĠS Int ( Struct Mapper (), Ġend i ann ess Ġ= Ġ'< ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Size Ġnot Ġsupported : Ġ$ size ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobj . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Bytes ( Data Buffer ( data . get ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. value Number ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdata As Unsigned Number : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġwhen Ġ( val Ġsize Ġ= Ġdata Length . get (). toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠSU Byte ( Struct Mapper ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠSU Short ( Struct Mapper (), Ġend i ann ess Ġ= Ġ'< ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> ĠS UInt ( Struct Mapper (), Ġend i ann ess Ġ= Ġ'< ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Size Ġnot Ġsupported : Ġ$ size ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobj . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Bytes ( Data Buffer ( data . get ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. value Number ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" App Message Tuple ( key =$ key , Ġtype =$ type , Ġdata Length =$ data Length , Ġdata =$ data )" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull Ġ|| Ġthis :: class Ġ!= Ġother :: class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠApp Message Tuple ĊĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ!= Ġother . key ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ!= Ġother . type ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( data Length Ġ!= Ġother . data Length ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġother . data ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġkey . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġtype . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġdata Length . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġdata . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate U ByteArray ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠUInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠU ByteArray ĊĠĠĠĠĠĠĠ Ġ): ĠApp Message Tuple Ġ= ĠApp Message Tuple (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . key . set ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . type . set ( Type . ByteArray . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data Length . set ( data . size . to U Short ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data . set ( data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate String ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠUInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠApp Message Tuple Ġ= ĠApp Message Tuple (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . key . set ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . type . set ( Type . CString . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġ( data . encode To ByteArray () Ġ+ Ġbyte ArrayOf ( 0 x 0 0 )). to U ByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data Length . set ( bytes . size . to U Short ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data . set ( bytes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Byte ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠUInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠByte ĊĠĠĠĠĠĠĠ Ġ): ĠApp Message Tuple Ġ= ĠApp Message Tuple (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . key . set ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . type . set ( Type . Int . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data Length . set ( 1 u ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data . set ( ubyte ArrayOf ( data . to U Byte ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate U Byte ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠUInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠU Byte ĊĠĠĠĠĠĠĠ Ġ): ĠApp Message Tuple Ġ= ĠApp Message Tuple (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . key . set ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . type . set ( Type . UInt . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data Length . set ( 1 u ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data . set ( ubyte ArrayOf ( data )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Short ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠUInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠShort ĊĠĠĠĠĠĠĠ Ġ): ĠApp Message Tuple Ġ= ĠApp Message Tuple (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . key . set ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . type . set ( Type . Int . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠS Short ( Struct Mapper (), Ġdata , Ġend i ann ess Ġ= Ġ'< '). to Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data Length . set ( bytes . size . to U Short ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data . set ( bytes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate U Short ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠUInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠU Short ĊĠĠĠĠĠĠĠ Ġ): ĠApp Message Tuple Ġ= ĠApp Message Tuple (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . key . set ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . type . set ( Type . UInt . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠSU Short ( Struct Mapper (), Ġdata , Ġend i ann ess Ġ= Ġ'< '). to Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data Length . set ( bytes . size . to U Short ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data . set ( bytes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Int ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠUInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠApp Message Tuple Ġ= ĠApp Message Tuple (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . key . set ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . type . set ( Type . Int . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠS Int ( Struct Mapper (), Ġdata , Ġend i ann ess Ġ= Ġ'< '). to Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data Length . set ( bytes . size . to U Short ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data . set ( bytes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate UInt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠUInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠUInt ĊĠĠĠĠĠĠĠ Ġ): ĠApp Message Tuple Ġ= ĠApp Message Tuple (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . key . set ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . type . set ( Type . UInt . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠS UInt ( Struct Mapper (), Ġdata , Ġend i ann ess Ġ= Ġ'< '). to Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data Length . set ( bytes . size . to U Short ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data . set ( bytes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ sealed Ġclass ĠApp Message ( message : ĠMessage , Ġtransaction Id : ĠU Byte ) Ġ: ĠP eb ble Packet ( endpoint ) Ġ{ ĊĠĠĠ Ġval Ġcommand Ġ= ĠSU Byte ( m , Ġmessage . value ) ĊĠĠĠ Ġval Ġtransaction Id Ġ= ĠSU Byte ( m , Ġtransaction Id ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġcommand . get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠMessage ( val Ġvalue : ĠU Byte ) Ġ{ ĊĠĠĠĠĠĠĠ ĠApp Message Push ( 0 x 0 1 u ), ĊĠĠĠĠĠĠĠ ĠApp Message ACK ( 0 xff u ), ĊĠĠĠĠĠĠĠ ĠApp Message N ACK ( 0 x 7 fu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠApp Message Push ( ĊĠĠĠĠĠĠĠ Ġtransaction Id : ĠU Byte Ġ= Ġ 0 u , ĊĠĠĠĠĠĠĠ Ġuuid : ĠU uid Ġ= ĠU uid ( 0 L , Ġ 0 L ), ĊĠĠĠĠĠĠĠ Ġtuples : ĠList < App Message Tuple > Ġ= Ġempty List () ĊĠĠĠ Ġ) Ġ: ĊĠĠĠĠĠĠĠ ĠApp Message ( Message . App Message Push , Ġtransaction Id ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= ĠS UUID ( m , Ġuuid ) ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠSU Byte ( m , Ġtuples . size . to U Byte ()) ĊĠĠĠĠĠĠĠ Ġval Ġdictionary Ġ= ĠS Fixed List ( m , Ġtuples . size , Ġtuples , Ġ:: App Message Tuple ) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdictionary . link With Count ( count ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" App Message Push ( uuid =$ uuid , Ġcount =$ count , Ġdictionary =$ dictionary )" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull Ġ|| Ġthis :: class Ġ!= Ġother :: class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! super . equals ( other )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Ġas ĠApp Message Push ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uuid Ġ!= Ġother . uuid ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ!= Ġother . count ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dictionary Ġ!= Ġother . dictionary ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġsuper . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġuuid . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġcount . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġdictionary . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠApp Message ACK ( ĊĠĠĠĠĠĠĠ Ġtransaction Id : ĠU Byte Ġ= Ġ 0 u ĊĠĠĠ Ġ) Ġ: ĠApp Message ( Message . App Message ACK , Ġtransaction Id ) ĊĊĠĠĠ Ġclass ĠApp Message N ACK ( ĊĠĠĠĠĠĠĠ Ġtransaction Id : ĠU Byte Ġ= Ġ 0 u ĊĠĠĠ Ġ) Ġ: ĠApp Message ( Message . App Message N ACK , Ġtransaction Id ) ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġendpoint Ġ= ĠProtocol Endpoint . APP _ MESSAGE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull Ġ|| Ġthis :: class Ġ!= Ġother :: class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠApp Message ĊĊĠĠĠĠĠĠĠ Ġif Ġ( command Ġ!= Ġother . command ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( transaction Id Ġ!= Ġother . transaction Id ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġcommand . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġtransaction Id . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġapp message Packets Register () Ġ{ ĊĠĠĠ ĠPacket Registry . register ( ĊĠĠĠĠĠĠĠ ĠApp Message . endpoint , ĊĠĠĠĠĠĠĠ ĠApp Message . Message . App Message Push . value ĊĠĠĠ Ġ) Ġ{ ĠApp Message . App Message Push () Ġ} ĊĊĠĠĠ ĠPacket Registry . register ( ĊĠĠĠĠĠĠĠ ĠApp Message . endpoint , ĊĠĠĠĠĠĠĠ ĠApp Message . Message . App Message ACK . value ĊĠĠĠ Ġ) Ġ{ ĠApp Message . App Message ACK () Ġ} ĊĊĠĠĠ ĠPacket Registry . register ( ĊĠĠĠĠĠĠĠ ĠApp Message . endpoint , ĊĠĠĠĠĠĠĠ ĠApp Message . Message . App Message N ACK . value ĊĠĠĠ Ġ) Ġ{ ĠApp Message . App Message N ACK () Ġ} Ċ }