本文へ移動
SDK ガイド / 接続・参加

接続・参加

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;
}

リファレンスの目次