Будни разработчика
14.7K subscribers
1.17K photos
334 videos
7 files
2.01K links
Блог Lead JS-разработчика из Хельсинки
Автор: @bekharsky

По рекламе: https://telega.in/channels/htmlshit/card?r=GLOiHluU или https://t.me/it_adv

Чат: https://t.me/htmlshitchat

№5001017849, https://www.gosuslugi.ru/snet/679b74f8dad2d930d2eaa978
Download Telegram
#заметка дня

Продолжаем эпопею про написание пульта для телевизора на Flutter.

Мы с вами уже умеем верстать виджеты, находить телевизор широковещательным сообщением, выбирать его, открывать и закрывать на нём приложения и знаем, как искать их идентификаторы.

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

А делается это довольно просто.
1. Постучались на WebSocket API, передав название приложения. Почему-то в моём случае стучаться пришлось на secure-вариант (ws vs wss, это как http vs https), разрешив использование самоподписанных сертификатов (потом расскажу, что не так).
2. Телевизор спросит разрешение на удалённое управление. И вот тут придётся подтверждать с пульта или джойстика на телевизоре, других вариантов нет. В ответ будет прислан токен. Чтобы больше не спрашивал — все дальнейшие запросы должны содержать в себе идентификатор приложения и токен, собственно. Как параметры запроса: ?name=xxx&token=yyy.
3. Формируем команду, на которую, естественно, опять нет никакой документации. Но когда это нам мешало? Копаемся в issues легендарной (в узком кругу) библиотеки Samsungctl, находим нужный формат.
4. Отправляем.
5. ...
6. Пищим от восторга.

На этом месте будет небольшая ода Джаваскрипту: нет на свете языка, который бы позволил быстрее настряпать всякие тестовые куски кода, вне зависимости от того, нужен вам UI, или нет. Ну, может, Python что-то способен противопоставить. Тяп-ляп и готов код, чтобы быстро проверить теорию или соответствие стандарта вашему телевизору: https://gist.github.com/bekharsky/80fce4263304eedcec7a46045b1a0ebd

Представьте, как было бы обидно, написать это всё на Dart и обнаружить, что мой телевизор старее, чем нужно. Впрочем, там не сильно сложнее, сделаю сегодня.

И посоветуйте, кто чем вебсокеты отлаживает. Что-нибудь вроде Postman, но не Postman.

К слову, если у кого-нибудь есть телевизоры Samsung и кому не лень, проверьте код выше (он просто выключает звук) и напишите модель в комментарии, пожалуйста (как узнать модель — смотрите ссылку в первых словах поста, там про API телевизора). Это мне потом очень поможет :)

Удачи в ваших пет-проектах, котаны.

P. S. если кому интересно, вот тут человек на Go автоматизирует браузер телевизора, чтобы дашборды Grafana запустить. Целый кладезь команд и подсказок. Красивое: https://gist.github.com/freman/8d98742de09d476c4d3d9e5d55f9db63

#flutter #dart #websockets
11👍2
#инструмент дня

partysocket — это миниатюрная (всего ~2 КБ!) обёртка над WebSocket, которая делает их использование гораздо приятнее.

📦 Что это такое?

По сути, это просто WebSocket-клиент, но с «магией»: автоматические переподключения, буферизация сообщений при обрыве, устойчивость к сбоям — и всё это без лишнего кода.

💬 Как выразился автор:
"A tiny abstraction (like, 2kb) on top of websockets that adds reconnections/buffering/resilience + optional React hooks. Doesn’t even need PartyKit or Cloudflare!"


🚀 Особенности:
- Поддержка в браузере и Node.js
- Нативное API (`onmessage`, send, onopen, и т.д.)
- Работает с любым WebSocket-сервером (не только с PartyKit)
- Встроенные переподключения и буферизация
- Есть React-хуки
- Весит всего около 2 КБ

🛠 Пример:

import { PartySocket } from "partysocket";

const socket = new PartySocket({
host: "example.com",
room: "main-room", // опционально — удобно для namespace'ов
});

socket.addEventListener("message", (evt) => {
console.log("📨", evt.data);
});

socket.send("Hello, world!");


📈 Уже более 100K скачиваний в неделю.

🔗 Подробнее и установка:
https://www.npmjs.com/package/partysocket

Буду пробовать в следующем #проект-е дня.

#websockets
👍306🫡2