@@ -9,6 +9,7 @@
|
|||||||
- [MATCH3D_DOMAIN_AND_CONTRACTS_STAGE1_2026-04-30.md](./MATCH3D_DOMAIN_AND_CONTRACTS_STAGE1_2026-04-30.md):冻结抓大鹅 Match3D B1+B2 的纯领域规则 crate、Rust/TypeScript shared contracts,以及 Stage1 不触碰 SpacetimeDB 表和 api-server 的边界。
|
- [MATCH3D_DOMAIN_AND_CONTRACTS_STAGE1_2026-04-30.md](./MATCH3D_DOMAIN_AND_CONTRACTS_STAGE1_2026-04-30.md):冻结抓大鹅 Match3D B1+B2 的纯领域规则 crate、Rust/TypeScript shared contracts,以及 Stage1 不触碰 SpacetimeDB 表和 api-server 的边界。
|
||||||
- [MATCH3D_F1_CREATION_ENTRY_AND_AGENT_UI_2026-04-30.md](./MATCH3D_F1_CREATION_ENTRY_AND_AGENT_UI_2026-04-30.md):记录抓大鹅 F1 创作入口、Agent 工作区、参考图入口、本地 mock client 与后续 B5 HTTP facade 替换点。
|
- [MATCH3D_F1_CREATION_ENTRY_AND_AGENT_UI_2026-04-30.md](./MATCH3D_F1_CREATION_ENTRY_AND_AGENT_UI_2026-04-30.md):记录抓大鹅 F1 创作入口、Agent 工作区、参考图入口、本地 mock client 与后续 B5 HTTP facade 替换点。
|
||||||
- [MATCH3D_F2_RESULT_AND_PUBLISH_2026-04-30.md](./MATCH3D_F2_RESULT_AND_PUBLISH_2026-04-30.md):冻结抓大鹅 F2 结果页、基础信息编辑、发布前试玩入口、发布门槛、自动保存和已发布作品二次编辑恢复口径。
|
- [MATCH3D_F2_RESULT_AND_PUBLISH_2026-04-30.md](./MATCH3D_F2_RESULT_AND_PUBLISH_2026-04-30.md):冻结抓大鹅 F2 结果页、基础信息编辑、发布前试玩入口、发布门槛、自动保存和已发布作品二次编辑恢复口径。
|
||||||
|
- [MATCH3D_SPACETIME_CLIENT_AND_API_FACADE_2026-04-30.md](./MATCH3D_SPACETIME_CLIENT_AND_API_FACADE_2026-04-30.md):记录抓大鹅 B4+B5 已落地的 SpacetimeDB bindings、`spacetime-client` facade、`api-server` HTTP 路由、shared contract 对齐和验收命令。
|
||||||
- [PLATFORM_MOBILE_BOTTOM_DOCK_VIEWPORT_FIX_2026-04-30.md](./PLATFORM_MOBILE_BOTTOM_DOCK_VIEWPORT_FIX_2026-04-30.md):记录平台首页底部 dock 在手机浏览器地址栏展开时脱离可见区域的根因,以及 `100dvh`、固定底部锚点和安全区占位的修复口径。
|
- [PLATFORM_MOBILE_BOTTOM_DOCK_VIEWPORT_FIX_2026-04-30.md](./PLATFORM_MOBILE_BOTTOM_DOCK_VIEWPORT_FIX_2026-04-30.md):记录平台首页底部 dock 在手机浏览器地址栏展开时脱离可见区域的根因,以及 `100dvh`、固定底部锚点和安全区占位的修复口径。
|
||||||
- [SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md](./SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md):记录 SpacetimeDB private 表迁移 JSON 导出/导入 procedure、迁移操作员授权、HTTP 413 分片导入、Jenkins 自动迁移回灌和导入脚本参数。
|
- [SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md](./SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md):记录 SpacetimeDB private 表迁移 JSON 导出/导入 procedure、迁移操作员授权、HTTP 413 分片导入、Jenkins 自动迁移回灌和导入脚本参数。
|
||||||
- [JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md](./JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md):记录 `Genarrative-Database-Export` / `Genarrative-Database-Import` 两条 SCM-backed 数据库迁移流水线参数、默认 dry-run、token 边界和 `CHUNK_SIZE` 413 规避参数。
|
- [JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md](./JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md):记录 `Genarrative-Database-Export` / `Genarrative-Database-Import` 两条 SCM-backed 数据库迁移流水线参数、默认 dry-run、token 边界和 `CHUNK_SIZE` 413 规避参数。
|
||||||
|
|||||||
@@ -21,10 +21,9 @@ use serde_json::{Value, json};
|
|||||||
use shared_contracts::{
|
use shared_contracts::{
|
||||||
match3d_agent::{
|
match3d_agent::{
|
||||||
CreateMatch3DAgentSessionRequest, ExecuteMatch3DAgentActionRequest,
|
CreateMatch3DAgentSessionRequest, ExecuteMatch3DAgentActionRequest,
|
||||||
Match3DAgentActionResponse, Match3DAgentMessageResponse,
|
Match3DAgentActionResponse, Match3DAgentMessageResponse, Match3DAgentSessionResponse,
|
||||||
Match3DAgentSessionResponse, Match3DAgentSessionSnapshotResponse,
|
Match3DAgentSessionSnapshotResponse, Match3DAnchorItemResponse, Match3DAnchorPackResponse,
|
||||||
Match3DAnchorItemResponse, Match3DAnchorPackResponse, Match3DCreatorConfigResponse,
|
Match3DCreatorConfigResponse, Match3DResultDraftResponse, SendMatch3DAgentMessageRequest,
|
||||||
Match3DResultDraftResponse, SendMatch3DAgentMessageRequest,
|
|
||||||
},
|
},
|
||||||
match3d_runtime::{
|
match3d_runtime::{
|
||||||
ClickMatch3DItemRequest, Match3DClickConfirmationResponse, Match3DClickResponse,
|
ClickMatch3DItemRequest, Match3DClickConfirmationResponse, Match3DClickResponse,
|
||||||
@@ -41,12 +40,11 @@ use spacetime_client::{
|
|||||||
Match3DAgentMessageFinalizeRecordInput, Match3DAgentMessageRecord,
|
Match3DAgentMessageFinalizeRecordInput, Match3DAgentMessageRecord,
|
||||||
Match3DAgentMessageSubmitRecordInput, Match3DAgentSessionCreateRecordInput,
|
Match3DAgentMessageSubmitRecordInput, Match3DAgentSessionCreateRecordInput,
|
||||||
Match3DAgentSessionRecord, Match3DAnchorItemRecord, Match3DAnchorPackRecord,
|
Match3DAgentSessionRecord, Match3DAnchorItemRecord, Match3DAnchorPackRecord,
|
||||||
Match3DClickConfirmationRecord, Match3DCompileDraftRecordInput,
|
Match3DClickConfirmationRecord, Match3DCompileDraftRecordInput, Match3DCreatorConfigRecord,
|
||||||
Match3DCreatorConfigRecord, Match3DItemSnapshotRecord, Match3DResultDraftRecord,
|
Match3DItemSnapshotRecord, Match3DResultDraftRecord, Match3DRunClickRecordInput,
|
||||||
Match3DRunClickRecordInput, Match3DRunRecord, Match3DRunRestartRecordInput,
|
Match3DRunRecord, Match3DRunRestartRecordInput, Match3DRunStartRecordInput,
|
||||||
Match3DRunStartRecordInput, Match3DRunStopRecordInput, Match3DRunTimeUpRecordInput,
|
Match3DRunStopRecordInput, Match3DRunTimeUpRecordInput, Match3DTraySlotRecord,
|
||||||
Match3DTraySlotRecord, Match3DWorkProfileRecord, Match3DWorkUpdateRecordInput,
|
Match3DWorkProfileRecord, Match3DWorkUpdateRecordInput, SpacetimeClientError,
|
||||||
SpacetimeClientError,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@@ -938,7 +936,11 @@ fn map_match3d_run_response(run: Match3DRunRecord) -> Match3DRunSnapshotResponse
|
|||||||
clear_count: run.clear_count,
|
clear_count: run.clear_count,
|
||||||
total_item_count: run.total_item_count,
|
total_item_count: run.total_item_count,
|
||||||
cleared_item_count: run.cleared_item_count,
|
cleared_item_count: run.cleared_item_count,
|
||||||
items: run.items.into_iter().map(map_match3d_item_response).collect(),
|
items: run
|
||||||
|
.items
|
||||||
|
.into_iter()
|
||||||
|
.map(map_match3d_item_response)
|
||||||
|
.collect(),
|
||||||
tray_slots: run
|
tray_slots: run
|
||||||
.tray_slots
|
.tray_slots
|
||||||
.into_iter()
|
.into_iter()
|
||||||
@@ -1002,7 +1004,10 @@ fn build_config_from_create_request(
|
|||||||
.unwrap_or(MATCH3D_DEFAULT_THEME)
|
.unwrap_or(MATCH3D_DEFAULT_THEME)
|
||||||
.to_string(),
|
.to_string(),
|
||||||
reference_image_src: payload.reference_image_src.clone(),
|
reference_image_src: payload.reference_image_src.clone(),
|
||||||
clear_count: payload.clear_count.unwrap_or(MATCH3D_DEFAULT_CLEAR_COUNT).max(1),
|
clear_count: payload
|
||||||
|
.clear_count
|
||||||
|
.unwrap_or(MATCH3D_DEFAULT_CLEAR_COUNT)
|
||||||
|
.max(1),
|
||||||
difficulty: payload
|
difficulty: payload
|
||||||
.difficulty
|
.difficulty
|
||||||
.unwrap_or(MATCH3D_DEFAULT_DIFFICULTY)
|
.unwrap_or(MATCH3D_DEFAULT_DIFFICULTY)
|
||||||
@@ -1251,7 +1256,11 @@ fn match3d_json<T>(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn match3d_bad_request(request_context: &RequestContext, provider: &str, message: &str) -> Response {
|
fn match3d_bad_request(
|
||||||
|
request_context: &RequestContext,
|
||||||
|
provider: &str,
|
||||||
|
message: &str,
|
||||||
|
) -> Response {
|
||||||
match3d_error_response(
|
match3d_error_response(
|
||||||
request_context,
|
request_context,
|
||||||
provider,
|
provider,
|
||||||
@@ -1317,9 +1326,7 @@ fn match3d_sse_json_event(event_name: &str, payload: Value) -> Result<Event, App
|
|||||||
fn match3d_sse_json_event_or_error(event_name: &str, payload: Value) -> Event {
|
fn match3d_sse_json_event_or_error(event_name: &str, payload: Value) -> Event {
|
||||||
match match3d_sse_json_event(event_name, payload) {
|
match match3d_sse_json_event(event_name, payload) {
|
||||||
Ok(event) => event,
|
Ok(event) => event,
|
||||||
Err(error) => Event::default()
|
Err(error) => Event::default().event("error").data(format!("{error:?}")),
|
||||||
.event("error")
|
|
||||||
.data(format!("{error:?}")),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,11 +36,11 @@ use shared_contracts::{
|
|||||||
},
|
},
|
||||||
puzzle_gallery::{PuzzleGalleryDetailResponse, PuzzleGalleryResponse},
|
puzzle_gallery::{PuzzleGalleryDetailResponse, PuzzleGalleryResponse},
|
||||||
puzzle_runtime::{
|
puzzle_runtime::{
|
||||||
AdvanceLocalPuzzleNextLevelRequest, PuzzleBoardSnapshotResponse, PuzzleCellPositionResponse,
|
AdvanceLocalPuzzleNextLevelRequest, PuzzleBoardSnapshotResponse,
|
||||||
PuzzleLeaderboardEntryResponse, PuzzleMergedGroupStateResponse, PuzzlePieceStateResponse,
|
PuzzleCellPositionResponse, PuzzleLeaderboardEntryResponse, PuzzleMergedGroupStateResponse,
|
||||||
PuzzleRunResponse, PuzzleRunSnapshotResponse, PuzzleRuntimeLevelSnapshotResponse,
|
PuzzlePieceStateResponse, PuzzleRunResponse, PuzzleRunSnapshotResponse,
|
||||||
StartPuzzleRunRequest, SubmitPuzzleLeaderboardRequest, SwapPuzzlePiecesRequest,
|
PuzzleRuntimeLevelSnapshotResponse, StartPuzzleRunRequest, SubmitPuzzleLeaderboardRequest,
|
||||||
UpdatePuzzleRuntimePauseRequest, UsePuzzleRuntimePropRequest,
|
SwapPuzzlePiecesRequest, UpdatePuzzleRuntimePauseRequest, UsePuzzleRuntimePropRequest,
|
||||||
},
|
},
|
||||||
puzzle_works::{
|
puzzle_works::{
|
||||||
PutPuzzleWorkRequest, PuzzleWorkDetailResponse, PuzzleWorkMutationResponse,
|
PutPuzzleWorkRequest, PuzzleWorkDetailResponse, PuzzleWorkMutationResponse,
|
||||||
@@ -57,10 +57,10 @@ use spacetime_client::{
|
|||||||
PuzzleLeaderboardEntryRecord, PuzzleLeaderboardSubmitRecordInput, PuzzleMergedGroupRecord,
|
PuzzleLeaderboardEntryRecord, PuzzleLeaderboardSubmitRecordInput, PuzzleMergedGroupRecord,
|
||||||
PuzzlePieceStateRecord, PuzzlePublishRecordInput, PuzzleResultDraftRecord,
|
PuzzlePieceStateRecord, PuzzlePublishRecordInput, PuzzleResultDraftRecord,
|
||||||
PuzzleResultPreviewBlockerRecord, PuzzleResultPreviewFindingRecord, PuzzleResultPreviewRecord,
|
PuzzleResultPreviewBlockerRecord, PuzzleResultPreviewFindingRecord, PuzzleResultPreviewRecord,
|
||||||
PuzzleRunPauseRecordInput, PuzzleRunPropRecordInput, PuzzleRunRecord, PuzzleRunStartRecordInput,
|
PuzzleRunPauseRecordInput, PuzzleRunPropRecordInput, PuzzleRunRecord,
|
||||||
PuzzleRunSwapRecordInput, PuzzleRuntimeLevelRecord, PuzzleSelectCoverImageRecordInput,
|
PuzzleRunStartRecordInput, PuzzleRunSwapRecordInput, PuzzleRuntimeLevelRecord,
|
||||||
PuzzleWorkProfileRecord, PuzzleWorkRemixRecordInput, PuzzleWorkUpsertRecordInput,
|
PuzzleSelectCoverImageRecordInput, PuzzleWorkProfileRecord, PuzzleWorkRemixRecordInput,
|
||||||
SpacetimeClientError,
|
PuzzleWorkUpsertRecordInput, SpacetimeClientError,
|
||||||
};
|
};
|
||||||
use std::convert::Infallible;
|
use std::convert::Infallible;
|
||||||
use tokio::time::sleep;
|
use tokio::time::sleep;
|
||||||
|
|||||||
@@ -24,15 +24,15 @@ pub use mapper::{
|
|||||||
CustomWorldProfileUpsertRecordInput, CustomWorldPublishGateRecord,
|
CustomWorldProfileUpsertRecordInput, CustomWorldPublishGateRecord,
|
||||||
CustomWorldPublishWorldRecord, CustomWorldPublishWorldRecordInput,
|
CustomWorldPublishWorldRecord, CustomWorldPublishWorldRecordInput,
|
||||||
CustomWorldPublishedProfileCompileRecord, CustomWorldResultPreviewBlockerRecord,
|
CustomWorldPublishedProfileCompileRecord, CustomWorldResultPreviewBlockerRecord,
|
||||||
CustomWorldSupportedActionRecord, CustomWorldWorkSummaryRecord, NpcBattleInteractionRecord,
|
CustomWorldSupportedActionRecord, CustomWorldWorkSummaryRecord,
|
||||||
Match3DAgentMessageFinalizeRecordInput, Match3DAgentMessageRecord,
|
Match3DAgentMessageFinalizeRecordInput, Match3DAgentMessageRecord,
|
||||||
Match3DAgentMessageSubmitRecordInput, Match3DAgentSessionCreateRecordInput,
|
Match3DAgentMessageSubmitRecordInput, Match3DAgentSessionCreateRecordInput,
|
||||||
Match3DAgentSessionRecord, Match3DAnchorItemRecord, Match3DAnchorPackRecord,
|
Match3DAgentSessionRecord, Match3DAnchorItemRecord, Match3DAnchorPackRecord,
|
||||||
Match3DClickConfirmationRecord, Match3DCompileDraftRecordInput,
|
Match3DClickConfirmationRecord, Match3DCompileDraftRecordInput, Match3DCreatorConfigRecord,
|
||||||
Match3DCreatorConfigRecord, Match3DItemSnapshotRecord, Match3DResultDraftRecord,
|
Match3DItemSnapshotRecord, Match3DResultDraftRecord, Match3DRunClickRecordInput,
|
||||||
Match3DRunClickRecordInput, Match3DRunRecord, Match3DRunRestartRecordInput,
|
Match3DRunRecord, Match3DRunRestartRecordInput, Match3DRunStartRecordInput,
|
||||||
Match3DRunStartRecordInput, Match3DRunStopRecordInput, Match3DRunTimeUpRecordInput,
|
Match3DRunStopRecordInput, Match3DRunTimeUpRecordInput, Match3DTraySlotRecord,
|
||||||
Match3DTraySlotRecord, Match3DWorkProfileRecord, Match3DWorkUpdateRecordInput,
|
Match3DWorkProfileRecord, Match3DWorkUpdateRecordInput, NpcBattleInteractionRecord,
|
||||||
NpcInteractionRecord, NpcStateRecord, PuzzleAgentMessageFinalizeRecordInput,
|
NpcInteractionRecord, NpcStateRecord, PuzzleAgentMessageFinalizeRecordInput,
|
||||||
PuzzleAgentMessageRecord, PuzzleAgentMessageSubmitRecordInput,
|
PuzzleAgentMessageRecord, PuzzleAgentMessageSubmitRecordInput,
|
||||||
PuzzleAgentSessionCreateRecordInput, PuzzleAgentSessionRecord,
|
PuzzleAgentSessionCreateRecordInput, PuzzleAgentSessionRecord,
|
||||||
|
|||||||
@@ -1404,8 +1404,8 @@ pub(crate) fn map_match3d_agent_session_procedure_result(
|
|||||||
"SpacetimeDB procedure 未返回 match3d agent session 快照".to_string(),
|
"SpacetimeDB procedure 未返回 match3d agent session 快照".to_string(),
|
||||||
)
|
)
|
||||||
})?;
|
})?;
|
||||||
let session = serde_json::from_str::<Match3DAgentSessionJsonRecord>(&session_json)
|
let session =
|
||||||
.map_err(|error| {
|
serde_json::from_str::<Match3DAgentSessionJsonRecord>(&session_json).map_err(|error| {
|
||||||
SpacetimeClientError::Runtime(format!("match3d session_json 非法: {error}"))
|
SpacetimeClientError::Runtime(format!("match3d session_json 非法: {error}"))
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
@@ -1424,7 +1424,9 @@ pub(crate) fn map_match3d_work_procedure_result(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let work_json = result.work_json.ok_or_else(|| {
|
let work_json = result.work_json.ok_or_else(|| {
|
||||||
SpacetimeClientError::Procedure("SpacetimeDB procedure 未返回 match3d work 快照".to_string())
|
SpacetimeClientError::Procedure(
|
||||||
|
"SpacetimeDB procedure 未返回 match3d work 快照".to_string(),
|
||||||
|
)
|
||||||
})?;
|
})?;
|
||||||
let work = serde_json::from_str::<Match3DWorkJsonRecord>(&work_json).map_err(|error| {
|
let work = serde_json::from_str::<Match3DWorkJsonRecord>(&work_json).map_err(|error| {
|
||||||
SpacetimeClientError::Runtime(format!("match3d work_json 非法: {error}"))
|
SpacetimeClientError::Runtime(format!("match3d work_json 非法: {error}"))
|
||||||
@@ -1449,8 +1451,8 @@ pub(crate) fn map_match3d_works_procedure_result(
|
|||||||
"SpacetimeDB procedure 未返回 match3d works 快照".to_string(),
|
"SpacetimeDB procedure 未返回 match3d works 快照".to_string(),
|
||||||
)
|
)
|
||||||
})?;
|
})?;
|
||||||
let items = serde_json::from_str::<Vec<Match3DWorkJsonRecord>>(&items_json)
|
let items =
|
||||||
.map_err(|error| {
|
serde_json::from_str::<Vec<Match3DWorkJsonRecord>>(&items_json).map_err(|error| {
|
||||||
SpacetimeClientError::Runtime(format!("match3d works items_json 非法: {error}"))
|
SpacetimeClientError::Runtime(format!("match3d works items_json 非法: {error}"))
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
@@ -2519,9 +2521,7 @@ fn map_match3d_agent_message_snapshot(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_match3d_work_snapshot(
|
fn map_match3d_work_snapshot(snapshot: Match3DWorkJsonRecord) -> Match3DWorkProfileRecord {
|
||||||
snapshot: Match3DWorkJsonRecord,
|
|
||||||
) -> Match3DWorkProfileRecord {
|
|
||||||
let config = map_match3d_creator_config(snapshot.config);
|
let config = map_match3d_creator_config(snapshot.config);
|
||||||
Match3DWorkProfileRecord {
|
Match3DWorkProfileRecord {
|
||||||
work_id: snapshot.profile_id.clone(),
|
work_id: snapshot.profile_id.clone(),
|
||||||
@@ -2566,7 +2566,9 @@ fn map_match3d_run_snapshot(snapshot: Match3DRunJsonRecord) -> Match3DRunRecord
|
|||||||
.map(|item| {
|
.map(|item| {
|
||||||
let tray_slot_index = tray_slots
|
let tray_slot_index = tray_slots
|
||||||
.iter()
|
.iter()
|
||||||
.find(|slot| slot.item_instance_id.as_deref() == Some(item.item_instance_id.as_str()))
|
.find(|slot| {
|
||||||
|
slot.item_instance_id.as_deref() == Some(item.item_instance_id.as_str())
|
||||||
|
})
|
||||||
.map(|slot| slot.slot_index);
|
.map(|slot| slot.slot_index);
|
||||||
map_match3d_item_snapshot(item, tray_slot_index)
|
map_match3d_item_snapshot(item, tray_slot_index)
|
||||||
})
|
})
|
||||||
@@ -2610,9 +2612,7 @@ fn map_match3d_item_snapshot(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_match3d_tray_slot_snapshot(
|
fn map_match3d_tray_slot_snapshot(snapshot: Match3DTraySlotJsonRecord) -> Match3DTraySlotRecord {
|
||||||
snapshot: Match3DTraySlotJsonRecord,
|
|
||||||
) -> Match3DTraySlotRecord {
|
|
||||||
Match3DTraySlotRecord {
|
Match3DTraySlotRecord {
|
||||||
slot_index: snapshot.slot_index,
|
slot_index: snapshot.slot_index,
|
||||||
item_instance_id: snapshot.item_instance_id,
|
item_instance_id: snapshot.item_instance_id,
|
||||||
@@ -2626,16 +2626,8 @@ fn build_match3d_anchor_pack(config: &Match3DCreatorConfigRecord) -> Match3DAnch
|
|||||||
let difficulty = config.difficulty.to_string();
|
let difficulty = config.difficulty.to_string();
|
||||||
Match3DAnchorPackRecord {
|
Match3DAnchorPackRecord {
|
||||||
theme: build_match3d_anchor_item("theme", "题材主题", config.theme_text.as_str()),
|
theme: build_match3d_anchor_item("theme", "题材主题", config.theme_text.as_str()),
|
||||||
clear_count: build_match3d_anchor_item(
|
clear_count: build_match3d_anchor_item("clearCount", "需要消除次数", clear_count.as_str()),
|
||||||
"clearCount",
|
difficulty: build_match3d_anchor_item("difficulty", "难度", difficulty.as_str()),
|
||||||
"需要消除次数",
|
|
||||||
clear_count.as_str(),
|
|
||||||
),
|
|
||||||
difficulty: build_match3d_anchor_item(
|
|
||||||
"difficulty",
|
|
||||||
"难度",
|
|
||||||
difficulty.as_str(),
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -298,9 +298,9 @@ impl SpacetimeClient {
|
|||||||
};
|
};
|
||||||
|
|
||||||
self.call_after_connect(move |connection, sender| {
|
self.call_after_connect(move |connection, sender| {
|
||||||
connection.procedures().start_match_3_d_run_then(
|
connection
|
||||||
procedure_input,
|
.procedures()
|
||||||
move |_, result| {
|
.start_match_3_d_run_then(procedure_input, move |_, result| {
|
||||||
let mapped = result
|
let mapped = result
|
||||||
.map_err(|error| SpacetimeClientError::Procedure(error.to_string()))
|
.map_err(|error| SpacetimeClientError::Procedure(error.to_string()))
|
||||||
.and_then(map_match3d_run_procedure_result)
|
.and_then(map_match3d_run_procedure_result)
|
||||||
@@ -309,8 +309,7 @@ impl SpacetimeClient {
|
|||||||
run
|
run
|
||||||
});
|
});
|
||||||
send_once(&sender, mapped);
|
send_once(&sender, mapped);
|
||||||
},
|
});
|
||||||
);
|
|
||||||
})
|
})
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
@@ -321,12 +320,15 @@ impl SpacetimeClient {
|
|||||||
owner_user_id: String,
|
owner_user_id: String,
|
||||||
) -> Result<Match3DRunRecord, SpacetimeClientError> {
|
) -> Result<Match3DRunRecord, SpacetimeClientError> {
|
||||||
let procedure_owner_user_id = owner_user_id.clone();
|
let procedure_owner_user_id = owner_user_id.clone();
|
||||||
let procedure_input = Match3DRunGetInput { run_id, owner_user_id };
|
let procedure_input = Match3DRunGetInput {
|
||||||
|
run_id,
|
||||||
|
owner_user_id,
|
||||||
|
};
|
||||||
|
|
||||||
self.call_after_connect(move |connection, sender| {
|
self.call_after_connect(move |connection, sender| {
|
||||||
connection.procedures().get_match_3_d_run_then(
|
connection
|
||||||
procedure_input,
|
.procedures()
|
||||||
move |_, result| {
|
.get_match_3_d_run_then(procedure_input, move |_, result| {
|
||||||
let mapped = result
|
let mapped = result
|
||||||
.map_err(|error| SpacetimeClientError::Procedure(error.to_string()))
|
.map_err(|error| SpacetimeClientError::Procedure(error.to_string()))
|
||||||
.and_then(map_match3d_run_procedure_result)
|
.and_then(map_match3d_run_procedure_result)
|
||||||
@@ -335,8 +337,7 @@ impl SpacetimeClient {
|
|||||||
run
|
run
|
||||||
});
|
});
|
||||||
send_once(&sender, mapped);
|
send_once(&sender, mapped);
|
||||||
},
|
});
|
||||||
);
|
|
||||||
})
|
})
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
@@ -357,9 +358,9 @@ impl SpacetimeClient {
|
|||||||
};
|
};
|
||||||
|
|
||||||
self.call_after_connect(move |connection, sender| {
|
self.call_after_connect(move |connection, sender| {
|
||||||
connection.procedures().click_match_3_d_item_then(
|
connection
|
||||||
procedure_input,
|
.procedures()
|
||||||
move |_, result| {
|
.click_match_3_d_item_then(procedure_input, move |_, result| {
|
||||||
let mapped = result
|
let mapped = result
|
||||||
.map_err(|error| SpacetimeClientError::Procedure(error.to_string()))
|
.map_err(|error| SpacetimeClientError::Procedure(error.to_string()))
|
||||||
.and_then(map_match3d_click_item_procedure_result)
|
.and_then(map_match3d_click_item_procedure_result)
|
||||||
@@ -371,8 +372,7 @@ impl SpacetimeClient {
|
|||||||
confirmation
|
confirmation
|
||||||
});
|
});
|
||||||
send_once(&sender, mapped);
|
send_once(&sender, mapped);
|
||||||
},
|
});
|
||||||
);
|
|
||||||
})
|
})
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
@@ -389,9 +389,9 @@ impl SpacetimeClient {
|
|||||||
};
|
};
|
||||||
|
|
||||||
self.call_after_connect(move |connection, sender| {
|
self.call_after_connect(move |connection, sender| {
|
||||||
connection.procedures().stop_match_3_d_run_then(
|
connection
|
||||||
procedure_input,
|
.procedures()
|
||||||
move |_, result| {
|
.stop_match_3_d_run_then(procedure_input, move |_, result| {
|
||||||
let mapped = result
|
let mapped = result
|
||||||
.map_err(|error| SpacetimeClientError::Procedure(error.to_string()))
|
.map_err(|error| SpacetimeClientError::Procedure(error.to_string()))
|
||||||
.and_then(map_match3d_run_procedure_result)
|
.and_then(map_match3d_run_procedure_result)
|
||||||
@@ -400,8 +400,7 @@ impl SpacetimeClient {
|
|||||||
run
|
run
|
||||||
});
|
});
|
||||||
send_once(&sender, mapped);
|
send_once(&sender, mapped);
|
||||||
},
|
});
|
||||||
);
|
|
||||||
})
|
})
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user