Chuyển tới nội dung chính

Tra cứu presenter

Mỗi presenter chỉ có một instance cho toàn bộ app. Inject interface vào một view được scene scope của bạn đăng ký.

PresenterNamespace (SilverTiger.ProjectV.Unity.Presentation.*)Dùng cho
IProjectVStartupPresenter.StartupLogin: admission, khôi phục session, hydration
IProjectVAuthenticationPresenter.AuthenticationLogin: Guest, mật khẩu, Google, Apple
IProjectVAccountPresenter.AccountPopup tài khoản: đăng xuất, xoá tài khoản
IProjectVLobbyPresenter.LobbyHồ sơ ở Lobby
IProjectVHeaderPresenter.HeaderThanh trên cùng: tiền tệ, đếm ngược stamina (thể lực)
IProjectVCharacterPresenter.CharacterNhân vật, kỹ năng, trang bị, skin, vật phẩm
IProjectVAlliancePresenter.AllianceChọn đồng minh (ally)
IProjectVCampaignPresenter.CampaignDanh sách nhiệm vụ, sao, vào nhiệm vụ
IProjectVShopPresenter.ShopGói (offer) và lượt mua
IProjectVGameplayDataPresenter.GameplayScene nhiệm vụ: dữ liệu bắt đầu và quyết toán

Các type dùng chung cho nhiều presenter (trạng thái phục hồi, xác nhận giao dịch, lỗi, ID có kiểu, helper gắn UI) nằm ở trang Type dùng chung.

Ưu tiên screen contract

Lobby, Character, Alliance, Campaign và Shop còn có screen contract (IProjectVLobbyScreen và các contract khác). Một trang theo dõi một view và gọi command (lệnh). Chỉ dùng presenter cho những gì contract chưa hỗ trợ.

Cấu trúc chung​

Mọi screen presenter đều theo cùng một mẫu:

ProjectVXxxSnapshot Current { get; } // latest snapshot, never null
Task<IDisposable> SubscribeAsync(Action<ProjectVXxxSnapshot> listener); // current value, then every change
Task<ProjectVXxxCommandResult> RefreshAsync(CancellationToken token); // where the screen has data
Task<ProjectVXxxCommandResult> SomeCommandAsync(..., CancellationToken token);
  • Snapshot chứa một enum Status, dữ liệu của màn (hoặc null khi chưa tải xong), một Error (hoặc null) và, trên các màn có dữ liệu, một ProjectVScreenRecoveryState Recovery.
  • Kết quả command chứa Snapshot và IsSuccess. Luôn vẽ (render) snapshot, kể cả khi thất bại; dữ liệu dùng được trước đó vẫn được giữ.
  • Listener của presenter có thể chạy ngoài Unity main thread. Chuyển về main thread trước khi đụng vào Unity object (ví dụ bằng await UniTask.SwitchToMainThread() của UniTask). Screen contract tự làm việc này cho bạn.
  • Exception nghĩa là lỗi lập trình hoặc lỗi vòng đời (tham số sai, sai scene). Lỗi backend dự kiến được trả về dưới dạng giá trị trong Error.

Lỗi theo presenter​

PresenterType lỗiHiện cho người chơi
Startup, Authentication, Account, LobbyProjectV*ErrorLocalizationKey (ví dụ projectv.startup.network) qua hệ thống localization của bạn
Character, Alliance, Campaign, ShopProjectV*ErrorSafeMessage (đã an toàn để hiện cho người chơi)
Gameplay dataProjectVGameplayDataResultSafeMessage; giữ ErrorCode để ghi log

Mọi type lỗi đều có Category (ProjectVBackendErrorCategory), Code và, khi server có trả về, RequestId để hỗ trợ.