Appearance
Server Federation
PlayerServer 間のリクエスト転送プロトコルを定義します。
VirMesh v1 では、プレイヤーは自分が所属する 1 つの PlayerServer を介して他サーバー上のプレイヤーと通信します。クライアントは常に自分の PlayerServer に action を送り、自分の PlayerServer が必要に応じて対象プレイヤーの PlayerServer にリクエストを転送します。
転送フロー
- クライアントが自分の PlayerServer(以下「送信元 PS」)に private action を送る。
- 送信元 PS は
payload内の対象 player identifier(例:payload.friendId)から対象の PlayerServer(以下「送信先 PS」)を解決する。 - 送信元 PS はクライアントの envelope をそのまま送信先 PS に POST する。
- 送信先 PS は署名を検証し、処理結果を送信元 PS に返す。
- 送信元 PS は結果をクライアントに返す。
転送リクエスト形式
転送リクエストはクライアントの envelope を一切変更せず、HTTP ヘッダーで転送情報を付与します。
text
POST https://target-ps.example.com/private/me.virmesh.social.sendFriendRequest
X-VirMesh-Forwarded-By: https://sender-ps.example.com
Content-Type: application/json
{
"from": "medi:player:ed25519:sender-public-key",
"payload": {
"requestTo": "medi:player:ed25519:recipient-public-key",
"friendPayload": {
"playerA": "medi:player:ed25519:sender-public-key",
"playerB": "medi:player:ed25519:recipient-public-key"
},
"senderSignature": "base64-signature-by-sender"
},
"signature": "base64-signature-by-sender-for-envelope"
}転送ヘッダー
| ヘッダー | 必須 | 説明 |
|---|---|---|
X-VirMesh-Forwarded-By | 推奨 | 転送元 PlayerServer の canonical URL |
v1 では X-VirMesh-Forwarded-By は検証の参考情報です。受信側は envelope の signature(プレイヤー署名)のみで正当性を判断します。
対象 PlayerServer の解決
送信元 PS は対象プレイヤーの PlayerServer を次のいずれかの方法で解決します。
- handle 経由: 対象プレイヤーの handle(例:
alice@example.com)からme.virmesh.handle.resolveHandleを呼び、handle record 内のplayerServerを取得する。 - profile 経由:
me.virmesh.player.resolveProfileの responsepayload.handle.record.playerServerから取得する。 - 直接指定: クライアントがあらかじめ対象の PlayerServer URL を知っている場合。
handle は player 専用です。ワールドの discovery では example.com/world 形式の world address を使い、me.virmesh.world.resolveWorld で署名付き world manifest と worldId に解決します。解決後の instance 取得や live session の署名対象には、world address ではなく worldId を使います。
転送対象の action
v1 では以下の social action が転送対象です。
| action | 説明 |
|---|---|
me.virmesh.social.sendFriendRequest | 対象プレイヤーの PS に friend request を転送 |
me.virmesh.social.acceptFriendRequest | 相手の PS に受理を通知 |
me.virmesh.social.declineFriendRequest | 相手の PS に拒否を転送 |
me.virmesh.social.cancelFriendRequest | 相手の PS にキャンセルを通知 |
me.virmesh.social.removeFriend | 相手の PS にフレンド解除を通知 |
エラーハンドリング
送信先 PS が返したエラーは、送信元 PS がそのままクライアントに転送します。
送信先 PS に到達できない場合、送信元 PS は適切なエラーをクライアントに返します(v1 ではサーバー実装依存)。
Next steps
- transport の詳細は Transport を参照してください。
- social action の詳細は me.virmesh.social を参照してください。