Skip to content

Phira-mp + プロジェクト概要

プロジェクト構造

Phira-mp-plus/

├── Cargo.toml                   # ワークスペースルート
├── Cargo.lock
├── LICENSE                      # AGPL-3.0
├── README.md

├── server_config.yml            # YAML設定ファイル(初回実行時にデフォルトテンプレートを自動生成)
├── data/                        # 実行時データディレクトリ
│   ├── extensions.json          #   プラグイン拡張データの永続化
│   ├── rounds/                  #   ラウンドのTouches/Judges記録
│   └── plugins/                 #   プラグインのプライベートデータ
├── log/                         # 実行ログ(毎時間ローテーション)

├── phira-mp-plus-server/        # サーバーコア
│   ├── Cargo.toml               #   axum / tokio / wasmtime / clap などの依存関係
│   ├── locales/                 #   Fluent i18n 翻訳ファイル
│   │   ├── en-US.ftl
│   │   ├── zh-CN.ftl
│   │   └── zh-TW.ftl
│   └── src/
│       ├── main.rs              #   プロセスエントリとライフサイクル
│       ├── logging.rs           #   tracing出力とログローテーション
│       ├── terminal.rs          #   端末能力検出とScreen縮退戦略
│       ├── lib.rs               #   モジュールエクスポート
│       ├── server.rs            #   サーバーコア: PlusConfig / PlusServerState / PlusServer
│       │                        #     acceptループ、ベンチマーク、状態問合せディスパッチ
│       ├── session.rs           #   セッション管理: Session / User モデル、認証、コマンド処理
│       │                        #     Touches/Judgesデータをプラグインイベント+ディスク保存へ
│       ├── room.rs              #   ルームステートマシン: InternalRoomState / Room
│       │                        #     選曲→準備→プレイ→決済、プレイヤーリアルタイムデータキャッシュ
│       ├── plugin.rs            #   プラグインマネージャー + WASMホスト: PluginManager / PluginHost
│       │                        #     プラグインロード、イベント配信、CLI/HTTP/API登録
│       ├── plugin_http.rs       #   HTTPサービスの組み立てと動的リクエストディスパッチ
│       ├── plugin_http/
│       │   ├── router.rs        #   動的ルーティングマッチング
│       │   ├── sse.rs           #   SSEイベントバス、スナップショットとストリーム変換
│       │   └── websocket.rs     #   リアルタイムWebSocketブリッジ
│       ├── wasm_host.rs         #   WASMランタイム: wasmtimeインスタンス、JSON ABI、host/apiブリッジ
│       ├── extensions.rs        #   拡張データシステム: ユーザー/ルームKVストア + authキャッシュ永続化
│       ├── ban.rs               #   ブラックリストシステム: グローバルBAN + ルームブラックリスト
│       ├── round_store.rs       #   ラウンドデータ保存: JSONL形式、round_uuid/player_idで整理
│       ├── rate_limiter.rs      #   レート制限: スライディングウィンドウ(接続)+ トークンバケット(コマンド)
│       ├── cli.rs               #   CLIコマンドハンドラ: 30+ 管理コマンド、プラグイン拡張コマンド
│       ├── cli_tui.rs           #   TUI端末インターフェース: ratatui + crossterm
│       └── l10n.rs              #   ローカライゼーション: Fluent Bundle / tl! マクロ

├── phira-mp-plus-server-api/    # WASMプラグイン共有型クレート
│   └── src/lib.rs               #   PluginEvent / PluginInfo / HttpHandle
│                                #   ServerStateQuery / PluginApiHandler

├── phira-mp/                    # 上流phira-mpサブモジュール(プロトコル層とオリジナルサーバー)
│   ├── phira-mp-common/         #   ネットワークプロトコル: バイナリエンコーディング (BinaryData trait)、
│   │   └── src/                 #     コマンド定義 (ClientCommand / ServerCommand)、
│   │       ├── lib.rs           #     Streamフレームプロトコル、RoomId / RoomState / メッセージ型
│   │       ├── command.rs
│   │       ├── bin.rs           #     BinaryReader / BinaryWriter (LEB128, リトルエンディアン)
│   │       └── framing.rs       #     パック/アンパック (VARINT長さプレフィックス)
│   ├── phira-mp-macros/         #   #[derive(BinaryData)] プロシージャルマクロ
│   ├── phira-mp-server/         #   オリジナルスタンドアロンサーバー (reference)
│   └── phira-mp-client/         #   TCPクライアントライブラリ (ゲーム統合用)

├── docs/                        # ローカルドキュメント
│   ├── cli.md                   #   CLIコマンドリファレンス
│   └── plugin-dev.md            #   WASMプラグイン開発ガイド + WIT APIリファレンス

└── server_config.yml            # YAML設定ファイル (ランタイムコピー)

端末互換性

起動時に stdin/stdout、TERMSTYTMUX を検出します。GNU Screen は自動的に行単位の互換コンソールに切り替わり、色、代替画面、マウスキャプチャ、Bracketed Paste を無効化します。tmux では完全な TUI を使用できます。また NO_COLOR に従い、行単位出力では残りの制御シーケンスもフィルタリングされます。非対話環境でも行単位コンソールが使用されます。

SSE ルームイベント

GET /rooms/listen に接続すると、まず ready が送信され、次に現在のルームスナップショットが update_room として再生され、その後 create_roomupdate_roomjoin_roomleave_roomnew_round が継続的にプッシュされます。以下のコマンドでデータストリームを確認できます:

bash
curl -N http://127.0.0.1:12347/rooms/listen

ビルドフィーチャー

フィーチャー説明デフォルト
plugin-systemWASMプラグインサポート(wasmtime)はい

設定リファレンス

完全な設定項目については server_config.yml を参照してください:

設定項目デフォルト値説明
portu1612346TCP リッスンポート
http_portu1612347HTTP/SSE サービスポート
monitorsVec<i32>[2]観戦を許可するユーザーID
phira_api_endpointStringhttps://phira.5wyxi.comPhira API エンドポイント
plugins_dirStringpluginsプラグインディレクトリ
chat_enabledbooltrueチャット機能のオン/オフ
cli_enabledbooltrueCLIコンソールのオン/オフ
connection_rate_limitu3230接続レート制限(ウィンドウ内の許可回数)
connection_rate_windowu3210接続レート統計ウィンドウ(秒)
max_users_per_roomusize8ルームあたりの最大プレイヤー数
round_data_retention_daysu327ラウンドのTouches/Judges保持日数(0=保持しない)
server_nameStringサーバー名

Last modified byFireflyF09on2026-06-26 16:11

Built with VitePress