Реализация логики нового протокола

luxystech7 years ago

Добрый день

Подскажите плиз, как правильно реализовать протокол, исходя из следующих требований. При получении данных отправить ответ от сервера (детальное описание в самом низу)?

реализую функцию внутри протокола, разбираю бинарные данные - с этим все ок, функция завершается

@Override
    protected Object decode(
            Channel channel, SocketAddress remoteAddress, Object msg) throws Exception 

return position;

Я так понимаю до этой строчки, нужно вызвать что-то вроде

ChannelBuffer response = ChannelBuffers.dynamicBuffer();
            response.writeBytes("<HEAD>*<S".getBytes(Charset.forName("UTF-8")));
            channel.write(response);

Вот логика

В ответ сервер должен прислать трекеру пакет такой же структуры и произвольным
содержимом. В случае если трекер получает корректный пакет с данной структурой в ответ на свою посылку пакет считается переданным успешно и трекер переходит к отправке нового пакета. В случае если ответного пакета не получено или получен некорректный пакет (не совпадает контрольная сумма или преамбула), исходный пакет считается отправленным с ошибкой и его отправка повторяется.

Anton Tananaev7 years ago

Смотрите примеры. Если у вас есть StringEncoder, то самостоятельно конвертировать ничего не надо и можно отправлять ответ просто так:

channel.write("<HEAD>*<S");
luxystech7 years ago

Антон, спасибо, нет бинарный протокол. Сделал так:

        position.setLatitude(latitude);
        position.setLongitude(longitude);

        ChannelBuffer response = ChannelBuffers.dynamicBuffer();
        ChannelBuffer bufNew = (ChannelBuffer) msg;
        response.writeBytes(bufNew, 0, 20);
        channel.write(response);

        return position;

Сегодня заберу устройство проверю, если заработает - поделюсь реализацией, правда нам только широта и долгота для проекта нужны, все параметры не парсили.