Type dùng chung
Trạng thái phục hồi của màn
ProjectVScreenRecoveryState (.Presentation.Recovery) có trên snapshot của
mọi màn có dữ liệu, dưới tên Recovery:
| Member | Ý nghĩa |
|---|---|
Phase | ProjectVScreenPhase: Idle, Loading, Live, Empty, Partial, Cached, Stale, Offline, Error |
Message | Văn bản an toàn mô tả trạng thái |
HasUsableData | Tiếp tục vẽ dữ liệu hiện tại |
CanRetry | Hiện nút thử lại (Retry) (gọi lại đúng lần refresh đó) |
CanSync | Hiện nút Sync (đọc lại server sau một kết quả không xác định) |
RetryAfterSeconds | Khi có giá trị, khoá nút Retry trong khoảng thời gian này |
Đừng xoá trắng một màn vẫn còn dữ liệu dùng được chỉ vì refresh thất bại; thay vào đó hãy hiện chỉ báo offline hoặc partial.
Xác nhận giao dịch
Các thao tác tốn tài nguyên được xác nhận trước khi chạy. Presenter hỗ trợ
việc này sẽ cung cấp một ProjectVTransactionConfirmationCoordinator (ví dụ
IProjectVCharacterPresenter.Transactions):
| Member | Ý nghĩa |
|---|---|
Status | ProjectVTransactionStatus: Idle, AwaitingConfirmation, InFlight, Succeeded, Rejected, Cancelled, UnknownOutcome |
Current | ProjectVTransactionConfirmation: Kind, Title, ItemOrRewardSummary, PriceSummary, Balances, DataLossScope, ExpiresAtUnixSeconds, IsAffordable |
LastResult | ProjectVTransactionResult: Status, Message, CanRetry, CanSync |
IsBusy, CanConfirm, CanCancel | Trạng thái nút |
Cancel() | Đóng hộp xác nhận đang mở |
Changed | Event được phát ở mỗi lần thay đổi |
ProjectVBalancePreview (trong Balances) cho biết ResourceId,
CurrentBalance, Cost và ProjectedBalance; đây là bản xem trước của hộp
xác nhận, không phải số dư mới. ProjectVTransactionKind:
WalletPurchase, GachaDraw, AccountDeletion, CharacterSkillUpgrade,
CharacterEquipmentUpgrade.
Lỗi
ProjectVBackendErrorCategory: Cancelled, Validation, Authentication,
Authorization, NotFound, Conflict, RateLimited, Timeout,
Unavailable, Network, Protocol, Server, Client.
Lỗi phía đăng nhập (Startup, Authentication, Account, Lobby) có
LocalizationKey dạng projectv.<screen>.<category>, ví dụ
projectv.authentication.network. Lỗi của màn có dữ liệu (Character, Alliance,
Campaign, Shop) có SafeMessage. Mọi lỗi đều có Code và một RequestId tuỳ
chọn để hiện trong panel hỗ trợ.
ID có kiểu
ID là các readonly struct nhỏ, so sánh theo giá trị bằng .Equals:
ProjectVCharacterId, ProjectVCharacterSkillId, ProjectVCampaignMissionId,
ProjectVShopOfferId, ProjectVItemId, ProjectVResourceId,
ProjectVCurrencyId, ProjectVEquipmentId, ProjectVEquipmentSlotId,
ProjectVSkinId, ProjectVLoadoutSlotId, ProjectVBackpackSlotId,
ProjectVHeaderViewKey, ProjectVGameplayKey, ProjectVGameplaySkillId,
ProjectVGameplayItemId. Mỗi ID có một chuỗi Value.
Các giá trị có sẵn: ProjectVLoadoutSlots.Main / .ActiveAlly,
ProjectVCharacterKinds.Character / .Ally, và ProjectVHeaderViewKeys
(Credit, Gold, CoreDust, Diamond).
Ánh xạ ID sang asset của game (nhân vật, vật phẩm, scene) bằng một bảng tường minh. Không bao giờ parse tên hiển thị hay dùng lại GUID asset của Unity làm ID server.
Subscription cho UI
ProjectVUiSubscriptions thêm SubscribeUiAsync cho các presenter
Authentication, Startup và Header:
var subscription = await header.SubscribeUiAsync(ProjectVUiBindingId.Header, ApplyHeader, token);
ProjectVUiBindingId (LoginAuthentication, LoginStartup, Header) phải
khớp với presenter, nếu không sẽ throw. Helper này ghi nhận thời điểm callback
apply đồng bộ trả về (không phải lúc vẽ xong hay backend hoàn tất); ngoài
ra nó hoạt động giống SubscribeAsync.