package Ġcom . t ans . t file transport er . net . file transport er Ċ Ċ import Ġcom . squareup . mos hi . Types Ċ import Ġcom . t ans . t file transport er . core . State able Ċ import Ġcom . t ans . t file transport er . file . File Constants Ċ import Ġcom . t ans . t file transport er . mos hi Ċ import Ġcom . t ans . t file transport er . net . common Net Buffer Pool Ċ import Ġcom . t ans . t file transport er . net . model . File Ċ import Ġcom . t ans . t file transport er . net . model . File Md 5 Ċ import Ġcom . t ans . t file transport er . net . model . Response Folder Model Ċ import Ġcom . t ans . t file transport er . net . model . Response Folder Model Json Adapter Ċ import Ġcom . t ans . t file transport er . utils .* Ċ import Ġkotlinx . coroutines . rx 2 . await Ċ import Ġjava . io . OutputStream Ċ import Ġjava . net . Inet Address Ċ import Ġjava . net . Inet SocketAddress Ċ import Ġjava . nio . channels . As ynchronous SocketChannel Ċ import Ġjava . nio . channels . Channels Ċ import Ġjava . nio . file . Paths ĊĊ Ċ sealed Ġclass ĠFile Transport er Writer Handle ( val Ġaction : ĠFile Net Action ) Ġ: ĠState able < File Transport er Writer Handle . Companion . Transport er Writer State > Ġby ĠState able ( Transport er Writer State . Create ) Ġ{ ĊĊĠĠĠ Ġsuspend Ġfun Ġupdate State ( state : ĠTransport er Writer State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate State Ġ{ Ġstate Ġ}. await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġsuspend Ġfun Ġhandle ( writer Channel : ĠAs ynchronous SocketChannel ) ĊĊĠĠĠ Ġsuspend Ġfun ĠAs ynchronous SocketChannel . default Action Code Write () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠByteArray ( 1 ) Ġ{ Ġaction . action Code Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġcommon Net Buffer Pool . request Buffer () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Suspend Size ( buffer , Ġbytes ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Net Buffer Pool . recycle Buffer ( buffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠAs ynchronous SocketChannel . default Int Size Write ( int Size : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġint Size . to Bytes () ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġcommon Net Buffer Pool . request Buffer () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Suspend Size ( buffer , Ġbytes ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Net Buffer Pool . recycle Buffer ( buffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġenum Ġclass ĠTransport er Writer State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCreate , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStart , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFinish ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠRequest Folder Children Share Writer Handle ( ĊĠĠĠĠĠĠĠ Ġ// ĠByteArray Ġsize ĊĠĠĠĠĠĠĠ Ġval Ġpath Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġpath Write : Ġsuspend ĠRequest Folder Children Share Writer Handle .( output Stream : ĠOutputStream ) Ġ-> ĠUnit Ċ ) Ġ: ĠFile Transport er Writer Handle ( File Net Action . Request Folder Children Share ) Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġhandle ( writer Channel : ĠAs ynchronous SocketChannel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġcommon Net Buffer Pool . request Buffer () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Channel . default Action Code Write () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Channel . default Int Size Write ( path Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Channel . write Data Limit ( limit Ġ= Ġpath Size . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Ġ= Ġbuffer ) Ġ{ ĠoutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Write ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommon Net Buffer Pool . recycle Buffer ( buffer ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result . is Failure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġ Ġresult . exception OrNull () !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠFolder Children Share Writer Handle ( ĊĠĠĠĠĠĠĠ Ġ// ĠByteArray Ġsize ĊĠĠĠĠĠĠĠ Ġval Ġfiles Json Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġfiles Json Write : Ġsuspend ĠFolder Children Share Writer Handle .( output Stream : ĠOutputStream ) Ġ-> ĠUnit Ċ ) Ġ: ĠFile Transport er Writer Handle ( File Net Action . Folder Children Share ) Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġhandle ( writer Channel : ĠAs ynchronous SocketChannel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġcommon Net Buffer Pool . request Buffer () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Channel . default Action Code Write () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Channel . default Int Size Write ( files Json Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Channel . write Data Limit ( limit Ġ= Ġfiles Json Size . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Ġ= Ġbuffer ) Ġ{ ĠoutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiles Json Write ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommon Net Buffer Pool . recycle Buffer ( buffer ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result . is Failure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġ Ġresult . exception OrNull () !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Json String ( response Folder Model : ĠResponse Folder Model ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse Folder Model Json Adapter ( mos hi ). toJson ( response Folder Model ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠRequest Files Share Writer Handle ( ĊĠĠĠĠĠĠĠ Ġ// ĠByteArray Ġsize ĊĠĠĠĠĠĠĠ Ġval Ġfiles Json DataSize : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġfiles Json Data Write : Ġsuspend ĠRequest Files Share Writer Handle .( output Stream : ĠOutputStream ) Ġ-> ĠUnit Ċ ) Ġ: ĠFile Transport er Writer Handle ( File Net Action . Request Files Share ) Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġhandle ( writer Channel : ĠAs ynchronous SocketChannel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġcommon Net Buffer Pool . request Buffer () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Channel . default Action Code Write () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Channel . default Int Size Write ( files Json DataSize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Channel . write Data Limit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ= Ġfiles Json DataSize . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Ġ= Ġbuffer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġfiles Json Data Write ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommon Net Buffer Pool . recycle Buffer ( buffer ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result . is Failure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġ Ġresult . exception OrNull () !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Json String ( files : ĠList < File >): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm oshi Type Ġ= ĠTypes . new Parameterized Type ( List :: class . java , ĠFile :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm oshi . adapter < List < File >>( mos hi Type ). toJson ( files ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠFiles Share Writer Handle ( ĊĠĠĠĠĠĠĠ Ġval Ġfiles : ĠList < File >, ĊĠĠĠĠĠĠĠ Ġval Ġfiles Write : Ġsuspend ĠFiles Share Writer Handle .( files Md 5 s : ĠList < File Md 5 >, Ġlocal Address : ĠInet Address ) Ġ-> ĠUnit Ċ ) Ġ: ĠFile Transport er Writer Handle ( File Net Action . Files Share ) Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġhandle ( writer Channel : ĠAs ynchronous SocketChannel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter Channel . default Action Code Write () ĊĠĠĠĠĠĠĠ Ġval Ġfile Md 5 s Ġ= Ġfiles . filter Ġ{ Ġit . size Ġ> Ġ 0 Ġ}. map Ġ{ ĠFile Md 5 ( md 5 Ġ= ĠPaths . get ( File Constants . home Path String , Ġit . path ). get FilePath Md 5 (), Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġjson Data Ġ= Ġget Json String ( file Md 5 s ). toByteArray ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġwriter Channel . default Int Size Write ( json Data . size ) ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġcommon Net Buffer Pool . request Buffer () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Channel . write Data Limit ( limit Ġ= Ġjson Data . size . to Long ()) Ġ{ ĠoutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Writer Ġ= ĠChannels . new Channel ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Writer . write Suspend Size ( buffer , Ġjson Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles Write ( file Md 5 s , Ġ( writer Channel . local Address Ġas ĠInet SocketAddress ). address ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Net Buffer Pool . recycle Buffer ( buffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Json String ( md 5 Files : ĠList < File Md 5 >): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm oshi Type Ġ= ĠTypes . new Parameterized Type ( List :: class . java , ĠFile Md 5 :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm oshi . adapter < List < File Md 5 >>( mos hi Type ). toJson ( md 5 Files ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSend Message Share Writer Handle ( ĊĠĠĠĠĠĠĠ Ġ// ĠByteArray Ġsize ĊĠĠĠĠĠĠĠ Ġval Ġmessage Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġmessage Write : Ġsuspend ĠSend Message Share Writer Handle .( output Stream : ĠOutputStream ) Ġ-> ĠUnit Ċ ) Ġ: ĠFile Transport er Writer Handle ( File Net Action . SendMessage ) Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġhandle ( writer Channel : ĠAs ynchronous SocketChannel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter Channel . default Action Code Write () ĊĠĠĠĠĠĠĠ Ġwriter Channel . default Int Size Write ( message Size ) ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġcommon Net Buffer Pool . request Buffer () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Channel . write Data Limit ( limit Ġ= Ġmessage Size . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Ġ= Ġbuffer ) Ġ{ ĠoutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Write ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Net Buffer Pool . recycle Buffer ( buffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }