package Ġcom . github . kotlin izer . mqtt . internal . connection . packet Ċ Ċ import Ġcom . github . kotlin izer . mqtt . Mqtt Message Ċ import Ġcom . github . kotlin izer . mqtt . Mqtt Q os Ċ import Ġcom . github . kotlin izer . mqtt . internal . connection . packet . received . Mqtt Received Packet Ċ import Ġcom . github . kotlin izer . mqtt . internal . connection . packet . received . Pub Ack Ċ import Ġcom . github . kotlin izer . mqtt . internal . connection . packet . received . Pub Rec Ċ import Ġcom . github . kotlin izer . mqtt . internal . connection . packet . sent . Mqtt Sent Packet Ċ import Ġcom . github . kotlin izer . mqtt . internal . util . add Short Ċ import Ġcom . github . kotlin izer . mqtt . internal . util . add String With Length Ċ import Ġcom . github . kotlin izer . mqtt . internal . util . sh l Ċ import Ġcom . github . kotlin izer . mqtt . internal . util . to Short Ċ import Ġkotlin . experimental . and Ċ import Ġkotlin . experimental . or Ċ Ċ internal Ġdata Ġclass ĠPublish ( ĊĠĠĠ Ġoverride Ġval Ġpacket Identifier : ĠShort , ĊĠĠĠ Ġval Ġmqtt Message : ĠM qtt Message Ċ ) Ġ: ĠM qtt Sent Packet (), ĠM qtt Received Packet Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun ĠList < Byte >. receive Publish ( header : ĠByte ): ĠPublish Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtopic Length Ġ= Ġsub List ( 0 , Ġ 2 ). to Short () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtopic Ġ= Ġsub List ( 2 , Ġ 2 Ġ+ Ġtopic Length ). toByteArray (). decode ToString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidentifier Ġ= Ġsub List ( 2 Ġ+ Ġtopic Length , Ġ 4 Ġ+ Ġtopic Length ). to Short () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġsub List ( 4 Ġ+ Ġtopic Length , Ġsize ). toByteArray (). decode ToString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġretain Ġ= Ġheader . and ( 0 b 0 0 0 0 _ 0 0 0 1 ) Ġ== Ġ 1 . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPublish ( identifier , ĠM qtt Message ( topic , Ġmessage , Ġretain Ġ= Ġretain )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġfixed Header : ĠByte Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġmqtt Message . qos . ordinal . to Byte (). sh l ( 1 ). or ( if Ġ( mqtt Message . retain ) Ġ 0 b 0 0 0 0 _ 0 0 0 1 Ġelse Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġvariable Header : ĠList < Byte > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable ListOf < Byte >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd String With Length ( mqtt Message . topic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Short ( packet Identifier ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġpayload : ĠList < Byte > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġmqtt Message . message Bytes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Response ( received Packet : ĠM qtt Received Packet ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmqtt Message . qos Ġ== ĠM qtt Q os . AT _ LE AST _ ON CE Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( received Packet Ġas ? ĠPub Ack )?. packet Identifier Ġ== Ġpacket Identifier Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmqtt Message . qos Ġ== ĠM qtt Q os . EX ACT LY _ ON CE Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( received Packet Ġas ? ĠPub Rec )?. packet Identifier Ġ== Ġpacket Identifier Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }