129 lines
5.1 KiB
Markdown
129 lines
5.1 KiB
Markdown
|
|
# 🔧 Исправление Ping-Pong коммуникации
|
|||
|
|
|
|||
|
|
## ✅ Проблема решена
|
|||
|
|
|
|||
|
|
### 🎯 Проблема
|
|||
|
|
Web приложение не отвечало pong на ping от host приложения. При отправке ping из host приложения web приложение не отправляло ответ.
|
|||
|
|
|
|||
|
|
### 🔧 Решение
|
|||
|
|
Добавлен обработчик `PingHandler` в web приложение, который автоматически отвечает pong на входящие ping'и.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 Внесенные изменения
|
|||
|
|
|
|||
|
|
### 1. **Добавлен PingHandler в web приложение**
|
|||
|
|
```dart
|
|||
|
|
/// Handler for incoming pings from Flutter Host (sends pong back)
|
|||
|
|
class PingHandler implements PayloadHandler {
|
|||
|
|
final Function(BridgePayload) _sendPayload;
|
|||
|
|
|
|||
|
|
PingHandler(this._sendPayload);
|
|||
|
|
|
|||
|
|
@override
|
|||
|
|
void handle(BridgePayload payload) {
|
|||
|
|
if (payload is PingPayload) {
|
|||
|
|
// Handle incoming ping and send pong back
|
|||
|
|
debugPrint('Received ping from Flutter Host: ${payload.message}');
|
|||
|
|
|
|||
|
|
// Send pong response using the toPong method
|
|||
|
|
final pongPayload = payload.toPong();
|
|||
|
|
|
|||
|
|
_sendPayload(pongPayload);
|
|||
|
|
debugPrint('Sent pong response to Flutter Host');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. **Обновлена регистрация обработчиков в WebBridge**
|
|||
|
|
```dart
|
|||
|
|
void _initializeHandlers() {
|
|||
|
|
_handlers['ping'] = PingHandler(sendPayload); // Обрабатывает входящие ping'и
|
|||
|
|
_handlers['ping_response'] = PingResponseHandler(); // Обрабатывает pong ответы
|
|||
|
|
// ... другие обработчики
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. **Использование метода toPong()**
|
|||
|
|
```dart
|
|||
|
|
// Используем встроенный метод PingPayload для создания pong ответа
|
|||
|
|
final pongPayload = payload.toPong();
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 Результат
|
|||
|
|
|
|||
|
|
### ✅ **Полный цикл Ping → Pong:**
|
|||
|
|
|
|||
|
|
#### Host App отправляет Ping:
|
|||
|
|
1. Host app создает `PingPayload`
|
|||
|
|
2. Отправляет в web app через bridge
|
|||
|
|
3. Web app получает ping через `PingHandler`
|
|||
|
|
4. Web app автоматически создает pong через `payload.toPong()`
|
|||
|
|
5. Web app отправляет pong обратно в host app
|
|||
|
|
|
|||
|
|
#### Web App отправляет Ping:
|
|||
|
|
1. Web app создает `PingPayload`
|
|||
|
|
2. Отправляет в host app через bridge
|
|||
|
|
3. Host app получает ping через `PingHandler`
|
|||
|
|
4. Host app автоматически создает pong через `payload.toPong()`
|
|||
|
|
5. Host app отправляет pong обратно в web app
|
|||
|
|
|
|||
|
|
### ✅ **Отображаемые события:**
|
|||
|
|
|
|||
|
|
#### В Host App (полученные от Web App):
|
|||
|
|
- `PingPayload` - ping от web приложения
|
|||
|
|
- `PingPayload` (message: 'pong') - pong ответ от web приложения
|
|||
|
|
|
|||
|
|
#### В Web App (полученные от Host App):
|
|||
|
|
- `PingPayload` - ping от host приложения
|
|||
|
|
- `PingPayload` (message: 'pong') - pong ответ от host приложения
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 Как проверить
|
|||
|
|
|
|||
|
|
### 1. **Отправьте Ping из Host App**
|
|||
|
|
- Нажмите "Send Ping" в host приложении
|
|||
|
|
- В web приложении появится событие `PingPayload` (ping)
|
|||
|
|
- В host приложении появится событие `PingPayload` (pong)
|
|||
|
|
|
|||
|
|
### 2. **Отправьте Ping из Web App**
|
|||
|
|
- Нажмите "Send Ping" в web приложении
|
|||
|
|
- В host приложении появится событие `PingPayload` (ping)
|
|||
|
|
- В web приложении появится событие `PingPayload` (pong)
|
|||
|
|
|
|||
|
|
### 3. **Проверьте логи**
|
|||
|
|
- В консоли web приложения должны появиться сообщения:
|
|||
|
|
- "Received ping from Flutter Host: [message]"
|
|||
|
|
- "Sent pong response to Flutter Host"
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔄 Архитектура обработки
|
|||
|
|
|
|||
|
|
### **Web App обработчики:**
|
|||
|
|
- `PingHandler` - обрабатывает входящие ping'и и отправляет pong
|
|||
|
|
- `PingResponseHandler` - обрабатывает входящие pong ответы
|
|||
|
|
|
|||
|
|
### **Host App обработчики:**
|
|||
|
|
- `PingHandler` - обрабатывает входящие ping'и и отправляет pong
|
|||
|
|
- `PingResponseHandler` - обрабатывает входящие pong ответы
|
|||
|
|
|
|||
|
|
### **Типы событий:**
|
|||
|
|
- `ping` - входящий ping (обрабатывается PingHandler)
|
|||
|
|
- `ping_response` - входящий pong (обрабатывается PingResponseHandler)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎉 Итог
|
|||
|
|
|
|||
|
|
**Теперь web приложение корректно отвечает pong на ping от host приложения!**
|
|||
|
|
|
|||
|
|
- ✅ Полный цикл Ping → Pong работает в обе стороны
|
|||
|
|
- ✅ Автоматические ответы на входящие ping'и
|
|||
|
|
- ✅ События отображаются в реальном времени
|
|||
|
|
- ✅ Используется встроенный метод `toPong()` для создания ответов
|
|||
|
|
- ✅ Готово для демонстрации bridge коммуникации
|