Dr. Friedrich
Просто индексы передавай разные по твоему массиву, не?
Vasily
Ну вот ща так и делаю
Vasily
Но
Vasily
Выглядит это кривовато
Dr. Friedrich
А где аллокации, от которых ты хочешь избавиться?
Dr. Friedrich
Vasily
Просто мне по-любому массив переворачивать
Dr. Friedrich
А я бы все инты прочитал как есть, а потом на них цикол натравил IPAddress.HostToNetwork
Dr. Friedrich
То на то и выйдет!
Vasily
На чтении инта/лонга
Dr. Friedrich
Dr. Friedrich
Смотри чо
Dr. Friedrich
Два подряд идущих шорта в LE это одно
Vasily
Dr. Friedrich
А два шорта в BE, которые потом перевернули в LE — это другое
Vasily
Вводную часть можно было и опустить, я в теме
Dr. Friedrich
Кое-на-каких системах они no-op, ясное дело.
Dr. Friedrich
В жаве у байтового буфера более удобный апи с этой точки зрения, кстати.
Vasily
Ну вот у меня с той стороны скальный сервак
Roman
Dr. Friedrich
Выглядит как кандидат в пайпы
На самом деле да. В каком они состоянии? Я знаю про превосходный апи, но какие у него есть реализации?
Dr. Friedrich
Vasily
Из пайпов поюзал Pipelines.Sockets.Unofficial
Vasily
Ну и сходу не нашел, как мне на пайпах наговнякать условия разделения сообщений
Roman
Vasily
Т.е. есть пайп, куда валится всякое из канала
Vasily
А дальше из него надо читать только готовые сообщения, т.е. длина+блоб
Vasily
Ну у меня пайпами уже из канала читаются куски данных
Vasily
НО
Vasily
Пайпы не помогают их склеить
Roman
В PipeReader поидее всё это должно происходить
Roman
Ну склейка
Vasily
Предлагаешь своего написать?
Roman
Roman
Обёртку сделать поверх
Vasily
Ну я так и сделал
Roman
Т.е. они скипают обработку буфера до тех пор, пока /n не встретят
Roman
и набивают буфер
Roman
без лишних аллокаций
Vasily
Ну у меня к сожалению, не /n
Vasily
А чуть сложнее логика
Roman
Ну всё равно как-то сообщения же разделяются
Vasily
Длина+блоб
Vasily
И это может идти сплошным потоком
Roman
Например, получили первый месседж, прочитали длину и вычитываем буфер на длину, которая в начале пришла.
Roman
Потом этот буфер отдаём на обработку
Roman
И начинаем читать новый меседж
Vasily
И как же нам вычитать буфер на нужную длину?
Vasily
С учетом, что может еще придти кусок от следующего сообщения
Roman
Vasily
tcp
Vasily
Но сообщения могут быть длинными
Roman
А ты просто читаешь первые сколько то байт, чтобы из первого сообщения длину запарсить.
Vasily
Ye lf
Roman
А потом собираешь из сегментов буфер свой
Vasily
Угу
Vasily
Только вопрос
Roman
Пока длина не наберётся нужная
Vasily
Вот есть набор сегментов
Roman
Как набрали, всё что дальше - считается новым сообщением
Vasily
Что делать, когда сегмент надо разбить?
Roman
Roman
там же есть в примере всё
Ayrat
я бы считывал фреймы в ArrayPool и набивал бы на стеке массив референсов на эти массивы, потом как встречу разделитель сообщения, склеивал бы массивы в месаджи, освобождал кусочки массивов и начинал заново
Vasily
Я просто смотрю на этот ебанутый ReadOnlySequence
Vasily
И нихуя не понимаю
Vasily
Наверное, я старый
Roman
Логично что он ридонли
Roman
Вернее мы у него берём этот Memory<byte>, пишем в него что то, а потом говорим сколько именно данных мы туда записали
Vasily
Допустим