code wiki / _hdl_build / nx_room_relay_gate.nx

nx_room_relay_gate.nx source

↩ module page · 78 lines · 3685 B

1// nx_room_relay_gate.nx -- proves the sovereign server-relay core (nx_room_relay): 2// 1) roster lists OTHER live peers in a room (not self), correct ids 3// 2) room isolation -- peers in different rooms never see each other 4// 3) frame update -- re-post replaces a peer's latest frame + seq (no dup slot) 5// 4) staleness -- peers past TTL drop out of the roster 6// 5) neg-control -- a ghost peer that never posted is not found 7// Built nx_cc_sovereign -> nxasm_x86 (no gcc, no .sh). Composes with nx_room_stream. 8// license_tier: ORIGINAL 9import "nx_syscalls.nx" 10import "nx_gate_emit_lib.nx" 11import "nx_room_relay.nx" 12 13func main() -> i64 { 14 g_puts("nx_room_relay gate (sovereign server-relay core, no WebRTC/STUN/TURN)\n" as *u8) 15 var pass: i64 = 0; var total: i64 = 0 16 17 let N: i64 = 8 18 let SB: i64 = 512 19 let st: *i64 = sys_mmap((2 + 5*N) * 8) as *i64 20 let arena: *u8 = sys_mmap(N * SB) 21 rr_init(st, N, SB) 22 23 // distinct frame payloads per peer 24 let fa: *u8 = sys_mmap(64); var i: i64=0; while i<20 { fa[i]=(100+i) as u8; i=i+1 } 25 let fb: *u8 = sys_mmap(64); i=0; while i<20 { fb[i]=(40+i) as u8; i=i+1 } 26 let fc: *u8 = sys_mmap(64); i=0; while i<20 { fc[i]=(7+i) as u8; i=i+1 } 27 let fb2: *u8 = sys_mmap(64); i=0; while i<20 { fb2[i]=(200-i) as u8; i=i+1 } 28 let fd: *u8 = sys_mmap(64); i=0; while i<20 { fd[i]=(3*i) as u8; i=i+1 } 29 30 let ROOM_A: i64 = 0xAAA111 31 let ROOM_B: i64 = 0xBBB222 32 33 rr_post(st, arena, ROOM_A, 100, 1000, 1, fa, 20) 34 rr_post(st, arena, ROOM_A, 101, 1000, 1, fb, 20) 35 rr_post(st, arena, ROOM_A, 102, 1000, 1, fc, 20) 36 37 // 1) roster from peer 100 in room A -> [101,102] 38 let out: *i64 = sys_mmap(N * 8) as *i64 39 var c: i64 = rr_roster(st, ROOM_A, 100, 1000, 8000, out) 40 var r1: i64 = 1 41 if c != 2 { r1 = 0 } 42 if out[0] != 101 { r1 = 0 } 43 if out[1] != 102 { r1 = 0 } 44 pass = pass + g_check("roster lists other live peers (101,102), not self" as *u8, r1); total=total+1 45 46 // 2) room isolation -- peer 200 in room B; A unchanged, B alone 47 rr_post(st, arena, ROOM_B, 200, 1000, 1, fd, 20) 48 let ca: i64 = rr_roster(st, ROOM_A, 100, 1000, 8000, out) 49 let cb: i64 = rr_roster(st, ROOM_B, 200, 1000, 8000, out) 50 var r2: i64 = 1 51 if ca != 2 { r2 = 0 } 52 if cb != 0 { r2 = 0 } 53 pass = pass + g_check("room isolation (A still 2, B alone)" as *u8, r2); total=total+1 54 55 // 3) frame update -- re-post peer 101 with new seq + new frame; no dup slot 56 rr_post(st, arena, ROOM_A, 101, 1100, 5, fb2, 20) 57 let c3: i64 = rr_roster(st, ROOM_A, 100, 1100, 8000, out) // still exactly 2 (no dup) 58 let s101: i64 = rr_live(st, ROOM_A, 101, 1100, 8000) 59 var r3: i64 = 1 60 if c3 != 2 { r3 = 0 } 61 if s101 < 0 { r3 = 0 } else { 62 if rr_seq(st, s101) != 5 { r3 = 0 } 63 var k: i64 = 0; while k < 20 { if arena[s101*SB + k] != fb2[k] { r3 = 0 } k = k + 1 } 64 } 65 pass = pass + g_check("re-post replaces frame+seq, no duplicate slot" as *u8, r3); total=total+1 66 67 // 4) staleness -- advance now past TTL; everyone drops out 68 let c4: i64 = rr_roster(st, ROOM_A, 100, 20000, 8000, out) 69 pass = pass + g_check("stale peers (past TTL) drop from roster" as *u8, c4 == 0); total=total+1 70 71 // 5) neg-control -- ghost peer never posted 72 let ghost: i64 = rr_find(st, ROOM_A, 999) 73 pass = pass + g_check("ghost peer not found (neg-control)" as *u8, ghost < 0); total=total+1 74 75 g_puts("---- room-relay gate: passed " as *u8); g_pn(pass); g_puts(" / " as *u8); g_pn(total); g_puts(" ----\n" as *u8) 76 if pass == total { g_puts("verdict=GREEN\n" as *u8); sys_exit(0); return 0 } 77 g_puts("verdict=RED\n" as *u8); sys_exit(1); return 1 78}