/* * ClinicalEventBus — 임상 이벤트 중앙 브로드캐스트 (SSOT). * (GUARDIAN-01 §3-3 · 2026-08-03 · cloud-mvp 6856a7b 이식) * * fire-and-forget · emit 실패해도 필수기능 영향 X. */ package com.medithings.vesiscan.telemetry import android.util.Log import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.asSharedFlow object ClinicalEventBus { private const val TAG = "ClinicalEventBus" private val _events = MutableSharedFlow( replay = 0, extraBufferCapacity = 64, onBufferOverflow = BufferOverflow.DROP_OLDEST, ) val events: SharedFlow = _events.asSharedFlow() fun emit(event: ClinicalEvent) { try { val delivered = _events.tryEmit(event) if (!delivered) { Log.w(TAG, "buffer full · dropped: ${event.javaClass.simpleName}") } } catch (e: Exception) { Log.w(TAG, "emit failed: ${e.message}") } } }