# 🚀 WebSocket SOS - Быстрый Старт

## ⚡ Самый быстрый способ протестировать

### 1️⃣ Запустить сервисы (если еще не запущены)
```bash
cd /home/trevor/dev/chat

# Терминал 1
python -m services.user_service.main

# Терминал 2
python -m services.emergency_service.main
```

### 2️⃣ Запустить тест (занимает ~20 секунд)
```bash
python test_ws_quick.py
```

### ✅ Результат
```
✅ Token obtained
✅ WebSocket connected
✅ Ping/pong working
✅ WebSocket connection test completed successfully!
```

---

## 📝 Тестовые учетные данные

| Параметр | Значение |
|----------|----------|
| Email | wstester@test.com |
| Password | WsTest1234! |
| User ID | 51 |

---

## 🔗 WebSocket URL

```
ws://localhost:8002/api/v1/emergency/ws/51?token={JWT_TOKEN}
```

### Как получить JWT_TOKEN
```bash
curl -X POST http://localhost:8001/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"wstester@test.com","password":"WsTest1234!"}'
```

Скопируйте значение `access_token` из ответа.

---

## 💬 Примеры сообщений

### Подключение (отправляется сервером)
```json
{
  "type": "connection_established",
  "message": "WebSocket connection established successfully",
  "user_id": 51,
  "timestamp": "2025-12-13T14:15:14.982894"
}
```

### Ping (отправьте клиент)
```json
{"type": "ping"}
```

### Pong (ответ сервера)
```json
{"type": "pong"}
```

### SOS Alert (отправляется сервером при создании оповещения)
```json
{
  "type": "emergency_alert",
  "alert_id": 123,
  "alert_type": "SOS",
  "latitude": 55.7558,
  "longitude": 37.6173,
  "address": "Location (55.7558, 37.6173)",
  "message": "Экстренная ситуация!",
  "created_at": "2025-12-13T14:15:20.123456",
  "distance_km": 0.5
}
```

---

## 🔧 Тестовые скрипты

### test_ws_quick.py - Базовый тест
```bash
python test_ws_quick.py
```
**Что проверяет:**
- ✅ Получение JWT токена
- ✅ Подключение WebSocket
- ✅ Ping/Pong
- ✅ Слушание сообщений (30 сек)

**Время:** ~30 секунд

---

### register_test_user.py - Создание пользователя
```bash
python register_test_user.py
```
**Что делает:**
- ✅ Регистрирует нового тестового пользователя
- ✅ Получает JWT токен
- ✅ Выводит готовый WebSocket URL

---

### test_ws_full.py - Полное тестирование
```bash
python test_ws_full.py
```
**Что проверяет:**
- ✅ Аутентификация
- ✅ WebSocket подключение
- ✅ Создание SOS оповещения
- ✅ Получение уведомления
- ✅ Множественные клиенты

**Время:** ~1-2 минуты

---

## 🎯 Статус работоспособности

| Функция | Статус |
|---------|--------|
| WebSocket подключение | ✅ OK |
| Аутентификация | ✅ OK |
| Ping/Pong | ✅ OK |
| Создание SOS | ✅ OK |
| Получение уведомлений | ✅ OK |
| Broadcast | ✅ OK |

---

## 📊 Посмотреть статистику

### Все активные соединения
```bash
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
     http://localhost:8002/api/v1/websocket/stats
```

### Детальная информация
```bash
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
     http://localhost:8002/api/v1/websocket/connections
```

### Пинг всех подключений
```bash
curl -X POST -H "Authorization: Bearer YOUR_JWT_TOKEN" \
     http://localhost:8002/api/v1/websocket/ping
```

---

## 🐛 Решение проблем

### Проблема: WebSocket не подключается
```
Решение:
1. Проверьте JWT токен (не истек ли)
2. Убедитесь в правильности user_id
3. Проверьте что Emergency Service запущена на 8002
```

### Проблема: Плохое соединение
```
Решение:
1. Проверьте интернет (локальное тестирование)
2. Посмотрите логи сервиса
3. Попробуйте переподключиться
```

### Проблема: Нет уведомлений о SOS
```
Решение:
1. Убедитесь что Location Service запущена
2. Проверьте что пользователи находятся в радиусе 1-2 км
3. Убедитесь что пользователи подключены к WebSocket
```

---

## 📚 Дополнительная информация

### Подробные отчеты:
- [WS_SOS_FINAL_REPORT.md](./docs/WS_SOS_FINAL_REPORT.md) - Полный технический отчет
- [WS_SOS_TEST_REPORT.md](./docs/WS_SOS_TEST_REPORT.md) - Результаты тестирования

### Исходный код:
- `/home/trevor/dev/chat/services/emergency_service/main.py` - WebSocket сервис
- Класс `WebSocketManager` (строка ~96)
- Endpoint `websocket_endpoint()` (строка ~393)

---

**Последнее обновление:** 13 декабря 2025  
**Статус:** ✅ Все работает!
