nx_media_session.nx
buildroot/runtime/nx_media_session.nx
about
nx_media_session.nx -- abstract base for sovereign media sessions.
The reusable composition primitive that audio/video/chat sessions
extend. Per user 2026-05-19: *"i prefer oop whats the right thing
here as i do want video and audio and chat to be callable by games
or web pages or other tools aka reusable"*.
Per global engineering rules #6 (OOP with base classes), #9 (single
responsibility), #15 (DRY through shared libraries), #22
(composition over configuration).
NishiLang OOP pattern: virtual methods are typed function pointers
stored in vtable fields of the struct. Concrete subtypes embed
nx_media_session as their FIRST field (so `*nx_audio_session` casts
safely to `*nx_media_session`) and initialize their own vtable
implementations.
Consumers:
nx_video_room.nx COMPOSES audio + video + chat + signaling
nx_game_voice.nx COMPOSES audio + signaling (spatial mix)
nx_call.nx COMPOSES audio + signaling (1:1 telephony)
nx_iot_intercom.nx COMPOSES audio + chat (kitchen <-> garage)
nx_cli_meet.nx COMPOSES audio + chat (terminal-only)
Per cardinal feedback-bits-up-exceed-never-match: the OOP layer
itself is sovereign substrate. No runtime framework dependency.
Pure struct + typed-fn-ptr + generic methods over the vtable.
genealogy_id: nx_fn_ptr_typed + nx_hwprobe_tier + nx_pipeline_stage +
NISHI_COMMS_ROADMAP_phase_4 + NX_MEDIA_OOP_INTERFACES
lineage_id: nx_media_session_q10
dependencies 1 imports · 5 importers
imports: nx_syscalls_x86_64.nx
imported by: nx_audio_session.nxnx_call.nxnx_chat_session.nxnx_cli_meet.nxnx_video_session.nx
structs
| 92 | struct nx_media_session |
consts
| 45 | const NX_MEDIA_STATE_UNKNOWN: i64 = 0 |
| 46 | const NX_MEDIA_STATE_IDLE: i64 = 1 |
| 47 | const NX_MEDIA_STATE_JOINING: i64 = 2 |
| 48 | const NX_MEDIA_STATE_ACTIVE: i64 = 3 |
| 49 | const NX_MEDIA_STATE_LEAVING: i64 = 4 |
| 50 | const NX_MEDIA_STATE_CLOSED: i64 = 5 |
| 51 | const NX_MEDIA_STATE_ERROR: i64 = 6 |
| 52 | const NX_MEDIA_STATE_N: i64 = 7 |
| 58 | const NX_MEDIA_KIND_UNKNOWN: i64 = 0 |
| 59 | const NX_MEDIA_KIND_AUDIO: i64 = 1 |
| 60 | const NX_MEDIA_KIND_VIDEO: i64 = 2 |
| 61 | const NX_MEDIA_KIND_CHAT: i64 = 3 |
| 62 | const NX_MEDIA_KIND_DATA: i64 = 4 // future: per-app data channels |
| 63 | const NX_MEDIA_KIND_N: i64 = 5 |
| 67 | const NX_MEDIA_HEALTH_UNKNOWN: i64 = 0 |
| 68 | const NX_MEDIA_HEALTH_OK: i64 = 1 |
| 69 | const NX_MEDIA_HEALTH_DEGRADED: i64 = 2 // working but a measured axis is below threshold |
| 70 | const NX_MEDIA_HEALTH_FAILING: i64 = 3 // not working; recovery attempted by auto_heal_fn |
| 71 | const NX_MEDIA_HEALTH_DEAD: i64 = 4 // recovery exhausted; session must be closed |
| 72 | const NX_MEDIA_HEALTH_N: i64 = 5 |
| 76 | const NX_MEDIA_PEER_REASON_UNKNOWN: i64 = 0 |
| 77 | const NX_MEDIA_PEER_REASON_NORMAL: i64 = 1 |
| 78 | const NX_MEDIA_PEER_REASON_TIMEOUT: i64 = 2 |
| 79 | const NX_MEDIA_PEER_REASON_NETWORK: i64 = 3 |
| 80 | const NX_MEDIA_PEER_REASON_KICKED: i64 = 4 |
| 81 | const NX_MEDIA_PEER_REASON_SERVER_RESTART: i64 = 5 |
| 82 | const NX_MEDIA_PEER_REASON_N: i64 = 6 |
| 117 | const NX_MEDIA_SESSION_BYTES: i64 = 136 |
functions
| 128 | func _nx_session_id_slot() -> *i64 called by 1: _nx_next_session_id |
| 138 | func _nx_next_session_id() -> i64 |
| 149 | func nx_media_session_id(s: *nx_media_session) -> i64 |
| 153 | func nx_media_session_kind(s: *nx_media_session) -> i64 |
| 157 | func nx_media_session_state(s: *nx_media_session) -> i64 |
| 161 | func nx_media_session_peer_count(s: *nx_media_session) -> i64 |
| 165 | func nx_media_session_bandwidth_tier(s: *nx_media_session) -> i64 |
| 169 | func nx_media_session_hw_tier(s: *nx_media_session) -> i64 |
| 173 | func nx_media_session_room_id(s: *nx_media_session) -> i64 |
| 177 | func nx_media_session_self_peer_id(s: *nx_media_session) -> i64 |
| 181 | func nx_media_session_err_code(s: *nx_media_session) -> i64 |
| 188 | func nx_media_session_uptime_ms(s: *nx_media_session, now_ms: i64) -> i64 |
| 195 | func nx_media_session_touch(s: *nx_media_session, now_ms: i64) -> i64 called by 1: nx_chat_session_post |
| 210 | func nx_media_session_open(s: *nx_media_session) -> i64 |
| 214 | func nx_media_session_close(s: *nx_media_session) -> i64 |
| 218 | func nx_media_session_on_peer_join(s: *nx_media_session, called by 1: nx_call_on_remote_join |
| 224 | func nx_media_session_on_peer_leave(s: *nx_media_session, called by 1: nx_call_on_remote_leave |
| 232 | func nx_media_session_on_tier_change(s: *nx_media_session, |
| 239 | func nx_media_session_health_check(s: *nx_media_session) -> i64 called by 1: nx_call_health_check |
| 248 | func nx_media_session_default_open(s: *nx_media_session) -> i64 |
| 253 | func nx_media_session_default_close(s: *nx_media_session) -> i64 |
| 258 | func nx_media_session_default_on_peer_join(s: *nx_media_session, |
| 263 | func nx_media_session_default_on_peer_leave(s: *nx_media_session, |
| 268 | func nx_media_session_default_on_tier_change(s: *nx_media_session, |
| 274 | func nx_media_session_default_health_check(s: *nx_media_session) -> i64 |
| 287 | func nx_media_session_init(s: *nx_media_session, called by 3: nx_audio_session_newnx_chat_session_newnx_video_session_new calls 1: _nx_next_session_id |