StreamPeer
Базовый API байтового потока и типизированного бинарного ввода-вывода.
StreamPeer — абстрактная основа. Для данных в памяти используйте StreamPeerBuffer, для сети — подходящий доступный транспорт. Поток не создаёт границы сообщений автоматически: согласуйте формат, длины, порядок байтов и обработку частичных операций.
GetData/GetPartialData возвращают пару Error и байтов; PutPartialData — Error и число отправленных байтов. Числовые getter/setter и строковые сокращения не дают такого отдельного статуса. Не считайте числовое значение доказательством успешного чтения; неполное поле нужно сначала собрать и проверить.
BigEndian меняет последующие числовые операции, не содержимое готового массива. UTF-8 длины задаются байтами, а не C# string.Length. Длины внешних данных ограничивайте своим протоколом.
Полный пример проверяемого сообщения приведён в StreamPeerBuffer.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Свойства1
BigEndianСвойство
public bool BigEndian { get; set; }Порядок байтов последующих числовых операций и префиксов длин. false по умолчанию — little-endian; true — big-endian. Изменение не переставляет ранее записанные байты и не меняет порядок raw-массива PutData.
Методы37
Get16short
public short Get16();Читает 2 байта в формате signed 16-bit. При ширине больше байта учитывает BigEndian. Не возвращает Error: заранее обеспечьте полное поле; после недостаточного/неудачного чтения числовой результат нельзя считать достоверным.
shortПрочитанное значение C# типа short. Это не пара с Error; значение не проверяет успешность чтения.
Get32int
public int Get32();Читает 4 байта в формате signed 32-bit. При ширине больше байта учитывает BigEndian. Не возвращает Error: заранее обеспечьте полное поле; после недостаточного/неудачного чтения числовой результат нельзя считать достоверным.
intПрочитанное значение C# типа int. Это не пара с Error; значение не проверяет успешность чтения.
Get64long
public long Get64();Читает 8 байт в формате signed 64-bit. При ширине больше байта учитывает BigEndian. Не возвращает Error: заранее обеспечьте полное поле; после недостаточного/неудачного чтения числовой результат нельзя считать достоверным.
longПрочитанное значение C# типа long. Это не пара с Error; значение не проверяет успешность чтения.
Get8sbyte
public sbyte Get8();Читает 1 байт в формате signed 8-bit. При ширине больше байта учитывает BigEndian. Не возвращает Error: заранее обеспечьте полное поле; после недостаточного/неудачного чтения числовой результат нельзя считать достоверным.
sbyteПрочитанное значение C# типа sbyte. Это не пара с Error; значение не проверяет успешность чтения.
GetAvailableBytesint
public int GetAvailableBytes();Возвращает число доступных для чтения байтов по реализации потока. Это не размер следующего сообщения и не гарантия наличия полного поля/пакета. Для StreamPeerBuffer это GetSize()-GetPosition().
intДоступное число байтов. У StreamPeerBuffer после Resize с курсором за концом возможно отрицательное значение — сначала исправьте позицию.
GetDataReckfell.Collections.Array
public Reckfell.Collections.Array GetData(int bytes);Пытается прочитать заданное число байтов и возвращает пару [Error, byte[]]. Проверяйте Error до использования данных. На сокетном потоке операция может ожидать недостающие байты; в StreamPeerBuffer короткое чтение возвращает ошибку, но уже сдвигает курсор на доступную часть.
| Имя | Тип | По умолчанию |
|---|---|---|
bytes | int | — |
bytesНеотрицательное число байтов для чтения. До вызова проверьте верхний лимит своего протокола.
Reckfell.Collections.ArrayArray из двух Variant: [код Error, packed-массив байтов]. В C# извлеките byte[] после проверки кода. При ошибке содержимое не следует считать полным или безопасно инициализированным.
GetDoubledouble
public double GetDouble();Читает 8 байт в формате binary64. При ширине больше байта учитывает BigEndian. Не возвращает Error: заранее обеспечьте полное поле; после недостаточного/неудачного чтения числовой результат нельзя считать достоверным.
doubleПрочитанное значение C# типа double. Это не пара с Error; значение не проверяет успешность чтения.
GetFloatfloat
public float GetFloat();Читает 4 байта в формате binary32. При ширине больше байта учитывает BigEndian. Не возвращает Error: заранее обеспечьте полное поле; после недостаточного/неудачного чтения числовой результат нельзя считать достоверным.
floatПрочитанное значение C# типа float. Это не пара с Error; значение не проверяет успешность чтения.
GetHalffloat
public float GetHalf();Читает 2 байта в формате binary16. При ширине больше байта учитывает BigEndian. Не возвращает Error: заранее обеспечьте полное поле; после недостаточного/неудачного чтения числовой результат нельзя считать достоверным. Формат binary16 имеет меньшую точность/диапазон, чем C# float.
floatПрочитанное значение C# типа float. Это не пара с Error; значение не проверяет успешность чтения.
GetPartialDataReckfell.Collections.Array
public Reckfell.Collections.Array GetPartialData(int bytes);Читает до указанного числа байтов без требования получить их все за вызов. Возвращает [Error, byte[]]; при успехе массив имеет фактически полученную длину. Собирайте неполное сообщение в своём буфере.
| Имя | Тип | По умолчанию |
|---|---|---|
bytes | int | — |
bytesНеотрицательное число байтов для чтения. До вызова проверьте верхний лимит своего протокола.
Reckfell.Collections.ArrayArray [код Error, packed-массив байтов]. При Error.Ok длина массива равна фактически прочитанному числу байтов; при ошибке массив пуст.
GetStringstring
public string GetString(int bytes = -1);Читает простую строку парного формата PutString. При bytes<0 сначала читает 32-битную длину, иначе использует точное число байтов без префикса. Для Unicode выбирайте UTF-8 пару. Длины внешнего ввода ограничивайте до выделения памяти.
| Имя | Тип | По умолчанию |
|---|---|---|
bytes | int | -1 |
bytesЧисло байтов строки. Отрицательное значение читает длину из 32-битного префикса; неотрицательное читает ровно столько байтов без префикса.
stringПолученная строка. Пустая строка сама по себе не различает пустое содержимое и отказ чтения.
GetU16ushort
public ushort GetU16();Читает 2 байта в формате unsigned 16-bit. При ширине больше байта учитывает BigEndian. Не возвращает Error: заранее обеспечьте полное поле; после недостаточного/неудачного чтения числовой результат нельзя считать достоверным.
ushortПрочитанное значение C# типа ushort. Это не пара с Error; значение не проверяет успешность чтения.
GetU32uint
public uint GetU32();Читает 4 байта в формате unsigned 32-bit. При ширине больше байта учитывает BigEndian. Не возвращает Error: заранее обеспечьте полное поле; после недостаточного/неудачного чтения числовой результат нельзя считать достоверным.
uintПрочитанное значение C# типа uint. Это не пара с Error; значение не проверяет успешность чтения.
GetU64ulong
public ulong GetU64();Читает 8 байт в формате unsigned 64-bit. При ширине больше байта учитывает BigEndian. Не возвращает Error: заранее обеспечьте полное поле; после недостаточного/неудачного чтения числовой результат нельзя считать достоверным.
ulongПрочитанное значение C# типа ulong. Это не пара с Error; значение не проверяет успешность чтения.
GetU8byte
public byte GetU8();Читает 1 байт в формате unsigned 8-bit. При ширине больше байта учитывает BigEndian. Не возвращает Error: заранее обеспечьте полное поле; после недостаточного/неудачного чтения числовой результат нельзя считать достоверным.
byteПрочитанное значение C# типа byte. Это не пара с Error; значение не проверяет успешность чтения.
GetUtf8Stringstring
public string GetUtf8String(int bytes = -1);Читает строку UTF-8. При bytes<0 сам читает 32-битный префикс; при заданном числе читает только указанные байты. Не передавайте длину в символах C#. Метод не возвращает отдельный Error; для строгого внешнего формата контролируйте длину и декодирование явно.
| Имя | Тип | По умолчанию |
|---|---|---|
bytes | int | -1 |
bytesЧисло байтов строки. Отрицательное значение читает длину из 32-битного префикса; неотрицательное читает ровно столько байтов без префикса.
stringПолученная строка. Пустая строка сама по себе не различает пустое содержимое и отказ чтения.
GetVarVariant
public Variant GetVar(bool allowObjects = false);Читает двоичный Variant с префиксом длины, записанный парным PutVar. Это не JSON. Проверяйте доверенность, размер и ожидаемый тип данных; метод сам не задаёт прикладной лимит пакета и не возвращает отдельный Error.
| Имя | Тип | По умолчанию |
|---|---|---|
allowObjects | bool | false |
allowObjectsПо умолчанию false. true разрешает восстановление объектов при декодировании; не включайте для недоверенного содержимого. Это не проверка схемы и не песочница.
VariantДекодированный Variant; Nil может быть данными либо результатом отказа с диагностикой.
IsBigEndianEnabledbool
public bool IsBigEndianEnabled();Возвращает тот же флаг, что BigEndian; не определяет порядок байтов уже загруженных данных.
boolТекущее значение BigEndian; false означает little-endian.
Put16void
public void Put16(short value);Пишет 2 байта в формате signed 16-bit. При ширине больше байта учитывает BigEndian. Возвращаемого Error нет; для транспорта с отказами используйте raw-запись с явным контролем результата.
| Имя | Тип | По умолчанию |
|---|---|---|
value | short | — |
valueЗначение для формата signed 16-bit, 2 байта. Согласуйте тот же формат с читателем; числовой тип сам не задаёт схему сообщения.
Put32void
public void Put32(int value);Пишет 4 байта в формате signed 32-bit. При ширине больше байта учитывает BigEndian. Возвращаемого Error нет; для транспорта с отказами используйте raw-запись с явным контролем результата.
| Имя | Тип | По умолчанию |
|---|---|---|
value | int | — |
valueЗначение для формата signed 32-bit, 4 байта. Согласуйте тот же формат с читателем; числовой тип сам не задаёт схему сообщения.
Put64void
public void Put64(long value);Пишет 8 байт в формате signed 64-bit. При ширине больше байта учитывает BigEndian. Возвращаемого Error нет; для транспорта с отказами используйте raw-запись с явным контролем результата.
| Имя | Тип | По умолчанию |
|---|---|---|
value | long | — |
valueЗначение для формата signed 64-bit, 8 байт. Согласуйте тот же формат с читателем; числовой тип сам не задаёт схему сообщения.
Put8void
public void Put8(sbyte value);Пишет 1 байт в формате signed 8-bit. При ширине больше байта учитывает BigEndian. Возвращаемого Error нет; для транспорта с отказами используйте raw-запись с явным контролем результата.
| Имя | Тип | По умолчанию |
|---|---|---|
value | sbyte | — |
valueЗначение для формата signed 8-bit, 1 байт. Согласуйте тот же формат с читателем; числовой тип сам не задаёт схему сообщения.
PutData2 перегрузки
public Error PutData(byte[] data);Передаёт raw-байты без автоматического заголовка, длины или смены порядка. Возвращает Error; на сокетном потоке полная отправка может ожидать. Один вызов не задаёт границы TCP-сообщения.
| Имя | Тип | По умолчанию |
|---|---|---|
data | byte[] | — |
dataRaw-байты для передачи, не текст и не структура с автоматической сериализацией. Количество байтов задаётся длиной массива/span.
ErrorError.Ok при успешной полной передаче по контракту реализации; иначе код отказа. Не подтверждает обработку получателем.
public Error PutData(ReadOnlySpan<byte> data);Передаёт raw-байты без автоматического заголовка, длины или смены порядка. Возвращает Error; на сокетном потоке полная отправка может ожидать. Один вызов не задаёт границы TCP-сообщения.
| Имя | Тип | По умолчанию |
|---|---|---|
data | ReadOnlySpan<byte> | — |
dataRaw-байты для передачи, не текст и не структура с автоматической сериализацией. Количество байтов задаётся длиной массива/span.
ErrorError.Ok при успешной полной передаче по контракту реализации; иначе код отказа. Не подтверждает обработку получателем.
PutDoublevoid
public void PutDouble(double value);Пишет 8 байт в формате binary64. При ширине больше байта учитывает BigEndian. Возвращаемого Error нет; для транспорта с отказами используйте raw-запись с явным контролем результата.
| Имя | Тип | По умолчанию |
|---|---|---|
value | double | — |
valueЗначение для формата binary64, 8 байт. Согласуйте тот же формат с читателем; числовой тип сам не задаёт схему сообщения.
PutFloatvoid
public void PutFloat(float value);Пишет 4 байта в формате binary32. При ширине больше байта учитывает BigEndian. Возвращаемого Error нет; для транспорта с отказами используйте raw-запись с явным контролем результата.
| Имя | Тип | По умолчанию |
|---|---|---|
value | float | — |
valueЗначение для формата binary32, 4 байта. Согласуйте тот же формат с читателем; числовой тип сам не задаёт схему сообщения.
PutHalfvoid
public void PutHalf(float value);Пишет 2 байта в формате binary16. При ширине больше байта учитывает BigEndian. Возвращаемого Error нет; для транспорта с отказами используйте raw-запись с явным контролем результата. Формат binary16 имеет меньшую точность/диапазон, чем C# float.
| Имя | Тип | По умолчанию |
|---|---|---|
value | float | — |
valueЗначение для формата binary16, 2 байта. Согласуйте тот же формат с читателем; числовой тип сам не задаёт схему сообщения.
PutPartialData2 перегрузки
public Reckfell.Collections.Array PutPartialData(byte[] data);Пытается передать часть raw-данных и возвращает [Error, количество]. Проверяйте оба значения и продолжайте с оставшегося участка при необходимости. У StreamPeerBuffer успешная запись обычно принимает весь массив.
| Имя | Тип | По умолчанию |
|---|---|---|
data | byte[] | — |
dataRaw-байты для передачи, не текст и не структура с автоматической сериализацией. Количество байтов задаётся длиной массива/span.
Reckfell.Collections.ArrayArray [код Error, фактически отправленное число байтов]. Успех не гарантирует отправку всего запроса.
public Reckfell.Collections.Array PutPartialData(ReadOnlySpan<byte> data);Пытается передать часть raw-данных и возвращает [Error, количество]. Проверяйте оба значения и продолжайте с оставшегося участка при необходимости. У StreamPeerBuffer успешная запись обычно принимает весь массив.
| Имя | Тип | По умолчанию |
|---|---|---|
data | ReadOnlySpan<byte> | — |
dataRaw-байты для передачи, не текст и не структура с автоматической сериализацией. Количество байтов задаётся длиной массива/span.
Reckfell.Collections.ArrayArray [код Error, фактически отправленное число байтов]. Успех не гарантирует отправку всего запроса.
PutStringvoid
public void PutString(string value);Пишет ASCII-представление с 32-битным префиксом длины в байтах. Для Unicode используйте PutUtf8String. Префикс зависит от BigEndian; нулевой завершающий байт не является частью полезной строки.
| Имя | Тип | По умолчанию |
|---|---|---|
value | string | — |
valueСтрока для записи в ASCII. Для кириллицы, emoji и другого Unicode используйте PutUtf8String.
PutU16void
public void PutU16(ushort value);Пишет 2 байта в формате unsigned 16-bit. При ширине больше байта учитывает BigEndian. Возвращаемого Error нет; для транспорта с отказами используйте raw-запись с явным контролем результата.
| Имя | Тип | По умолчанию |
|---|---|---|
value | ushort | — |
valueЗначение для формата unsigned 16-bit, 2 байта. Согласуйте тот же формат с читателем; числовой тип сам не задаёт схему сообщения.
PutU32void
public void PutU32(uint value);Пишет 4 байта в формате unsigned 32-bit. При ширине больше байта учитывает BigEndian. Возвращаемого Error нет; для транспорта с отказами используйте raw-запись с явным контролем результата.
| Имя | Тип | По умолчанию |
|---|---|---|
value | uint | — |
valueЗначение для формата unsigned 32-bit, 4 байта. Согласуйте тот же формат с читателем; числовой тип сам не задаёт схему сообщения.
PutU64void
public void PutU64(ulong value);Пишет 8 байт в формате unsigned 64-bit. При ширине больше байта учитывает BigEndian. Возвращаемого Error нет; для транспорта с отказами используйте raw-запись с явным контролем результата.
| Имя | Тип | По умолчанию |
|---|---|---|
value | ulong | — |
valueЗначение для формата unsigned 64-bit, 8 байт. Согласуйте тот же формат с читателем; числовой тип сам не задаёт схему сообщения.
PutU8void
public void PutU8(byte value);Пишет 1 байт в формате unsigned 8-bit. При ширине больше байта учитывает BigEndian. Возвращаемого Error нет; для транспорта с отказами используйте raw-запись с явным контролем результата.
| Имя | Тип | По умолчанию |
|---|---|---|
value | byte | — |
valueЗначение для формата unsigned 8-bit, 1 байт. Согласуйте тот же формат с читателем; числовой тип сам не задаёт схему сообщения.
PutUtf8Stringvoid
public void PutUtf8String(string value);Пишет UTF-8 байты с 32-битным префиксом их длины. Для emoji/кириллицы длина не равна C# string.Length. Читать можно GetUtf8String() либо отдельно префикс и GetUtf8String(число_байтов).
| Имя | Тип | По умолчанию |
|---|---|---|
value | string | — |
valueТекст для кодирования в UTF-8. Метод сам записывает 32-битную длину в байтах перед содержимым.
PutVarvoid
public void PutVar(Variant value, bool fullObjects = false);Пишет 32-битную длину и двоичное представление Variant. Это отдельный формат движка, не JSON и не полная сериализация состояния игры. BigEndian влияет на внешний префикс, а не перекодирует внутренний формат Variant.
| Имя | Тип | По умолчанию |
|---|---|---|
value | Variant | — |
fullObjects | bool | false |
valueVariant для двоичного кодирования. Получатель должен использовать GetVar с согласованным порядком байтов внешнего префикса.
fullObjectsfalse по умолчанию не сохраняет полное содержимое Object. true включает объектное кодирование; это не перенос владельцев, живого дерева или серверных ресурсов между процессами.
SetBigEndianvoid
public void SetBigEndian(bool enable);Устанавливает BigEndian для следующих операций. У чтения и записи формата должны совпадать порядок байтов и типы полей.
| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
enabletrue — big-endian, false — little-endian для следующих числовых операций; не автоматическое распознавание входа.