71 lines
2.6 KiB
Markdown
71 lines
2.6 KiB
Markdown
# GodEye Signal Center - AI Coding Instructions
|
|
|
|
## System Architecture
|
|
|
|
This is a **WebRTC-based remote camera access system** with three core components:
|
|
- **Backend Server** (Node.js + Socket.IO): Signaling center at `/backend/src/`
|
|
- **Android Client** (Kotlin): Camera provider at `/android-client/src/`
|
|
- **Web Demo** (HTML/JS): Testing interface at `/backend/public/`
|
|
|
|
**Key Data Flow**: `Android <--WebSocket--> Backend <--WebSocket--> Operator`
|
|
|
|
## Critical Components
|
|
|
|
### SessionManager (`/backend/src/managers/SessionManager.js`)
|
|
- Manages camera access sessions with UUID tracking
|
|
- Maps: `deviceId -> sessions[]` and `operatorId -> sessions[]`
|
|
- Session lifecycle: create → active → ended with detailed state tracking
|
|
|
|
### DeviceManager (`/backend/src/managers/DeviceManager.js`)
|
|
- Maintains registry of Android devices and desktop operators
|
|
- Device capabilities: `["back", "front", "wide", "telephoto"]` camera types
|
|
- Real-time connection status with heartbeat monitoring
|
|
|
|
### WebSocket Protocol (`/backend/src/server.js`)
|
|
**Android Registration**: `register:android` → `register:success`
|
|
**Camera Requests**: `camera:request` → `camera:response` → WebRTC signaling
|
|
**WebRTC Flow**: `webrtc:offer` ↔ `webrtc:answer` ↔ `webrtc:ice-candidate`
|
|
|
|
## Developer Workflows
|
|
|
|
### Backend Development
|
|
```bash
|
|
cd backend/
|
|
node src/server.js # Runs on port 3001
|
|
# Web demo available at http://localhost:3001
|
|
```
|
|
|
|
### Testing Complete System
|
|
1. Start backend server
|
|
2. Open web demo (simulates Android + Operator)
|
|
3. Test full cycle: device registration → camera request → WebRTC stream
|
|
|
|
## Project Conventions
|
|
|
|
### Error Handling Pattern
|
|
All socket events have corresponding error events: `camera:error`, `register:error`, `webrtc:error`
|
|
|
|
### ID Generation
|
|
- `deviceId`: Android ANDROID_ID or UUID
|
|
- `sessionId`: UUID v4 for each camera session
|
|
- `operatorId`: UUID v4 for desktop clients
|
|
|
|
### Camera Type Constants
|
|
Standard types: `"back"`, `"front"`, `"wide"`, `"telephoto"`
|
|
|
|
## Integration Points
|
|
|
|
### WebSocket Events (Socket.IO)
|
|
- Android: `register:android`, `camera:response`, `camera:disconnected`
|
|
- Operators: `register:operator`, `camera:request`, `camera:switch`
|
|
- WebRTC: `webrtc:offer/answer/ice-candidate` bidirectional
|
|
|
|
### REST API (`/api/`)
|
|
- `/api/status` - System health and metrics
|
|
- `/api/operators/*` - Operator management with auth
|
|
- `/api/admin/*` - Administrative functions
|
|
|
|
**Architecture Decision**: WebSocket for real-time, REST for CRUD operations
|
|
|
|
When working on this codebase, prioritize understanding the session lifecycle and WebSocket protocol flow before making changes.
|