169 похожих чатов

Он решает проблему с повторным созданием парсера на каждое сообщение.

Разве нет?

11 ответов

14 просмотров

Вообще он совсем не об этом, и да, я не представляю, как он может помочь решить эту проблему.

Kirill-Gamazkov Автор вопроса
Vladimir Petraković
Вообще он совсем не об этом, и да, я не представля...

Ну как-то вот так: abstract class BaseMessageType {} class SomeType: BaseMessageType() {} class OtherType: BaseMessageType() {} interface UserCallbacks { fun onSomeMessage(msg: SomeType) fun onOtherMessage(msg: OtherType) } class LibraryApi(val callbacks: UserCallbacks) { fun parse(msg: Array<Byte>) { if (msg.size % 2 == 1) callbacks.onSomeMessage(SomeType()) else callbacks.onOtherMessage(OtherType()) } } fun Flow<Array<Byte>>.parse(): Flow<BaseMessageType> = callbackFlow { val callbacks = object: UserCallbacks { override fun onSomeMessage(msg: SomeType) { offer(msg) } override fun onOtherMessage(msg: OtherType) { offer(msg) } } val parser = LibraryApi(callbacks) collect { bytes -> parser.parse(bytes) } }

Kirill Gamazkov
Ну как-то вот так: abstract class BaseMessageType ...

Это немного отличается от изначального интерфейса suspend fun parse(bytes): Message

Kirill-Gamazkov Автор вопроса
Vladimir Petraković
Это немного отличается от изначального интерфейса ...

Ну, я запостил задачу-минимум, а мне подсказали сразу решение задачи-максимум

Vladimir Petraković
Значит, @noraltavir хорошо прокачал телепатию))

ну так. Single-fire callback - это вообще редкая штука.

Alexander Nozik
ну так. Single-fire callback - это вообще редкая ш...

Да не такая уж редкая, куча таких асинхронных API с методами вида void doSomething(args, callback)

Kirill-Gamazkov Автор вопроса
Alexander Nozik
ну так. Single-fire callback - это вообще редкая ш...

Ну, совсем идеально было бы всё-таки flow-версию построить через single, хотя бы для юнит-тестов каких-нибудь могло пригодиться потом. В конце концов, предметка не принуждает оперировать последовательностями вместо отдельных сообщений. Это уже ограничения имплементации диктуют

Похожие вопросы

Обсуждают сегодня

Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
48
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
а проверьте, собирается ли у кого сейчас транк лазаря через делюкс? у меня вот: fpcupdeluxe: info: Lazarus Native Installer (BuildModuleCustom: UserIDE): LazBuild: building Us...
Iluha Companets
20
This is a big issue. Just by being a citizen of a country, you are denied to contribute to Open Source software: https://youtu.be/L5Ec5jrpLVk?si=1iIuHnMPbCB4anV-
Sharuzzaman Ahmat Raslan
72
Мне тут приспичило встроить в программу форматировние текста SQL, расставить переносы строк и отступы так, чтобы лучше читалось. Я что-то свое изобразил, оно после ключевых сл...
Sergey Bodrov
11
добрый день. возможно ли изменить цвет окон лазаруса? Как?
Budemposmotret
35
Господа, а кто-нибудь сталкивался с размещением на TTabControl/TTabSheet множества контролов (> 100) с последующими External: Access violation? Вот буквально на ровном месте. ...
Dmitry
29
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Добрый день. Опять снова хочу обратиться к вам за помощью. После создания проэкта stack new, lazy.nvim + nvim-lspconfig/haskell-tools + hlint, ormolu из mason + hls из ghcup ...
Nannk
8
Does anyone have some zeroday's left?
Wito!d ♥️🩷
44
Карта сайта