// ĠCopyright Ġ 2 0 2 0 ĠGoogle ĠLLC Ċ // Ċ // ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ // Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ // ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ // Ċ // ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ // Ċ // ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ // Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ // ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ // ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ // Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ċ package Ġcom . google . cloud state . sample . f raud Ċ Ċ import Ġcom . dev skill er . j fa iry . F air y Ċ import Ġcom . google . protobuf . util . Timestamp s Ċ import Ġcom . google . type . LatLng Ċ import Ġcom . google . type . Money Ċ import Ġio . grpc . Managed Channel Builder Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ import Ġjava . util .* Ċ import Ġkotlin . random . Random Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval Ġtarget Ġ= Ġargs . first OrNull () Ġ?: Ġ" localhost : 9 0 0 0 " ĊĠĠĠ Ġval Ġchannel Builder Ġ= ĠManaged Channel Builder . for Target ( target ) ĊĊĠĠĠ Ġval Ġchannel Ġ= Ġif Ġ( target . endsWith (": 4 4 3 ")) ĊĠĠĠĠĠĠĠ Ġchannel Builder . use Transport Security (). build () ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġchannel Builder . use Pl aintext (). build () ĊĊĠĠĠ Ġval Ġstub Ġ= ĠActivity Service Grpc Kt . Activity Service Coroutine Stub ( channel ) ĊĊĠĠĠ Ġ// Ġtodo : Ġgive Ġeach Ġuser Ġtheir Ġown Ġtime ĊĠĠĠ Ġvar Ġtime Ġ= ĠInstant . parse (" 2 0 0 7 - 1 2 - 0 3 T 1 0 : 1 5 : 3 0 . 0 0 Z "). to Epoch Milli () ĊĊĠĠĠ Ġval Ġuser Locations Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUUID . randomUUID () Ġto ĠLat Lng . newBuilder (). set Latitude ( 3 9 . 7 5 6 1 3 8 ). set Longitude (- 1 0 4 . 9 2 7 2 0 0 ). build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUUID . randomUUID () Ġto ĠLat Lng . newBuilder (). set Latitude ( 3 7 . 7 5 7 7 6 2 7 ). set Longitude (- 1 2 2 . 4 7 2 6 1 9 3 ). build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUUID . randomUUID () Ġto ĠLat Lng . newBuilder (). set Latitude ( 4 1 . 2 9 1 9 6 6 7 ). set Longitude (- 9 6 . 1 5 1 2 8 7 7 ). build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUUID . randomUUID () Ġto ĠLat Lng . newBuilder (). set Latitude ( 3 3 . 6 0 5 6 2 1 9 ). set Longitude (- 1 1 2 . 2 6 5 1 3 2 4 ). build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUUID . randomUUID () Ġto ĠLat Lng . newBuilder (). set Latitude ( 3 3 . 7 6 7 8 3 5 8 ). set Longitude (- 8 4 . 4 9 0 6 4 3 2 ). build () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġmin Timestamp Increment Ġ= ĠDuration . of Minutes ( 1 5 ). to Millis () ĊĠĠĠ Ġval Ġmax Timestamp Increment Ġ= ĠDuration . of Days ( 1 ). to Millis () ĊĠĠĠ Ġval Ġmin Amount Ġ= Ġ 1 ĊĠĠĠ Ġval Ġmax Amount Ġ= Ġ 3 0 0 ĊĠĠĠ Ġval Ġmin LatLng Increment Ġ= Ġ- 1 . 0 ĊĠĠĠ Ġval Ġmax LatLng Increment Ġ= Ġ 1 . 0 ĊĠĠĠ Ġval Ġfair y Ġ= ĠF air y . create () ĊĠĠĠ Ġval Ġrandom LatLng Increment Ġ= Ġ{ ĠRandom . next Double ( min LatLng Increment , Ġmax LatLng Increment ) Ġ} ĊĠĠĠ Ġval Ġrandom Time Increment Ġ= Ġ{ ĠRandom . next Long ( min Timestamp Increment , Ġmax Timestamp Increment ) Ġ} ĊĠĠĠ Ġval Ġrandom Amount Ġ= Ġ{ ĠRandom . nextInt ( min Amount , Ġmax Amount ) Ġ} ĊĠĠĠ Ġval Ġrandom Company Ġ= Ġ{ Ġfair y . company (). name Ġ} ĊĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtime Ġ+= Ġrandom Time Increment () ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= ĠTimestamp s . from Millis ( time ) ĊĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġrandom Amount () ĊĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġuser Locations . keys . sh uffled (). first () ĊĊĠĠĠĠĠĠĠ Ġval Ġcurrent Location Ġ= Ġuser Locations [ userId ] !! ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Location Ġ= ĠLat Lng . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Latitude ( current Location . latitude Ġ+ Ġrandom LatLng Increment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Longitude ( current Location . longitude Ġ+ Ġrandom LatLng Increment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġuser Locations [ userId ] Ġ= Ġnew Location ĊĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= ĠTransaction . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setDescription ( random Company ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Timestamp ( timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setLocation ( new Location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Amount ( Money . newBuilder (). set Units ( amount . to Long ()). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Transaction Ġ= ĠUser Transaction . newBuilder (). set UserId ( userId . toString ()). set Transaction ( transaction ). build () ĊĠĠĠĠĠĠĠ Ġprintln ( user Transaction ) ĊĠĠĠĠĠĠĠ Ġstub . add Transaction ( user Transaction ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠUser Transactions Ġtransactions Ġ= Ġstub . get Transactions ( GetUser Transactions . newBuilder (). set UserId ( userId . toString ()). build ()); ĊĠĠĠĠĠĠĠ Ġprintln ( transactions ); ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) ĊĠĠĠ Ġ} Ċ } Ċ