Move toju-app into own its folder
This commit is contained in:
105
toju-app/src/app/infrastructure/realtime/realtime.constants.ts
Normal file
105
toju-app/src/app/infrastructure/realtime/realtime.constants.ts
Normal file
@@ -0,0 +1,105 @@
|
||||
import type { LatencyProfile } from '../../shared-kernel';
|
||||
|
||||
/**
|
||||
* All magic numbers and strings used across the WebRTC subsystem.
|
||||
* Centralised here so nothing is hard-coded inline.
|
||||
*/
|
||||
|
||||
export const ICE_SERVERS: RTCIceServer[] = [
|
||||
{ urls: 'stun:stun.l.google.com:19302' },
|
||||
{ urls: 'stun:stun1.l.google.com:19302' },
|
||||
{ urls: 'stun:stun2.l.google.com:19302' },
|
||||
{ urls: 'stun:stun3.l.google.com:19302' },
|
||||
{ urls: 'stun:stun4.l.google.com:19302' }
|
||||
];
|
||||
|
||||
/** Base delay (ms) for exponential backoff on signaling reconnect */
|
||||
export const SIGNALING_RECONNECT_BASE_DELAY_MS = 1_000;
|
||||
/** Maximum delay (ms) between signaling reconnect attempts */
|
||||
export const SIGNALING_RECONNECT_MAX_DELAY_MS = 30_000;
|
||||
/** Default timeout (ms) for `ensureSignalingConnected` */
|
||||
export const SIGNALING_CONNECT_TIMEOUT_MS = 5_000;
|
||||
|
||||
/** Maximum P2P reconnect attempts before giving up */
|
||||
export const PEER_RECONNECT_MAX_ATTEMPTS = 12;
|
||||
/** Interval (ms) between P2P reconnect attempts */
|
||||
export const PEER_RECONNECT_INTERVAL_MS = 5_000;
|
||||
/** How long to wait before treating a transient disconnect as fatal */
|
||||
export const PEER_DISCONNECT_GRACE_MS = 10_000;
|
||||
|
||||
/** Interval (ms) for broadcasting state heartbeats */
|
||||
export const STATE_HEARTBEAT_INTERVAL_MS = 5_000;
|
||||
/** Interval (ms) for broadcasting voice presence */
|
||||
export const VOICE_HEARTBEAT_INTERVAL_MS = 5_000;
|
||||
|
||||
/** Data channel name used for P2P chat */
|
||||
export const DATA_CHANNEL_LABEL = 'chat';
|
||||
/** High-water mark (bytes) - pause sending when buffered amount exceeds this */
|
||||
export const DATA_CHANNEL_HIGH_WATER_BYTES = 4 * 1024 * 1024; // 4 MB
|
||||
/** Low-water mark (bytes) - resume sending once buffered amount drops below this */
|
||||
export const DATA_CHANNEL_LOW_WATER_BYTES = 1 * 1024 * 1024; // 1 MB
|
||||
|
||||
export const SCREEN_SHARE_IDEAL_WIDTH = 1920;
|
||||
export const SCREEN_SHARE_IDEAL_HEIGHT = 1080;
|
||||
export const SCREEN_SHARE_IDEAL_FRAME_RATE = 30;
|
||||
/** Electron source name to prefer for whole-screen capture */
|
||||
export { ELECTRON_ENTIRE_SCREEN_SOURCE_NAME } from '../../shared-kernel';
|
||||
|
||||
/** Minimum audio bitrate (bps) */
|
||||
export const AUDIO_BITRATE_MIN_BPS = 16_000;
|
||||
/** Maximum audio bitrate (bps) */
|
||||
export const AUDIO_BITRATE_MAX_BPS = 256_000;
|
||||
/** Multiplier to convert kbps → bps */
|
||||
export const KBPS_TO_BPS = 1_000;
|
||||
/** Pre-defined latency-to-bitrate mappings (bps) */
|
||||
export const LATENCY_PROFILE_BITRATES: Record<LatencyProfile, number> = {
|
||||
low: 64_000,
|
||||
balanced: 96_000,
|
||||
high: 128_000
|
||||
};
|
||||
|
||||
export type { LatencyProfile } from '../../shared-kernel';
|
||||
|
||||
export const TRANSCEIVER_SEND_RECV: RTCRtpTransceiverDirection = 'sendrecv';
|
||||
export const TRANSCEIVER_RECV_ONLY: RTCRtpTransceiverDirection = 'recvonly';
|
||||
export const TRANSCEIVER_INACTIVE: RTCRtpTransceiverDirection = 'inactive';
|
||||
|
||||
export const CONNECTION_STATE_CONNECTED = 'connected';
|
||||
export const CONNECTION_STATE_DISCONNECTED = 'disconnected';
|
||||
export const CONNECTION_STATE_FAILED = 'failed';
|
||||
export const CONNECTION_STATE_CLOSED = 'closed';
|
||||
export const DATA_CHANNEL_STATE_OPEN = 'open';
|
||||
|
||||
export const TRACK_KIND_AUDIO = 'audio';
|
||||
export const TRACK_KIND_VIDEO = 'video';
|
||||
|
||||
export const SIGNALING_TYPE_IDENTIFY = 'identify';
|
||||
export const SIGNALING_TYPE_JOIN_SERVER = 'join_server';
|
||||
export const SIGNALING_TYPE_VIEW_SERVER = 'view_server';
|
||||
export const SIGNALING_TYPE_LEAVE_SERVER = 'leave_server';
|
||||
export const SIGNALING_TYPE_OFFER = 'offer';
|
||||
export const SIGNALING_TYPE_ANSWER = 'answer';
|
||||
export const SIGNALING_TYPE_ICE_CANDIDATE = 'ice_candidate';
|
||||
export const SIGNALING_TYPE_CONNECTED = 'connected';
|
||||
export const SIGNALING_TYPE_SERVER_USERS = 'server_users';
|
||||
export const SIGNALING_TYPE_USER_JOINED = 'user_joined';
|
||||
export const SIGNALING_TYPE_USER_LEFT = 'user_left';
|
||||
|
||||
export const P2P_TYPE_STATE_REQUEST = 'state-request';
|
||||
export const P2P_TYPE_VOICE_STATE_REQUEST = 'voice-state-request';
|
||||
export const P2P_TYPE_VOICE_STATE = 'voice-state';
|
||||
export const P2P_TYPE_SCREEN_STATE = 'screen-state';
|
||||
export const P2P_TYPE_SCREEN_SHARE_REQUEST = 'screen-share-request';
|
||||
export const P2P_TYPE_SCREEN_SHARE_STOP = 'screen-share-stop';
|
||||
export const P2P_TYPE_PING = 'ping';
|
||||
export const P2P_TYPE_PONG = 'pong';
|
||||
|
||||
/** Interval (ms) between peer latency pings */
|
||||
export const PEER_PING_INTERVAL_MS = 5_000;
|
||||
|
||||
/** Default display name fallback */
|
||||
export const DEFAULT_DISPLAY_NAME = 'User';
|
||||
/** Minimum volume (normalised 0-1) */
|
||||
export const VOLUME_MIN = 0;
|
||||
/** Maximum volume (normalised 0-1) */
|
||||
export const VOLUME_MAX = 1;
|
||||
Reference in New Issue
Block a user