package Ġapp . playground . di . cron et Ċ Ċ import Ġokhttp 3 . internal . close Quiet ly Ċ import Ġok io . Buffer Ċ import Ġorg . chromium . net . Cron et Exception Ċ import Ġorg . chromium . net . Url Request Ċ import Ġorg . chromium . net . Url Response Info Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . ByteBuffer Ċ Ċ // ĠTODO : Ġshould Ġreplace Ġwith Ġnull Ġparameter Ġfor Ġerror Ġonly Ġor Ġall ? Ċ internal Ġabstract Ġclass ĠRead To Memory Cron et Callback Ġ: ĠUrl Request . Callback () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbuffer Ġ= ĠBuffer () ĊĊĠĠĠ Ġoverride Ġfun Ġon Redirect Received ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠUrl Request , ĊĠĠĠĠĠĠĠ Ġinfo : ĠUrl Response Info , ĊĠĠĠĠĠĠĠ Ġnew Location Url : ĠString , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġfollow Ġredirect ĊĠĠĠĠĠĠĠ Ġrequest . follow Redirect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Response Started ( url Request : ĠUrl Request , Ġinfo : ĠUrl Response Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInv oked Ġwhen Ġthe Ġfinal Ġset Ġof Ġheaders , Ġafter Ġall Ġredirects , Ġis Ġreceived . ĠWill Ġonly Ġbe ĊĠĠĠĠĠĠĠ Ġ// Ġinvoked Ġonce Ġfor Ġeach Ġrequest . ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠWith Ġthe Ġexception Ġof Ġon Canceled (), Ġno Ġother Ġ{@ link ĠCallback } Ġmethod Ġwill Ġbe Ġinvoked ĊĠĠĠĠĠĠĠ Ġ// Ġfor Ġthe Ġrequest , Ġincluding Ġon Succeeded () Ġand Ġon Failed (), Ġuntil Ġread () Ġis Ġcalled ĊĠĠĠĠĠĠĠ Ġurl Request . read ( ByteBuffer . allocate Direct ( BYTE _ BUFFER _ CAP ACITY _ BYTES )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Read Completed ( ĊĠĠĠĠĠĠĠ Ġurl Request : ĠUrl Request , ĊĠĠĠĠĠĠĠ Ġinfo : ĠUrl Response Info , ĊĠĠĠĠĠĠĠ Ġbyte Buffer : ĠByteBuffer , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġbyte Ġbuffer Ġwe 're Ġgetting Ġin Ġthe Ġcallback Ġhasn 't Ġbeen Ġf lipped Ġfor Ġreading , ĊĠĠĠĠĠĠĠ Ġ// Ġso Ġflip Ġit Ġso Ġwe Ġcan Ġread Ġthe Ġcontent . ĊĠĠĠĠĠĠĠ Ġbyte Buffer . flip () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . write ( byte Buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreceive Channel . write ( byte Buffer ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure ( url Request , Ġinfo , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠReset Ġthe Ġbuffer Ġto Ġprepare Ġit Ġfor Ġthe Ġnext Ġread ĊĠĠĠĠĠĠĠ Ġbyte Buffer . clear () ĊĊĠĠĠĠĠĠĠ Ġ// ĠContinue Ġreading Ġthe Ġrequest ĊĠĠĠĠĠĠĠ Ġurl Request . read ( byte Buffer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġon Succeeded ( url Request : ĠUrl Request , Ġinfo : ĠUrl Response Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInv oked Ġwhen Ġrequest Ġis Ġcompleted Ġsuccessfully . ĠOnce Ġinvoked , Ġno Ġother ĠCallback Ġmethods ĊĠĠĠĠĠĠĠ Ġ// Ġwill Ġbe Ġinvoked . ĊĠĠĠĠĠĠĠ Ġval Ġbody Bytes : ĠByteArray Ġ= Ġbuffer . read ByteArray () ĊĠĠĠĠĠĠĠ Ġbuffer . clear () ĊĠĠĠĠĠĠĠ Ġbuffer . close Quiet ly () ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġinvoke Ġthe Ġcallback Ġdirectly Ġhere Ġfor Ġsimplicity . ĠNote Ġthat Ġthe Ġexecutor Ġrunning Ġthis ĊĠĠĠĠĠĠĠ Ġ// Ġcallback Ġmight Ġbe Ġshared Ġwith Ġother ĠC ron et Ġrequests , Ġor Ġeven Ġwith Ġother Ġparts Ġof Ġyour ĊĠĠĠĠĠĠĠ Ġ// Ġapplication . ĠAlways Ġmake Ġsure Ġto Ġappropriately Ġprovision Ġyour Ġpools , Ġand Ġconsider ĊĠĠĠĠĠĠĠ Ġ// Ġdeleg ating Ġtime Ġconsuming Ġwork Ġon Ġanother Ġexecutor . ĊĠĠĠĠĠĠĠ Ġon Succeeded ( url Request , Ġinfo , Ġbody Bytes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġon Succeeded ( ĊĠĠĠĠĠĠĠ Ġurl Request : ĠUrl Request , ĊĠĠĠĠĠĠĠ Ġinfo : ĠUrl Response Info , ĊĠĠĠĠĠĠĠ Ġbody Bytes : ĠByteArray , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġon Failed ( ĊĠĠĠĠĠĠĠ Ġurl Request : ĠUrl Request , ĊĠĠĠĠĠĠĠ Ġinfo : ĠUrl Response Info ?, ĊĠĠĠĠĠĠĠ Ġerror : ĠC ron et Exception , ĊĠĠĠ Ġ) Ġ= Ġon Failure ( url Request Ġ= Ġurl Request , Ġinfo Ġ= Ġinfo , Ġerror Ġ= Ġerror ) ĊĊĠĠĠ Ġabstract Ġfun Ġon Failure ( url Request : ĠUrl Request , Ġinfo : ĠUrl Response Info ?, Ġerror : ĠIOException ) ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġon Canceled ( url Request : ĠUrl Request , Ġinfo : ĠUrl Response Info ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Canceled ( url Request , Ġinfo ) ĊĠĠĠĠĠĠĠ Ġon Canceled () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġon Canceled () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBYTE _ BUFFER _ CAP ACITY _ BYTES Ġ= Ġ 2 5 6 Ġ* Ġ 1 0 2 4 ĊĠĠĠ Ġ} Ċ } Ċ