package Ġio . v proxy . p oc Ċ Ċ import Ġio . v proxy . lib . common .* Ċ Ċ object ĠCor outine Http 1 PO C Ġ{ ĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġloop Ġ= Ġio . v proxy . base . selector . Selector EventLoop . open () ĊĠĠĠ Ġloop . ensure Net EventLoop () ĊĠĠĠ Ġloop . loop Ġ{ Ġio . v proxy . base . util . thread . V Proxy Thread . create ( it , Ġ" coroutine - http 1 - p oc ") Ġ} ĊĠĠĠ Ġloop . with ( loop ). launch Ġ{ ĊĠĠĠĠĠ Ġval Ġlisten Port Ġ= Ġ 3 0 0 8 0 ĊĠĠĠĠĠ Ġvp lib . coroutine . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġstart Ġserver ĊĠĠĠĠĠĠĠ Ġval Ġserver Sock Ġ= Ġunsafe IO Ġ{ Ġio . v proxy . base . connection . Server Sock . create ( ĊĠĠĠĠĠĠĠĠĠ Ġio . v proxy . v fd . IP Port ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 2 7 . 0 . 0 . 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisten Port ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). coroutine () Ġ} ĊĠĠĠĠĠĠĠ Ġdefer Ġ{ Ġserver Sock . close () Ġ} ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġconn Ġ= Ġserver Sock . accept (). as Http 1 Server Connection () ĊĠĠĠĠĠĠĠĠĠ Ġprintln (" accepted Ġsocket Ġ$ conn ") ĊĠĠĠĠĠĠĠĠĠ Ġvp lib . coroutine . with ( conn ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġconn . read Request () Ġ?: Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" server Ġreceived Ġrequest : Ġ$ req ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . response ( 2 0 0 ). header (" Server ", Ġ" v proxy /" Ġ+ Ġio . v proxy . base . util . Version . VERSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. send (" Hello ĠWorld \ r \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġprintln (" wait Ġfor Ġ 1 Ġsec Ġon Ġthread : Ġ" Ġ+ ĠThread . currentThread ()) ĊĠĠĠĠĠ Ġsleep ( 1 0 0 0 ) ĊĠĠĠĠĠ Ġprintln (" begin Ġrequest Ġon Ġthread : Ġ" Ġ+ ĠThread . currentThread ()) ĊĊĠĠĠĠĠ Ġval Ġsock Ġ= Ġunsafe IO Ġ{ ĊĠĠĠĠĠĠĠ Ġio . v proxy . base . connection . Connect able Connection . create ( ĊĠĠĠĠĠĠĠĠĠ Ġio . v proxy . v fd . IP Port (" 1 2 7 . 0 . 0 . 1 ", Ġlisten Port ), Ġio . v proxy . base . connection . Connection Opts (), ĊĠĠĠĠĠĠĠĠĠ Ġio . v proxy . base . util . Ring Buffer . allocate ( 1 0 2 4 ), Ġio . v proxy . base . util . Ring Buffer . allocate ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġ). coroutine () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġsock . setTimeout ( 1 0 0 0 ) ĊĠĠĠĠĠ Ġsock . connect () ĊĠĠĠĠĠ Ġval Ġconn Ġ= Ġsock . as Http 1 Client Connection () ĊĠĠĠĠĠ Ġconn . get ("/ "). header (" Host ", Ġ" example . com "). send () ĊĠĠĠĠĠ Ġval Ġresp Ġ= Ġconn . read Response () ĊĠĠĠĠĠ Ġprintln (" client Ġreceived Ġresponse : Ġ$ resp ") ĊĠĠĠĠĠ Ġsock . close () ĊĊĠĠĠĠĠ Ġunsafe IO Ġ{ Ġloop . close () Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ