/** * Protocol message types for client-server communication */ import type { DeviceId, DeviceInfo } from '../types/common.js'; /** * Protocol message types */ export enum MessageType { // Device management DEVICE_BIND = 'device_bind', DEVICE_UNBIND = 'device_unbind', // Status queries DEVICE_STATUS_QUERY = 'device_status_query', DEVICE_STATUS_RESPONSE = 'device_status_response', CONNECTION_STATUS_QUERY = 'connection_status_query', CONNECTION_STATUS_RESPONSE = 'connection_status_response', // Device discovery DEVICE_LIST_REQUEST = 'device_list_request', DEVICE_LIST_RESPONSE = 'device_list_response', // Connection management HEARTBEAT = 'heartbeat', ERROR = 'error', } /** * Base message structure */ export interface BaseMessage { type: MessageType; timestamp: number; } /** * Server tells client to bind a device */ export interface DeviceBindMessage extends BaseMessage { type: MessageType.DEVICE_BIND; device: DeviceInfo; serverAddress: string; } /** * Server tells client to unbind a device */ export interface DeviceUnbindMessage extends BaseMessage { type: MessageType.DEVICE_UNBIND; device: DeviceId; } /** * Client queries server about specific device status */ export interface DeviceStatusQueryMessage extends BaseMessage { type: MessageType.DEVICE_STATUS_QUERY; device: DeviceId; } /** * Server responds with device status */ export interface DeviceStatusResponseMessage extends BaseMessage { type: MessageType.DEVICE_STATUS_RESPONSE; device: DeviceId; available: boolean; info?: DeviceInfo; } /** * Client requests list of available devices */ export interface ConnectionStatusQueryMessage extends BaseMessage { type: MessageType.CONNECTION_STATUS_QUERY; clientId: string; } /** * Server responds with list of devices client can access */ export interface ConnectionStatusResponseMessage extends BaseMessage { type: MessageType.CONNECTION_STATUS_RESPONSE; devices: DeviceInfo[]; } /** * Device list request (for discovery) */ export interface DeviceListRequestMessage extends BaseMessage { type: MessageType.DEVICE_LIST_REQUEST; clientId: string; } /** * Device list response (for discovery) */ export interface DeviceListResponseMessage extends BaseMessage { type: MessageType.DEVICE_LIST_RESPONSE; devices: DeviceInfo[]; } /** * Heartbeat message */ export interface HeartbeatMessage extends BaseMessage { type: MessageType.HEARTBEAT; } /** * Error message */ export interface ErrorMessage extends BaseMessage { type: MessageType.ERROR; error: string; details?: string; } /** * Union type of all possible messages */ export type Message = | DeviceBindMessage | DeviceUnbindMessage | DeviceStatusQueryMessage | DeviceStatusResponseMessage | ConnectionStatusQueryMessage | ConnectionStatusResponseMessage | DeviceListRequestMessage | DeviceListResponseMessage | HeartbeatMessage | ErrorMessage;