package Ġnetwork . data . communication Ċ Ċ import ĠConfiguration Ċ import Ġnetwork . data . Endpoint Ċ import Ġnetwork . data . Node Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠMi ha el ĠVal ent in ĠBer Äį i Äį Ċ Ġ* Ġon Ġ 2 1 / 0 8 / 2 0 2 1 Ġat Ġ 1 5 : 2 0 Ċ Ġ* Ġusing ĠIntelliJ ĠIDEA Ċ Ġ* Ċ Ġ* ĠPacket Ġbuilder Ġused Ġfor Ġbuilding Ġone Ġbig Ġmessage Ġfrom Ġsmall Ġpartitions Ġ( packets ). Ċ Ġ*/ Ċ data Ġclass ĠPacket Builder ( ĊĠĠĠ Ġval Ġknown Nodes : ĠCollection < Node >, ĊĠĠĠ Ġval Ġconfiguration : ĠConfiguration , ĊĠĠĠ Ġval Ġmessage Identification : ĠString , ĊĠĠĠ Ġval Ġendpoint : ĠEndpoint , ĊĠĠĠ Ġval Ġarray Size : ĠInt Ċ ) Ġ{ ĊĊĠĠĠ Ġval ĠcreatedAt : ĠLong Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġval Ġis Ready Ġget () Ġ= Ġdata . none Ġ{ Ġit Ġ== Ġnull Ġ} ĊĊĠĠĠ Ġval Ġdata Ġ= ĠarrayOf Null s < ByteArray >( array Size ) ĊĠĠĠ Ġval Ġrecipients Ġ= Ġknown Nodes . sh uffled (). let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġto Take Ġ= Ġ 5 Ġ+ Ġ( configuration . broadcast Spread Percentage Ġ* ĠInteger . max ( it . size , Ġ 1 ) Ġ/ Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġit . take ( to Take ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Data ( index : ĠInt , Ġdata ToAdd : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata [ index ] Ġ= Ġdata ToAdd ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠNote : ĠUse Ġcarefully ! ĊĠĠĠ Ġval Ġas One Ġget () Ġ= Ġdata . fold ( ByteArray ( 0 )) Ġ{ Ġa , Ġb Ġ-> Ġa Ġ+ Ġb !! Ġ} Ċ Ċ }