package Ġnet . join u . pro dig y Ċ Ċ import Ġnet . join u . r udp . R UD PS ocket Ċ import Ġnet . join u . r udp . run Sus pending Ċ import Ġnet . join u . r udp . send Ċ import Ġjava . io . Closeable Ċ import Ġjava . net . Inet SocketAddress ĊĊ Ċ /** Ċ Ġ* ĠAn Ġinterface Ġthat Ġrepresents Ġsome Ġmechanism Ġto Ġwork Ġwith Ġthe Ġnetwork . ĠImplementation Ġcan Ġbe Ġany . Ċ Ġ* ĠBy Ġdefault Ġ[ Protocol Runner ] Ġuses Ġ[ R UDP Network Provider ] Ġimplementation . Ċ Ġ*/ Ċ interface ĠNetwork Provider Ġ: ĠClose able Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġsome Ġpacket Ġto Ġsome Ġreceiver . ĠS usp ends Ġuntil Ġpacket Ġis Ġdelivered . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpacket Ġ[ Protocol Packet ] Ġ- Ġpacket Ġto Ġsend ĊĠĠĠĠ Ġ* Ġ@ param Ġto Ġ[ Inet SocketAddress ] Ġ- Ġreceiver ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġsend ( packet : ĠProtocol Packet , Ġto : ĠInet SocketAddress ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠS usp ends Ġuntil Ġreceives Ġsome Ġpacket Ġfrom Ġnetwork . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Pair ] Ġof Ġ[ Protocol Packet ] Ġand Ġ[ Inet SocketAddress ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġreceive (): ĠPair < Protocol Packet , ĠInet SocketAddress > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBind s Ġto Ġsome Ġaddress Ġin Ġorder Ġto Ġreceive Ġpackets . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbind ( address : ĠInet SocketAddress ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRuns Ġprocessing Ġloop Ġ( e . g . ĠTCP Socket . listen (), Ġor ĠR UD PS ocket . run Sus pending ()) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġrun Sus pending () Ċ } Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof Ġ[ Network Provider ] Ġthat Ġuses Ġ[ R UD PS ocket ] Ġto Ġhandle Ġnetworking . Ċ Ġ*/ Ċ class ĠR UDP Network Provider ( val Ġsocket : ĠR UD PS ocket Ġ= ĠR UD PS ocket ()) Ġ: ĠNetwork Provider Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsend ( packet : ĠProtocol Packet , Ġto : ĠInet SocketAddress ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠSerialization Utils . to Bytes ( packet ) ĊĠĠĠĠĠĠĠ Ġsocket . send ( data , Ġto ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġreceive (): ĠPair < Protocol Packet , ĠInet SocketAddress > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġsocket . receive () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSerialization Utils . to Any < Protocol Packet >( data . data ) Ġto Ġdata . address ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind ( address : ĠInet SocketAddress ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsocket . bind ( address ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġsocket . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġrun Sus pending () Ġ{ ĊĠĠĠĠĠĠĠ Ġsocket . run Sus pending () ĊĠĠĠ Ġ} Ċ } Ċ