接続・参加
Relayへの接続と、一つのWorldへの参加を分けて扱います。
Connection
connect に discovery または endpoints と、identity・access を渡します。access は資格または非同期の取得関数。authorize はRelay資格の更新、world.join はWorld資格の適用です。close は全Sessionを終了します。
TypeScript · シグネチャ
type ConnectionStatus = 'connecting' | 'open' | 'closed';
interface Connection {
readonly subject: string;
readonly status: ConnectionStatus;
readonly world: WorldConnections;
readonly invitation: InvitationExchange;
onStatus(listener: (status: ConnectionStatus, error: ErrorValue | null) => void): () => void;
authorize(access: RelayAccess): Promise<RelayGrant>;
close(): void;
}
interface WorldConnections {
join(world: string, options?: {
access?: WorldAccess;
storage?: Storage;
blobs?: Storage;
}): Promise<WorldSession>;
join(world: World, options?: { access?: WorldAccess }): Promise<WorldSession>;
publish(world: World, options?: { access?: WorldAccess }): Promise<WorldSession>;
}
const world = await World.open(storage, { identity, blobs });
const session = await connection.world.join(world, { access });WorldSession
session.model が参加先のWorldです。leave は対象Worldから退出し、親接続とローカルモデルを残します。get / watch はNodeのWorldInfoを取得します。
TypeScript · シグネチャ
type SessionStatus = 'joined' | 'reconnecting' | 'left';
interface WorldSession {
readonly id: string;
readonly status: SessionStatus;
readonly connection: Connection;
readonly model: World;
readonly presence: PresenceChannel;
readonly messaging: Messaging;
readonly media: Media;
onStatus(listener: (status: SessionStatus, error: ErrorValue | null) => void): () => void;
get(): Promise<Read<WorldInfo>>;
watch(listener: (value: Read<WorldInfo>) => void, options?: WatchOptions): Promise<() => void>;
leave(): Promise<void>;
}InvitationExchange
request で招待を WorldAccess に交換してから world.join を呼びます。SDK標準招待は自動処理され、独自の招待要求は onRequest / respond で扱います。
TypeScript · シグネチャ
interface InvitationExchange {
request(input: { world: string; issuer: string; invitation?: Json }): Promise<WorldAccess>;
onRequest(listener: (request: InvitationRequest) => void): () => void;
respond(request: string, result: { access: WorldAccess } | { error: ErrorValue }): Promise<void>;
}
interface InvitationRequest {
request: string;
world: string;
subject: string;
invitation?: Json;
}通知・失敗・再接続
一時切断中は connecting / reconnecting となりSDKが再接続します。親接続の復旧後もWorldがUnavailableなら、資格が有効な間はWorldごとに最大30秒間隔で再参加を試みます。購読復元中の再切断でも登録を維持します。left / closed 後は明示的な再開が必要です。WorldAccessの期限切れや必要なreadの喪失でもSessionは終了します。watchの onClose は終了を一度だけ通知します。
TypeScript · シグネチャ
interface WatchOptions {
onClose?: (error: ErrorValue | null) => void;
}