package Ġcom . ha ish ink it . rt mp Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . ha ish ink it . event . Event Ċ import Ġcom . ha ish ink it . event . EventDispatcher Ċ import Ġcom . ha ish ink it . event . Event Utils Ċ import Ġcom . ha ish ink it . event . I EventListener Ċ import Ġcom . ha ish ink it . net . Responder Ċ import Ġcom . ha ish ink it . rt mp . message . R tmp Command Message Ċ import Ġcom . ha ish ink it . rt mp . message . R tmp Message Ċ import Ġcom . ha ish ink it . rt mp . message . R tmp Message Factory Ċ import Ġcom . ha ish ink it . util . URI Util Ċ import Ġjava . net . URI Ċ import Ġjava . nio . Buffer Under flow Exception Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . util . Timer Ċ import Ġjava . util . Timer Task Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . collections . HashMap Ċ import Ġkotlin . collections . List Ċ import Ġkotlin . collections . Map Ċ import Ġkotlin . collections . Mutable List Ċ import Ġkotlin . collections . drop Last While Ċ import Ġkotlin . collections . forEach Ċ import Ġkotlin . collections . iterator Ċ import Ġkotlin . collections . map Of Ċ import Ġkotlin . collections . mutable ListOf Ċ import Ġkotlin . collections . set Ċ import Ġkotlin . collections . to Typed Array Ċ import Ġkotlin . concurrent . schedule Ċ Ċ /** Ċ Ġ* Ġflash . net . Net Connection Ġfor ĠKotlin Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ open Ġclass ĠR tmp Connection Ġ: ĠEvent Dispatcher ( null ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNet Status Event # info . code Ġfor ĠNet Connection ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġenum Ġclass ĠCode ( val Ġraw Value : ĠString , Ġval Ġlevel : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCALL _ BAD _ VERSION (" Net Connection . Call . Bad Version ", Ġ" error "), ĊĠĠĠĠĠĠĠ ĠCALL _ FAILED (" Net Connection . Call . Failed ", Ġ" error "), ĊĠĠĠĠĠĠĠ ĠCALL _ PROHIBIT ED (" Net Connection . Call . Pro hibited ", Ġ" error "), ĊĠĠĠĠĠĠĠ ĠCONNECT _ APP _ SHUT DOWN (" Net Connection . Connect . App Shutdown ", Ġ" status "), ĊĠĠĠĠĠĠĠ ĠCONNECT _ CLOSED (" Net Connection . Connect . Closed ", Ġ" status "), ĊĠĠĠĠĠĠĠ ĠCONNECT _ FAILED (" Net Connection . Connect . Failed ", Ġ" error "), ĊĠĠĠĠĠĠĠ ĠCONNECT _ IDLE _ TIME _ OUT (" Net Connection . Connect . Idle TimeOut ", Ġ" status "), ĊĠĠĠĠĠĠĠ ĠCONNECT _ INVALID _ APP (" Net Connection . Connect . Invalid App ", Ġ" error "), ĊĠĠĠĠĠĠĠ ĠCONNECT _ NETWORK _ CHANGE (" Net Connection . Connect . Network Change ", Ġ" status "), ĊĠĠĠĠĠĠĠ ĠCONNECT _ RE JECT ED (" Net Connection . Connect . Rejected ", Ġ" status "), ĊĠĠĠĠĠĠĠ ĠCONNECT _ SUCCESS (" Net Connection . Connect . Success ", Ġ" status "); ĊĊĠĠĠĠĠĠĠ Ġfun Ġdata ( description : ĠString ): ĠMap < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠHashMap < String , ĠAny >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [" code "] Ġ= Ġraw Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [" level "] Ġ= Ġlevel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( description . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [" description "] Ġ= Ġdescription ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġenum Ġclass ĠSupport Sound ( val Ġraw Value : ĠShort ) Ġ{ ĊĠĠĠĠĠĠĠ ĠNONE ( 0 x 0 0 1 ), ĊĠĠĠĠĠĠĠ ĠAD PCM ( 0 x 0 0 2 ), ĊĠĠĠĠĠĠĠ ĠMP 3 ( 0 x 0 0 4 ), ĊĠĠĠĠĠĠĠ ĠIN TEL ( 0 x 0 0 8 ), ĊĠĠĠĠĠĠĠ ĠUN USED ( 0 x 0 0 1 0 ), ĊĠĠĠĠĠĠĠ ĠN EL LY 8 ( 0 x 0 0 2 0 ), ĊĠĠĠĠĠĠĠ ĠN EL LY ( 0 x 0 0 4 0 ), ĊĠĠĠĠĠĠĠ ĠG 7 1 1 A ( 0 x 0 0 8 0 ), ĊĠĠĠĠĠĠĠ ĠG 7 1 1 U ( 0 x 0 1 0 0 ), ĊĠĠĠĠĠĠĠ ĠA AC ( 0 x 0 2 0 0 ), ĊĠĠĠĠĠĠĠ ĠSPE EX ( 0 x 0 8 0 0 ), ĊĠĠĠĠĠĠĠ ĠALL ( 0 x 0 FFF ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġenum Ġclass ĠSupport Video ( val Ġraw Value : ĠShort ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUN USED ( 0 x 0 0 1 ), ĊĠĠĠĠĠĠĠ ĠJPEG ( 0 x 0 0 2 ), ĊĠĠĠĠĠĠĠ ĠS ORE N SON ( 0 x 0 0 4 ), ĊĠĠĠĠĠĠĠ ĠHOME BRE W ( 0 x 0 0 8 ), ĊĠĠĠĠĠĠĠ ĠV P 6 ( 0 x 0 0 1 0 ), ĊĠĠĠĠĠĠĠ ĠV P 6 _ ALPHA ( 0 x 0 0 2 0 ), ĊĠĠĠĠĠĠĠ ĠHOME BRE WV ( 0 x 0 0 4 0 ), ĊĠĠĠĠĠĠĠ ĠH 2 6 4 ( 0 x 0 0 8 0 ), ĊĠĠĠĠĠĠĠ ĠALL ( 0 x 0 0 FF ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠVideo Function ( val Ġraw Value : ĠShort ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCLIENT _ SEEK ( 1 ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠEvent Listener ( private Ġval Ġconnection : ĠR tmp Connection ) Ġ: ĠI EventListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Event ( event : ĠEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠEvent Utils . toMap ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( VERBOSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġdata . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( data [" code "]. toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCode . CONNECT _ SUCCESS . raw Value Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Task Ġ= ĠTimer (). schedule ( 0 , Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( stream Ġin Ġstreams ) Ġstream . value . on () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġmessage Factory . create R tmp Set Chunk Size Message () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . size Ġ= ĠDEFAULT _ CHUNK _ SIZE _ S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . chunk Stream ID Ġ= ĠR tmp Chunk . CONTROL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . socket . chunk Size S Ġ= ĠDEFAULT _ CHUNK _ SIZE _ S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . do Output ( R tmp Chunk . ZERO , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠURI Ġpassed Ġto Ġthe ĠR TMP Connection . connect () Ġmethod . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġuri : ĠURI ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠURL Ġof Ġ. sw f . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġsw f Url : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠURL Ġof Ġan ĠHTTP Ġrefer er . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġpage Url : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġname Ġof Ġapplication . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġflash Ver Ġ= ĠDEFAULT _ FLASH _ VER ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġoutgoing ĠR TMP Chunk Size . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġchunk Size : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsocket . chunk Size S ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsocket . chunk Size S Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġobject Ġencoding Ġfor Ġthis ĠR TMP Connection Ġinstance . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġobject Encoding Ġ= ĠDEFAULT _ OBJECT _ ENCODING ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġinstance Ġconnected Ġto Ġserver ( true ) Ġor Ġnot ( false ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Connected : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsocket . isConnected ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġtime Ġto Ġwait Ġfor ĠTCP / IP ĠHand shake Ġdone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtimeout : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsocket . timeout ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsocket . timeout Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġstatistics Ġof Ġtotal Ġincoming Ġbytes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtotal Bytes In : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsocket . total Bytes In ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġstatistics Ġof Ġtotal Ġoutgoing Ġbytes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtotal Bytes Out : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsocket . total Bytes Out ĊĊĠĠĠ Ġinternal Ġval Ġmessages Ġ= ĠConcurrent HashMap < Short , ĠR tmp Message >() ĊĠĠĠ Ġinternal Ġval Ġstreams Ġ= ĠConcurrent HashMap < Int , ĠR tmp Stream >() ĊĠĠĠ Ġinternal Ġval Ġstreams map Ġ= ĠConcurrent HashMap < Short , ĠInt >() ĊĠĠĠ Ġinternal Ġval Ġrespon ders Ġ= ĠConcurrent HashMap < Int , ĠRes pon der >() ĊĠĠĠ Ġinternal Ġval Ġsocket Ġ= ĠR tmp Socket ( this ) ĊĠĠĠ Ġinternal Ġvar Ġtransaction ID Ġ= Ġ 0 ĊĠĠĠ Ġinternal Ġval Ġmessage Factory Ġ= ĠR tmp Message Factory ( 4 ) ĊĠĠĠ Ġprivate Ġvar Ġtimer Task : ĠTimer Task ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer Task ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġarguments : ĠMutable List < Any ?> Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġval Ġauth enticator : ĠR tmp Authenticator Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠR tmp Authenticator ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd EventListener ( Event . RT MP _ STATUS , Ġauth enticator ) ĊĠĠĠĠĠĠĠ Ġadd EventListener ( Event . RT MP _ STATUS , ĠEvent Listener ( this )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalls Ġa Ġcommand Ġor Ġmethod Ġon ĠR TMP ĠServer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcall ( command Name : ĠString , Ġresponder : ĠRes pon der ?, Ġvar arg Ġarguments : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlist Arguments Ġ= ĠArrayList < Any >( arguments . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ(` object ` Ġin Ġarguments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Arguments . add (` object `) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠR tmp Command Message ( object Encoding ) ĊĠĠĠĠĠĠĠ Ġmessage . chunk Stream ID Ġ= ĠR tmp Chunk . COMMAND ĊĠĠĠĠĠĠĠ Ġmessage . stream ID Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmessage . transaction ID Ġ= Ġ++ transaction ID ĊĠĠĠĠĠĠĠ Ġmessage . command Name Ġ= Ġcommand Name ĊĠĠĠĠĠĠĠ Ġmessage . arguments Ġ= Ġlist Arguments ĊĠĠĠĠĠĠĠ Ġif Ġ( responder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrespon ders [ transaction ID ] Ġ= Ġresponder ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdo Output ( R tmp Chunk . ZERO , Ġmessage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġtwo - way Ġconnection Ġto Ġan Ġapplication Ġon ĠR TMP ĠServer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġconnect ( command : ĠString , Ġvar arg Ġarguments : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġuri Ġ= ĠURI . create ( command ) ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġthis . uri Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( isConnected Ġ|| Ġ! SUPPORTED _ PROTOCOL S . containsKey ( uri . scheme )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġport Ġ= Ġuri . port ĊĠĠĠĠĠĠĠ Ġval Ġis Secure Ġ= Ġuri . scheme Ġ== Ġ" rt mps " ĊĠĠĠĠĠĠĠ Ġthis . arguments . clear () ĊĠĠĠĠĠĠĠ Ġarguments . forEach Ġ{ Ġvalue Ġ-> Ġthis . arguments . add ( value ) Ġ} ĊĠĠĠĠĠĠĠ Ġsocket . connect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri . host , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( port Ġ== Ġ- 1 ) ĠSUPPORT ED _ PROTOCOL S [ uri . scheme ] Ġ?: ĠDEFAULT _ PORT Ġelse Ġport , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Secure ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCloses Ġthe Ġconnection Ġfrom Ġthe Ġserver . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtimer Task Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( stream Ġin Ġstreams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . value . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstreams . remove ( stream . key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsocket . close ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDispose Ġthe Ġconnection Ġfor Ġa Ġmemory Ġmanagement . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġtimer Task Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( stream Ġin Ġstreams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . value . dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstreams . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġdo Output ( chunk : ĠR tmp Chunk , Ġmessage : ĠR tmp Message ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchunk . encode ( socket , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġmessage . release () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġtail rec Ġfun Ġlisten ( buffer : ĠByteBuffer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrollback Ġ= Ġbuffer . position () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġbuffer . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchunk Ġ= ĠR tmp Chunk . chunk ( first ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchunk Size C Ġ= Ġsocket . chunk Size C ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchunk Stream ID Ġ= Ġchunk . get Stream ID ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chunk Ġ== ĠR tmp Chunk . TH REE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġmessages [ chunk Stream ID ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= Ġmessage . payload ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġremaining Ġ= Ġpayload . remaining () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chunk Size C Ġ< Ġremaining ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Ġ= Ġchunk Size C ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buffer . position () Ġ+ Ġremaining Ġ<= Ġbuffer . limit ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayload . put ( buffer . array (), Ġbuffer . position (), Ġremaining ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . position ( buffer . position () Ġ+ Ġremaining ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . position ( rollback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! payload . has Remaining ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayload . flip () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . decode ( payload ). execute ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġchunk . decode ( chunk Stream ID , Ġthis , Ġbuffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessages [ chunk Stream ID ] Ġ= Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( chunk ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR tmp Chunk . ZERO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstreams map [ chunk Stream ID ] Ġ= Ġmessage . stream ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR tmp Chunk . ONE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstreams map [ chunk Stream ID ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . stream ID Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message . length Ġ<= Ġchunk Size C ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . decode ( buffer ). execute ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpayload Ġ= Ġmessage . payload ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buffer . position () Ġ+ Ġchunk Size C Ġ<= Ġbuffer . limit ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayload . put ( buffer . array (), Ġbuffer . position (), Ġchunk Size C ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . position ( buffer . position () Ġ+ Ġchunk Size C ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . position ( rollback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠBuffer Under flow Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . position ( rollback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIndex OutOfBoundsException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . position ( rollback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( buffer . has Remaining ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisten ( buffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcreate Stream ( stream : ĠR tmp Stream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcall ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" create Stream ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠRes pon der Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( arguments : ĠList < Any ?> ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġstreams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . value Ġ== Ġstream ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstreams . remove ( s . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ( arguments [ 0 ] Ġas ĠDouble ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstreams [ id ] Ġ= Ġstream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . readyState Ġ= ĠR tmp Stream . Ready State . OPEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Status ( arguments : ĠList < Any ?> ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ("$ TAG # on Status ", Ġarguments . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġon Socket Ready StateChange ( socket : ĠR tmp Socket , Ġready State : ĠR tmp Socket . Ready State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( VERBOSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġready State . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( readyState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR tmp Socket . Ready State . Closed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction ID Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessages . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstreams map . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrespon ders . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcreate Connection Message ( uri : ĠURI ): ĠR tmp Message Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpaths Ġ= Ġuri . path . split ("/ ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠR tmp Command Message ( R tmp Object Encoding . AM F 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcommand Object Ġ= ĠHashMap < String , ĠAny ?> () ĊĠĠĠĠĠĠĠ Ġvar Ġapp Ġ= Ġpaths [ 1 ] ĊĠĠĠĠĠĠĠ Ġif Ġ( uri . query Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Ġ+= Ġ" ?" Ġ+ Ġuri . query ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommand Object [" app "] Ġ= Ġapp ĊĠĠĠĠĠĠĠ Ġcommand Object [" flash Ver "] Ġ= Ġflash Ver ĊĠĠĠĠĠĠĠ Ġcommand Object [" sw f Url "] Ġ= Ġsw f Url ĊĠĠĠĠĠĠĠ Ġcommand Object [" tc Url "] Ġ= ĠURI Util . without UserInfo ( uri ) ĊĠĠĠĠĠĠĠ Ġcommand Object [" fp ad "] Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġcommand Object [" capabilities "] Ġ= ĠDEFAULT _ CAP AB IL ITIES ĊĠĠĠĠĠĠĠ Ġcommand Object [" audio Code cs "] Ġ= ĠSupport Sound . AAC . raw Value ĊĠĠĠĠĠĠĠ Ġcommand Object [" video Code cs "] Ġ= ĠSupport Video . H 2 6 4 . raw Value ĊĠĠĠĠĠĠĠ Ġcommand Object [" video Function "] Ġ= ĠVideo Function . CLIENT _ SEEK . raw Value ĊĠĠĠĠĠĠĠ Ġcommand Object [" page Url "] Ġ= Ġpage Url ĊĠĠĠĠĠĠĠ Ġcommand Object [" object Encoding "] Ġ= Ġobject Encoding . raw Value ĊĠĠĠĠĠĠĠ Ġmessage . chunk Stream ID Ġ= ĠR tmp Chunk . COMMAND ĊĠĠĠĠĠĠĠ Ġmessage . stream ID Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmessage . command Name Ġ= Ġ" connect " ĊĠĠĠĠĠĠĠ Ġmessage . transaction ID Ġ= Ġ++ transaction ID ĊĠĠĠĠĠĠĠ Ġmessage . command Object Ġ= Ġcommand Object ĊĠĠĠĠĠĠĠ Ġmessage . arguments Ġ= Ġarguments ĊĠĠĠĠĠĠĠ Ġif Ġ( VERBOSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġmessage . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ PORT Ġ= Ġ 1 9 3 5 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ FLASH _ VER Ġ= Ġ" F MLE / 3 . 0 Ġ( compatible ; ĠFM Sc / 1 . 0 )" ĊĠĠĠĠĠĠĠ Ġval ĠSUPPORT ED _ PROTOCOL S Ġ= Ġmap Of (" rt mp " Ġto Ġ 1 9 3 5 , Ġ" rt mps " Ġto Ġ 4 4 3 ) ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ OBJECT _ ENCODING Ġ= ĠR tmp Object Encoding . AM F 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠR tmp Connection :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ CHUNK _ SIZE _ S Ġ= Ġ 1 0 2 4 Ġ* Ġ 8 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ CAP AB IL ITIES Ġ= Ġ 2 3 9 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠVERBOSE Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ