package Ġtel . sch ich . k ogn ig y . protocol Ċ Ċ import Ġkotlinx . serialization . Serialization Exception Ċ import Ġkotlinx . serialization . encode ToString Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġkotlinx . serialization . json . JsonArray Ċ import Ġkotlinx . serialization . json . Json Element Ċ import Ġkotlinx . serialization . json . Json Null Ċ import Ġkotlinx . serialization . json . JsonObject Ċ import Ġkotlinx . serialization . json . Json Primitive Ċ import Ġkotlinx . serialization . json . decode FromJson Element Ċ import Ġkotlinx . serialization . json . encode ToJson Element Ċ import Ġkotlinx . serialization . json . json Array Ċ import Ġkotlinx . serialization . json . jsonObject Ċ import Ġjava . nio . ByteBuffer Ċ Ċ /** Ċ Ġ* ĠBased Ġon : Ġ[ github . com / socket io / socket . io - protocol ]( https :// github . com / socket io / socket . io - protocol ) Ċ Ġ*/ Ċ sealed Ġinterface ĠSocket Io Packet Ġ{ ĊĊĠĠĠ Ġsealed Ġinterface ĠName spaced Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnamespace : ĠString ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠConnect ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġnamespace : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġdata : ĠJsonObject ?, ĊĠĠĠ Ġ) Ġ: ĠSocket Io Packet , ĠName spaced Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFormat Ġ= Ġ""" ^ (?: ([^ , ]+ ), )? (\ { .* }) ?$ """. to Regex () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠDis connect ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġnamespace : ĠString ?, ĊĠĠĠ Ġ) Ġ: ĠSocket Io Packet , ĠName spaced Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFormat Ġ= Ġ""" ^ (?: ([^ , ]+ ), )? """. to Regex () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠEvent ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġnamespace : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġacknowledge Id : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġarguments : ĠList < Json Element >, ĊĠĠĠ Ġ) Ġ: ĠSocket Io Packet , ĠName spaced Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFormat Ġ= Ġ""" ^ (?: ([^ , ]+ ), )? (\ d + )? (\ [ .* ]) $ """. to Regex () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠAck nowledge ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġnamespace : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġacknowledge Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġdata : ĠJson Array ?, ĊĠĠĠ Ġ) Ġ: ĠSocket Io Packet , ĠName spaced Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFormat Ġ= Ġ""" ^ (?: ([^ , ]+ ), )? (\ d + )( \[ .* ]) ?$ """. to Regex () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠConnect Error ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġnamespace : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġdata : ĠData ?, ĊĠĠĠ Ġ) Ġ: ĠSocket Io Packet , ĠName spaced Ġ{ ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠData ( val Ġmessage : ĠString , Ġval Ġdata : ĠJson Element ?) ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFormat Ġ= Ġ""" ^ (?: ([^ , ]+ ), )? (. + )? $ """. to Regex () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBinary Event ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġnamespace : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġacknowledge Id : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġdata : ĠByteBuffer , ĊĠĠĠ Ġ) Ġ: ĠSocket Io Packet , ĠName spaced Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFormat Ġ= Ġ""" ^ (?: ([^ , ]+ ), )? (\ d + )? (\ [ .* ]) ?$ """. to Regex () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBinary Ack nowledge ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġnamespace : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġacknowledge Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġdata : ĠByteBuffer ?, ĊĠĠĠ Ġ) Ġ: ĠSocket Io Packet , ĠName spaced Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFormat Ġ= Ġ""" ^ (?: ([^ , ]+ ), )? (\ d + )? (\ [ .* ]) ?$ """. to Regex () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBroken Packet ( ĊĠĠĠĠĠĠĠ Ġval Ġpacket : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġreason : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġt : ĠThrowable ?, ĊĠĠĠ Ġ) Ġ: ĠSocket Io Packet ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdecode ( json : ĠJson , Ġpacket : ĠEngine Io Packet . Text Message ): ĠSocket Io Packet Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġpacket . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBroken Packet ( message , Ġ" empty Ġmessage ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( val Ġtype Ġ= Ġmessage [ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 0 ' Ġ-> Ġdecode Connect ( message , Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 1 ' Ġ-> Ġdecode Disconnect ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 2 ' Ġ-> Ġdecode Event ( message , Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 3 ' Ġ-> Ġdecode Ack ( message , Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 4 ' Ġ-> Ġdecode Connect Error ( message , Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 5 ' Ġ-> ĠTODO (" currently Ġnot Ġneeded ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 6 ' Ġ-> ĠTODO (" currently Ġnot Ġneeded ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠBroken Packet ( message , Ġ" unknown Ġpacket Ġtype : Ġ$ type ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġencode ( json : ĠJson , Ġpacket : ĠSocket Io Packet ): ĠEngine Io Packet . Text Message Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( packet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConnect Ġ-> Ġencode Packet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġpacket . namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacknowledge Id Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDis connect Ġ-> Ġencode Packet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġpacket . namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacknowledge Id Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEvent Ġ-> Ġencode Packet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġpacket . namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacknowledge Id Ġ= Ġpacket . ack nowledge Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠJson Array ( listOf ( Json Primitive ( packet . name )) Ġ+ Ġpacket . arguments ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAck nowledge Ġ-> Ġencode Packet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġpacket . namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacknowledge Id Ġ= Ġpacket . ack nowledge Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġpacket . data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConnect Error Ġ-> Ġencode Packet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġpacket . namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacknowledge Id Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġjson . encode ToJson Element ( packet . data ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBinary Event Ġ-> ĠTODO (" currently Ġnot Ġneeded ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBinary Ack nowledge Ġ-> ĠTODO (" currently Ġnot Ġneeded ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBroken Packet Ġ-> ĠEngine Io Packet . Text Message ( packet . packet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġencode Packet ( ĊĠĠĠ Ġjson : ĠJson , ĊĠĠĠ Ġtype : ĠInt , ĊĠĠĠ Ġnamespace : ĠString ?, ĊĠĠĠ Ġacknowledge Id : ĠInt ?, ĊĠĠĠ Ġdata : ĠJson Element ?, Ċ ): ĠEngine Io Packet . Text Message Ġ{ ĊĠĠĠ Ġ// ĠTODO Ġbinary Ġsupport ĊĠĠĠ Ġ// Ġval Ġbinary Attachment Count Part Ġ= Ġbinary Attachment Count ?. let Ġ{ Ġ"$ it -" Ġ} Ġ?: Ġ"" ĊĠĠĠ Ġval Ġbinary Attachment Count Part Ġ= Ġ"" ĊĠĠĠ Ġval Ġnamespace Part Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( namespace Ġ== Ġnull Ġ|| Ġnamespace Ġ== Ġ"/") Ġ"" ĊĠĠĠĠĠĠĠ Ġelse Ġ"$ namespace ," ĊĠĠĠ Ġval Ġacknowledge Id Part Ġ= Ġacknowledge Id ?. toString () Ġ?: Ġ"" ĊĠĠĠ Ġval Ġpayload Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ== Ġnull Ġ|| Ġdata Ġis ĠJson Null ) Ġ"" ĊĠĠĠĠĠĠĠ Ġelse Ġjson . encode ToString ( data ) ĊĊĠĠĠ Ġval Ġmessage Ġ= Ġ"$ type $ binary Attachment Count Part $ namespace Part $ ack nowledge Id Part $ payload " ĊĠĠĠ Ġreturn ĠEngine Io Packet . Text Message ( message ) Ċ } Ċ Ċ private Ġfun Ġmatch Format ( ĊĠĠĠ Ġmessage : ĠString , ĊĠĠĠ Ġformat : ĠRegex , ĊĠĠĠ Ġblock : Ġ( Match Result . Dest ruct ured ) Ġ-> ĠSocket Io Packet , Ċ ): ĠSocket Io Packet Ġ{ ĊĠĠĠ Ġval Ġmatch Ġ= Ġformat . match Ent ire ( message . substring ( 1 )) ĊĠĠĠ Ġreturn Ġif Ġ( match Ġ== Ġnull ) ĠSocket Io Packet . Broken Packet ( message , Ġ" did Ġnot Ġmatch Ġpacket Ġformat ", Ġnull ) ĊĠĠĠ Ġelse Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġblock ( match . de structured ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠSerialization Exception ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSocket Io Packet . Broken Packet ( message , Ġ" data Ġfailed Ġto Ġparse Ġas ĠJSON ", Ġe ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġdecode Connect ( ĊĠĠĠ Ġmessage : ĠString , ĊĠĠĠ Ġjson : ĠJson , Ċ ) Ġ= Ġmatch Format ( message , ĠSocket Io Packet . Connect . Format ) Ġ{ Ġ( namespace Str , Ġdata Str ) Ġ-> ĊĠĠĠ Ġval Ġnamespace Ġ= Ġnamespace Str . if Empty Ġ{ Ġnull Ġ} ĊĠĠĠ Ġ// Ġdirectly Ġaccessing Ġthe ĠJSON Ġas Ġan Ġobject Ġis Ġsafe Ġhere , Ġsince Ġthe Ġregex Ġmakes Ġsure Ġthis Ġis ĊĠĠĠ Ġ// Ġan Ġobject Ġif Ġit Ġactually Ġparses ĊĠĠĠ Ġval Ġdata Ġ= Ġif Ġ( data Str . isEmpty ()) Ġnull Ġelse Ġjson . parse ToJson Element ( data Str ). jsonObject ĊĊĠĠĠ ĠSocket Io Packet . Connect ( namespace , Ġdata ) Ċ } Ċ Ċ private Ġfun Ġdecode Disconnect ( ĊĠĠĠ Ġmessage : ĠString , Ċ ) Ġ= Ġmatch Format ( message , ĠSocket Io Packet . Disconnect . Format ) Ġ{ Ġ( namespace Str ) Ġ-> ĊĠĠĠ Ġval Ġnamespace Ġ= Ġnamespace Str . if Empty Ġ{ Ġnull Ġ} ĊĊĠĠĠ ĠSocket Io Packet . Disconnect ( namespace ) Ċ } Ċ Ċ private Ġfun Ġdecode Event ( ĊĠĠĠ Ġmessage : ĠString , ĊĠĠĠ Ġjson : ĠJson , Ċ ) Ġ= Ġmatch Format ( message , ĠSocket Io Packet . Event . Format ) Ġ{ Ġ( namespace Str , Ġacknowledge Id Str , Ġdata Str ) Ġ-> ĊĠĠĠ Ġval Ġnamespace Ġ= Ġnamespace Str . if Empty Ġ{ Ġnull Ġ} ĊĠĠĠ Ġval Ġacknowledge Id Ġ= Ġacknowledge Id Str . if Empty Ġ{ Ġnull Ġ} ?. toInt () ĊĠĠĠ Ġ// Ġdirectly Ġaccessing Ġthe ĠJSON Ġas Ġan Ġarray Ġis Ġsafe Ġhere , Ġsince Ġthe Ġregex Ġmakes Ġsure Ġthis Ġis Ġan ĊĠĠĠ Ġ// Ġarray Ġif Ġit Ġactually Ġparses ĊĠĠĠ Ġval Ġdata Ġ= Ġjson . parse ToJson Element ( data Str ). json Array ĊĠĠĠ Ġval Ġname Ġ= Ġdata . first OrNull () ĊĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġname Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Io Packet . Broken Packet ( message , Ġ" events Ġneeds Ġat Ġleast Ġthe Ġevent Ġname Ġin Ġthe Ġdata ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġname Ġis ĠJson Primitive Ġ&& Ġname . isString Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Io Packet . Event ( namespace , Ġacknowledge Id , Ġname . content , Ġdata . drop ( 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Io Packet . Broken Packet ( message , Ġ" event Ġname Ġis Ġnot Ġa Ġstring : Ġ$ name ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġdecode Ack ( ĊĠĠĠ Ġmessage : ĠString , ĊĠĠĠ Ġjson : ĠJson , Ċ ) Ġ= Ġmatch Format ( message , ĠSocket Io Packet . Ack nowledge . Format ) Ġ{ Ġ( namespace Str , Ġacknowledge Id Str , Ġdata Str ) Ġ-> ĊĠĠĠ Ġval Ġnamespace Ġ= Ġnamespace Str . if Empty Ġ{ Ġnull Ġ} ĊĠĠĠ Ġval Ġacknowledge Id Ġ= Ġacknowledge Id Str . toInt () ĊĠĠĠ Ġ// Ġdirectly Ġaccessing Ġthe ĠJSON Ġas Ġan Ġarray Ġis Ġsafe Ġhere , Ġsince Ġthe Ġregex Ġmakes Ġsure Ġthis Ġis Ġan ĊĠĠĠ Ġ// Ġarray Ġif Ġit Ġactually Ġparses ĊĠĠĠ Ġval Ġdata Ġ= Ġdata Str . if Empty Ġ{ Ġnull Ġ} ?. let Ġ{ Ġjson . parse ToJson Element ( it ). json Array Ġ} ĊĊĠĠĠ ĠSocket Io Packet . Ack nowledge ( namespace , Ġacknowledge Id , Ġdata ) Ċ } Ċ Ċ private Ġfun Ġdecode Connect Error ( ĊĠĠĠ Ġmessage : ĠString , ĊĠĠĠ Ġjson : ĠJson , Ċ ) Ġ= Ġmatch Format ( message , ĠSocket Io Packet . Connect Error . Format ) Ġ{ Ġ( namespace Str , Ġdata Str ) Ġ-> ĊĠĠĠ Ġval Ġnamespace Ġ= Ġnamespace Str . if Empty Ġ{ Ġnull Ġ} ĊĠĠĠ Ġval Ġdata Ġ= Ġdata Str . if Empty Ġ{ Ġnull Ġ} ?. let ( json :: parse ToJson Element ) ĊĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Io Packet . Connect Error ( namespace , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata Ġis ĠJsonObject Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Io Packet . Connect Error ( namespace , Ġjson . decode FromJson Element ( data )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata Ġis ĠJson Primitive Ġ&& Ġdata . isString Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Io Packet . Connect Error ( namespace , ĠSocket Io Packet . Connect Error . Data ( data . content , Ġnull )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Io Packet . Broken Packet ( message , Ġ" error Ġdata Ġis Ġneither Ġan Ġobject Ġnor Ġa Ġstring ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ