現在ドキュメントは制作段階にあるため、多くの情報が不完全なものになっています

シリアライザ

概要

シリアライザを使うことで、オブジェクトをバイト列に変換してオブジェクトを保存したり、他のセッションに送信することができます。 これにより、オブジェクトを保存する際にJSONに対応した文字列に変換する必要がなくなるため、データ量の節約や高速化が期待できます。

Serializable型

2つのメソッド

serialize
,
deserialize
を実装することでシリアライザを定義できます。

1
export interface Serializable<T, D> {
2
    serialize(data: T): D;
3
    deserialize(data: D): T;
4
}

シリアライザの作成

シリアライザを作成するにあたって、すべて自前で実装することもできますが、

ByteReader
,
ByteWriter
を使うことで簡単にバイト列を扱うことができます。

1
import type { Serializable } from '@omujs/omu';
2
import { ByteReader, ByteWriter } from '@omujs/omu'; // バイト列を扱うためのユーティリティ
3

4
type MyData = {
5
    byteArray: Uint8Array;
6
    date: Date;
7
};
8

9
const mySerializer: Serializable<MyData, Uint8Array> = {
10
    serialize(data) {
11
        const writer = new ByteWriter();
12
        writer.writeByteArray(data.byteArray);
13
        writer.writeString(data.date.toISOString());
14
        return writer.finish(); // バイト列を返す
15
    },
16
    deserialize(data) {
17
        const reader = new ByteReader(data);
18
        const byteArray = reader.readByteArray();
19
        const date = new Date(reader.readString());
20
        reader.finish(); // 読み切ったことを確認
21
        return { byteArray, date };
22
    },
23
};

使用例

例としてsignal機能をシリアライザと組み合わせて使う方法を示します。

1
const DEFAULT_MY_DATA: MyData = {
2
    byteArray: new Uint8Array(),
3
    date: new Date(),
4
};
5

6
const mySignal = omu.signals.create<MyData>('my_data', {
7
    serializer: mySerializer,
8
});
9

10
await mySignal.notify({
11
    byteArray: new Uint8Array([1, 2, 3]),
12
    date: new Date(),
13
})
14

15
mySignal.listen((data: MyData) => {
16
    console.log(data.byteArray);
17
    console.log(data.date);
18
});