nx_chatmsg.nx source
↩ module page · 22 lines · 1311 B
1// nx_chatmsg.nx -- sovereign chat message state ladder: the delivery/read-receipt spine of an S-class chat
2// (exceed Telegram/Instagram/MMS). A message advances QUEUED -> SENT -> DELIVERED -> READ and NEVER regresses --
3// a late or duplicate receipt can't un-deliver or un-read a message, and an offline message stays QUEUED (never
4// lost). Messages + receipts ride the E2E relay (nx_e2e), so the server sees only ciphertext. Pure state logic.
5// license_tier: ORIGINAL
6
7const MS_QUEUED: i64 = 0 // composed offline / not yet at the relay
8const MS_SENT: i64 = 1 // reached the relay
9const MS_DELIVERED: i64 = 2 // reached the peer's device
10const MS_READ: i64 = 3 // peer opened it
11
12// apply a receipt that claims level `ev`; MONOTONIC -- only ever advances (stale/duplicate/out-of-order safe).
13// READ implies DELIVERED implies SENT, so a higher receipt may skip levels.
14func cm_advance(state: i64, ev: i64) -> i64 { if ev > state { return ev } return state }
15func cm_is_read(state: i64) -> i64 { if state == MS_READ { return 1 } return 0 }
16// unread badge (receiver side): messages DELIVERED but not yet READ.
17func cm_badge(states: *i64, n: i64) -> i64 {
18 var c: i64 = 0
19 var i: i64 = 0
20 while i < n { if states[i] == MS_DELIVERED { c = c + 1 } i = i + 1 }
21 return c
22}