package Ġb aa ah s Ċ Ċ import Ġb aa ah s . geom . Vector 3 F Ċ import Ġb aa ah s . io . ByteArray Reader Ċ import Ġb aa ah s . net . Network Ċ import Ġb aa ah s . net . listen Fragment ing Udp Ċ import Ġb aa ah s . proto .* Ċ import Ġb aa ah s . util . Clock Ċ import Ġb aa ah s . util . Logger Ċ import Ġb aa ah s . util . Time Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠBr ain ( ĊĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠ Ġprivate Ġval Ġnetwork : ĠNetwork , ĊĠĠĠ Ġprivate Ġval Ġpixels : ĠPixel s , ĊĠĠĠ Ġprivate Ġval Ġclock : ĠClock Ċ ) Ġ: ĠNetwork . Udp Listener Ġ{ ĊĠĠĠ Ġval Ġfac ade Ġ= ĠF acade () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlink : ĠNetwork . Link ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġudp Socket : ĠNetwork . Udp Socket ĊĠĠĠ Ġprivate Ġvar Ġlast Instructions Received At : ĠTime ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmodel ElementName Ġ: ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġfield Ġ= Ġvalue ; Ġfac ade . notify Changed () Ġ} ĊĠĠĠ Ġprivate Ġvar Ġpixel Count : ĠInt Ġ= ĠSpark le Motion . MAX _ PIXEL _ COUNT ĊĠĠĠ Ġprivate Ġvar Ġpixel Locations : ĠList < Vector 3 F > Ġ= Ġempty List () ĊĠĠĠ Ġprivate Ġvar Ġcurrent Shader Desc : ĠByteArray ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent Render Tree : ĠRender Tree < *> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġstate : ĠState Ġ= ĠState . Unknown ĊĊĠĠĠ Ġprivate Ġval Ġframe Channel Ġ= ĠChannel < Incoming Frame >( Channel . CON FL ATED ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . warn Ġ{ Ġ" [$ id ]: ĠSk ipped Ġframe !" Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠState Ġ{ ĠUnknown , ĠLink , ĠOnline Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġlink Ġ= Ġnetwork . link (" brain ") ĊĠĠĠĠĠĠĠ Ġudp Socket Ġ= Ġlink . listen Fragment ing Udp ( Ports . BR AIN , Ġthis ) ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ Ġhandle Frames () Ġ} ĊĠĠĠĠĠĠĠ Ġsend Hello () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Instructions Received At Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmodel ElementName Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġpixel Count Ġ= ĠSpark le Motion . MAX _ PIXEL _ COUNT ĊĠĠĠĠĠĠĠ Ġpixel Locations Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġcurrent Shader Desc Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcurrent Render Tree Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġpixels . indices ) Ġpixels [ i ] Ġ= ĠColor . WHITE ĊĊĠĠĠĠĠĠĠ Ġsend Hello () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSo Ġthat Ġthe ĠJVM Ġstandalone Ġcan Ġboot Ġup Ġand Ġhave Ġa Ġfixture Ġname Ġwithout Ġmapping ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġforced Fixture Name ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel ElementName Ġ= Ġname ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsend Hello () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelapsed Since Message Ġ= Ġclock . now () Ġ- Ġ( last Instructions Received At Ġ?: Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elapsed Since Message Ġ> Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Instructions Received At Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" [$ id ] Ġhaven 't Ġheard Ġfrom ĠP ink y Ġin Ġ${ elapsed Since Message } s " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġudp Socket . broadcast Udp ( Ports . PIN KY , ĠBr ain Hello Message ( id , Ġmodel ElementName )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreceive ( from Address : ĠNetwork . Address , Ġfrom Port : ĠInt , Ġbytes : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Instructions Received At Ġ= Ġclock . now () ĊĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠByteArray Reader ( bytes ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInline Ġmessage Ġparsing Ġhere Ġso Ġwe Ġcan Ġoptimize Ġstuff . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠType . get ( reader . read Byte ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Got Ġa Ġmessage Ġof Ġtype Ġ${ type }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType . BR AIN _ PANEL _ SHA DE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ Ġframe Channel . send ( Incoming Frame ( reader , Ġfrom Address , Ġfrom Port )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType . BR AIN _ ID _ REQUEST Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" [$ id ] Ġ$ type : ĠHello ($ id , Ġ$ model ElementName )" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġudp Socket . send Udp ( from Address , Ġfrom Port , ĠBr ain Hello Message ( id , Ġmodel ElementName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType . BR AIN _ MAPPING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠBr ain Mapping Message . parse ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel ElementName Ġ= Ġmessage . fixture Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Count Ġ= Ġmessage . pixel Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Locations Ġ= Ġmessage . pixel Locations ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnext Ġframe Ġwe 'll Ġneed Ġto Ġrecreate Ġeverything ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Shader Desc Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Render Tree Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" [$ id ] Ġ$ type : ĠHello ($ id , Ġ$ model ElementName )" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġudp Socket . broadcast Udp ( Ports . PIN KY , ĠBr ain Hello Message ( id , Ġmodel ElementName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType . PING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġping Ġ= ĠPing Message . parse ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" [$ id ] Ġ$ type : Ġis P ong =${ ping . is P ong }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ping . is P ong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġudp Socket . send Udp ( from Address , Ġfrom Port , ĠPing Message ( ping . data , Ġis P ong Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOther Ġmessage Ġtypes Ġare Ġignored Ġby ĠBr ains . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" [$ id ] ĠUnknown Ġmessage Ġ$ type " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( e ) Ġ{ Ġ" [$ id ] Ġfailed Ġto Ġhandle Ġa Ġpacket ." Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġhandle Frames () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġincoming Frame Ġ= Ġframe Channel . receive () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader Ġ= Ġincoming Frame . reader ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp ong Data Ġ= Ġif Ġ( reader . read Boolean ()) Ġreader . read Bytes With Size () Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshader Desc Ġ= Ġreader . read Bytes With Size () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġpossible , Ġuse Ġthe Ġpreviously - built ĠShader Ġstuff : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthe Current Shader Desc Ġ= Ġcurrent Shader Desc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( the Current Shader Desc Ġ== Ġnull Ġ|| Ġ! the Current Shader Desc . content Equals ( shader Desc )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Shader Desc Ġ= Ġshader Desc ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshader Ġ= ĠBr ain Shader . parse ( ByteArray Reader ( shader Desc )) Ġas ĠBr ain Shader < Brain Shader . Buffer > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Render Tree Ġ= ĠRender Tree ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshader . create Renderer (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshader . create Buffer ( pixel Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Render Tree ?. release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Render Tree Ġ= Ġnew Render Tree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( current Render Tree !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread ( reader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( pixels ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p ong Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġudp Socket . send Udp ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincoming Frame . from Address , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincoming Frame . from Port , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPing Message ( p ong Data , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠIncoming Frame ( ĊĠĠĠĠĠĠĠ Ġval Ġreader : ĠByteArray Reader , ĊĠĠĠĠĠĠĠ Ġval Ġfrom Address : ĠNetwork . Address , ĊĠĠĠĠĠĠĠ Ġval Ġfrom Port : ĠInt ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġclass ĠRender Tree < B Ġ: ĠBr ain Shader . Buffer >( val Ġbrain Shader : ĠBr ain Shader < B >, Ġval Ġrenderer : ĠBr ain Shader . Renderer < B >, Ġval Ġbuffer : ĠB ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġread ( reader : ĠByteArray Reader ) Ġ= Ġbuffer . read ( reader ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġdraw ( pixels : ĠPixel s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . begin Frame ( buffer , Ġpixels . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġpixels . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpixels [ i ] Ġ= Ġrenderer . draw ( buffer , Ġi ) Ġ?: ĠColor . BLACK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . end Frame () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpixels . finished Frame () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠF acade Ġ: Ġb aa ah s . ui . Facade () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ Brain . id ĊĠĠĠĠĠĠĠ Ġval Ġstate : ĠState ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ Brain . state ĊĠĠĠĠĠĠĠ Ġval Ġmodel ElementName : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ Brain . model ElementName ĊĊĠĠĠĠĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Reset ting ĠBr ain Ġ$ id !" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ Ġthis @ Brain . reset () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= ĠLogger < Brain >() ĊĠĠĠ Ġ} Ċ } Ċ