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

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
PhaseProjectVScreenPhase: Idle, Loading, Live, Empty, Partial, Cached, Stale, Offline, Error
MessageVăn bản an toàn mô tả trạng thái
HasUsableDataTiếp tục vẽ dữ liệu hiện tại
CanRetryHiện nút thử lại (Retry) (gọi lại đúng lần refresh đó)
CanSyncHiện nút Sync (đọc lại server sau một kết quả không xác định)
RetryAfterSecondsKhi 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
StatusProjectVTransactionStatus: Idle, AwaitingConfirmation, InFlight, Succeeded, Rejected, Cancelled, UnknownOutcome
CurrentProjectVTransactionConfirmation: Kind, Title, ItemOrRewardSummary, PriceSummary, Balances, DataLossScope, ExpiresAtUnixSeconds, IsAffordable
LastResultProjectVTransactionResult: Status, Message, CanRetry, CanSync
IsBusy, CanConfirm, CanCancelTrạng thái nút
Cancel()Đóng hộp xác nhận đang mở
ChangedEvent đượ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.