code wiki / _hdl_build / nx_media_ws_register.nx
nx_media_ws_register.nx source
↩ module page · 87 lines · 4417 B
1// nx_media_ws_register.nx -- register the SOTA-MEDIA-CONSUMPTION program as a LIVE workstream in the WMS
2// registry (E-PLATFORM, one of the 12 valid empires -- else nx_ws_board refuses to render). Mirrors
3// nx_project_ws_register EXACTLY: hold the per-prefix wlock across the ws:ids RMW AND the ws:<id> write
4// (no nested lock = no self-deadlock); idempotent; code_link=nx_media_inventory_gate (machine-verifiable).
5// Beats the string-keyed heartbeat so the board shows ALIVE. Verifies by READBACK. NOTE: every id/const is
6// indexed only via a function PARAM (never a direct global-const index -- that path miscompiles under nx_cc).
7// expect_exit: 0 license_tier: ORIGINAL
8import "nx_ws_cas.nx"
9import "nx_heartbeat_str.nx"
10const MWR_MAGIC_1024: i64 = 1024
11
12const MWR_ID: *u8 = "SOTA-MEDIA-CONSUMPTION"
13const MWR_EMP: *u8 = "E-PLATFORM"
14const MWR_MEM: *u8 = "project-nishi-gallery-jellyfin-class-2026-07-11"
15const MWR_CODE: *u8 = "nx_media_inventory_gate"
16const MWR_HB: *u8 = "knowledge/status/wms_heartbeat.log"
17
18func mwr_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
19func mwr_cat(dst: *u8, off: i64, s: *u8) -> i64 { var o: i64 = off; var i: i64 = 0; while s[i] != (0 as u8) { dst[o] = s[i]; o = o + 1; i = i + 1 } return o }
20func mwr_n(dst: *u8, off: i64, v: i64) -> i64 { var o: i64 = off; var m: i64 = v; if m < 0 { dst[o] = 45 as u8; o = o + 1; m = 0 - m } let t: *u8 = sys_mmap(28); var k: i64 = 0; if m == 0 { t[0] = 48 as u8; k = 1 } while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } var i: i64 = 0; while i < k { dst[o + i] = t[k - 1 - i]; i = i + 1 } return o + k }
21
22// id/emp/state/mem/code are PARAMS (param-indexing is codegen-safe, unlike direct global-const indexing).
23func mwr_register(id: *u8, emp: *u8, state: *u8, mem: *u8, code: *u8) -> i64 {
24 let wp: *u8 = WS_PREFIX
25 let lp: *u8 = sys_mmap(512)
26 var i: i64 = 0
27 while wp[i] != (0 as u8) { lp[i] = wp[i]; i = i + 1 }
28 let suf: *u8 = "wlock"
29 var s: i64 = 0
30 while suf[s] != (0 as u8) { lp[i] = suf[s]; i = i + 1; s = s + 1 }
31 lp[i] = 0 as u8
32 let lfd: i64 = sys_openat_append(lp, 0x1a4)
33 if lfd >= 0 { sys_flock(lfd, SYS_LOCK_EX) }
34
35 let key: *u8 = sys_mmap(192)
36 var kk: i64 = mwr_cat(key, 0, "ws:" as *u8)
37 kk = mwr_cat(key, kk, id)
38 key[kk] = 0 as u8
39
40 let rec: *u8 = sys_mmap(MWR_MAGIC_1024)
41 var o: i64 = 0
42 o = mwr_cat(rec, o, id); rec[o] = 9 as u8; o = o + 1
43 o = mwr_cat(rec, o, emp); rec[o] = 9 as u8; o = o + 1
44 o = mwr_cat(rec, o, state); rec[o] = 9 as u8; o = o + 1
45 o = mwr_n(rec, o, sys_now_realtime_sec()); rec[o] = 9 as u8; o = o + 1
46 o = mwr_cat(rec, o, mem); rec[o] = 9 as u8; o = o + 1
47 o = mwr_cat(rec, o, code); rec[o] = 9 as u8; o = o + 1
48 o = mwr_cat(rec, o, "-" as *u8); rec[o] = 0 as u8
49 ws_put_p(WS_PREFIX, key, rec)
50
51 let pq: *i64 = sys_mmap(16) as *i64
52 let lq: *i64 = sys_mmap(16) as *i64
53 if ss_get(WS_PREFIX, "ws:ids" as *u8, pq, lq) == 1 {
54 let ids: *u8 = pq[0] as *u8
55 let idn: i64 = lq[0]
56 if ws_member(ids, idn, id) == 0 {
57 let nb: *u8 = sys_mmap(idn + 192)
58 var c: i64 = 0
59 while c < idn { nb[c] = ids[c]; c = c + 1 }
60 nb[c] = 9 as u8; c = c + 1
61 var d: i64 = 0
62 while id[d] != (0 as u8) { nb[c] = id[d]; c = c + 1; d = d + 1 }
63 nb[c] = 0 as u8
64 ws_put_p(WS_PREFIX, "ws:ids" as *u8, nb)
65 }
66 }
67 if lfd >= 0 { sys_flock(lfd, SYS_LOCK_UN); sys_close(lfd) }
68 return 0
69}
70
71func main() -> i64 {
72 mwr_puts("=== nx_media_ws_register -- SOTA-MEDIA-CONSUMPTION into WMS (E-PLATFORM, code_link=nx_media_inventory_gate) ===\n" as *u8)
73 mwr_register(MWR_ID, MWR_EMP, "ACTIVE" as *u8, MWR_MEM, MWR_CODE)
74 hb_beat_s(MWR_HB, MWR_ID, 1)
75 let pq: *i64 = sys_mmap(16) as *i64
76 let lq: *i64 = sys_mmap(16) as *i64
77 var ok: i64 = 0
78 if ss_get(WS_PREFIX, "ws:SOTA-MEDIA-CONSUMPTION" as *u8, pq, lq) == 1 { if lq[0] > 0 { ok = 1 } }
79 if ok == 1 {
80 mwr_puts("readback=OK ws:SOTA-MEDIA-CONSUMPTION = " as *u8)
81 sys_write(1, pq[0] as *u8, lq[0]); mwr_puts("\n" as *u8)
82 mwr_puts("verdict=GREEN (registered E-PLATFORM workstream; visible on nx_ws_board)\n" as *u8)
83 sys_exit(0); return 0
84 }
85 mwr_puts("verdict=RED (readback missing)\n" as *u8)
86 sys_exit(1); return 1
87}