Skip to content

Commit 7716d13

Browse files
author
DogLooksGood
committed
Update records header
1 parent a5e7fac commit 7716d13

File tree

9 files changed

+75
-21
lines changed

9 files changed

+75
-21
lines changed

core/src/context.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,10 @@ impl GameContext {
491491
&self.nodes
492492
}
493493

494+
pub fn get_game_spec(&self) -> &GameSpec {
495+
&self.spec
496+
}
497+
494498
pub fn game_addr(&self) -> &str {
495499
&self.spec.game_addr
496500
}
@@ -1187,6 +1191,10 @@ impl GameContext {
11871191
self.sub_games.clear();
11881192
self.checkpoint.close_sub_data();
11891193
}
1194+
1195+
pub fn get_balances(&self) -> &[PlayerBalance] {
1196+
&self.balances
1197+
}
11901198
}
11911199

11921200
impl Default for GameContext {

event-record/src/lib.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@
66
//! All content are serialized with borsh & base64.
77
88
use borsh::{BorshSerialize, BorshDeserialize};
9-
use race_core::context::Node;
9+
use race_core::{context::Node, types::{PlayerBalance, GameSpec, EntryType}};
1010
use race_api::event::Event;
1111

1212
#[derive(Default, Debug, BorshSerialize, BorshDeserialize)]
1313
pub struct RecordsHeader {
14-
pub game_addr: String,
15-
pub game_id: usize,
16-
pub bundle_addr: String,
14+
pub spec: GameSpec,
1715
pub chain: String, // solana, sui, facade
16+
pub init_data: Vec<u8>,
17+
pub entry_type: EntryType,
1818
}
1919

2020
impl RecordsHeader {
21-
pub fn new(game_addr: String, game_id: usize, bundle_addr: String, chain: String) -> Self {
22-
Self { game_addr, game_id, bundle_addr, chain }
21+
pub fn new(spec: GameSpec, init_data: Vec<u8>, entry_type: EntryType, chain: String) -> Self {
22+
Self { spec, init_data, entry_type, chain }
2323
}
2424
}
2525

@@ -41,6 +41,9 @@ pub enum Record {
4141
Checkpoint {
4242
state: Vec<u8>,
4343
nodes: Vec<Node>,
44+
balances: Vec<PlayerBalance>,
45+
access_version: u64,
46+
settle_version: u64,
4447
},
4548
Event {
4649
event: Event,
@@ -49,9 +52,15 @@ pub enum Record {
4952
}
5053

5154
impl Record {
52-
pub fn checkpoint(state: Vec<u8>, nodes: Vec<Node>) -> Self {
55+
pub fn checkpoint(
56+
state: Vec<u8>,
57+
nodes: Vec<Node>,
58+
balances: Vec<PlayerBalance>,
59+
access_version: u64,
60+
settle_version: u64
61+
) -> Self {
5362
Self::Checkpoint {
54-
state, nodes,
63+
state, nodes, balances, access_version, settle_version
5564
}
5665
}
5766

replayer/src/handler.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//! We need a handler for event handling.
2+
3+
use std::sync::Arc;
4+
use race_core::types::accounts::GameBundle;
5+
use race_encryptor::Encryptor;
6+
use race_transactor_components::{
7+
event_loop::EventLoop,
8+
event_bus::EventBus,
9+
wrapped_handler::WrappedHandler,
10+
};
11+
12+
struct EventHandler {
13+
14+
}
15+
16+
17+
impl EventHandler {
18+
pub fn new(game_bundle: &GameBundle, records: Vec<Record>) -> Result<Self, ReplayerError> {
19+
let encryptor = Arc::new(Encryptor::default());
20+
let handler = WrappedHandler::load_by_bundle(game_bundle, encryptor)?;
21+
22+
}
23+
}

replayer/src/ui.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ pub fn render_controller_ui(context: Arc<ReplayerContext>, header: RecordsHeader
8585
])
8686
.split(f.size());
8787

88-
let header_spans = Text::from(format!("CHAIN: {}\nGAME: {}#{}\nBUNDLE: {}", header.chain, header.game_addr, header.game_id, header.bundle_addr));
88+
let header_spans = Text::from(format!("CHAIN: {}\nGAME: {}#{}\nBUNDLE: {}", header.chain, header.spec.game_addr, header.spec.game_id, header.spec.bundle_addr));
8989

9090
let paragraph = Paragraph::new(header_spans)
9191
.block(Block::default().title("Info").borders(Borders::ALL))
@@ -96,7 +96,7 @@ pub fn render_controller_ui(context: Arc<ReplayerContext>, header: RecordsHeader
9696
let items: Vec<ListItem> = records_view_state.records.iter().map(|r| ListItem::new(format!("{}", r))).collect();
9797

9898
let list = List::new(items)
99-
.block(Block::default().title("events").borders(Borders::ALL))
99+
.block(Block::default().title("Events").borders(Borders::ALL))
100100
.style(Style::default().fg(Color::White))
101101
.highlight_style(Style::default().fg(Color::Green));
102102

transactor-components/src/broadcaster.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ impl Component<ConsumerPorts, BroadcasterContext> for Broadcaster {
228228
checkpoint,
229229
state_sha,
230230
nodes,
231+
..
231232
} => {
232233
info!(
233234
"{} Create new history group (via Checkpoint) with access_version = {}, settle_version = {}",

transactor-components/src/event_loop/event_handler.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ async fn send_checkpoint(
5050
settle_version: game_context.settle_version(),
5151
state_sha: game_context.state_sha(),
5252
nodes: game_context.get_nodes().to_owned(),
53+
balances: game_context.get_balances().to_owned(),
5354
})
5455
.await;
5556
}

transactor-components/src/recorder.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
use async_trait::async_trait;
22
use borsh::BorshSerialize;
3+
use race_core::types::GameSpec;
34
use race_transactor_frames::EventFrame;
45
use race_event_record::{RecordsHeader, Record};
56
use race_core::chain::ChainType;
7+
use race_core::types::EntryType;
68
use std::fs::{File, create_dir};
79
use std::io::{Write, BufWriter};
810
use std::path::{Path, PathBuf};
@@ -86,15 +88,16 @@ pub struct RecorderContext {
8688

8789
impl Recorder {
8890
pub fn init(
89-
game_addr: String,
90-
game_id: usize,
91-
bundle_addr: String,
91+
spec: GameSpec,
92+
init_data: Vec<u8>,
93+
entry_type: EntryType,
9294
chain: ChainType,
9395
in_mem: bool,
9496
) -> (Self, RecorderContext) {
9597
let writer: Arc<Mutex<dyn RecordWriter + Send + Sync>>;
98+
let game_id = spec.game_id;
9699

97-
let header = RecordsHeader::new(game_addr.clone(), game_id, bundle_addr, chain.to_string());
100+
let header = RecordsHeader::new(spec.clone(), init_data, entry_type, chain.to_string());
98101

99102
if in_mem {
100103
writer = Arc::new(Mutex::new(InMemoryRecordWriter::new(header)))
@@ -103,10 +106,10 @@ impl Recorder {
103106
if !dir.exists() {
104107
create_dir(dir).expect("Failed to create records directory");
105108
}
106-
let file_path = if game_id == 0 {
107-
format!("records/{}", game_addr)
109+
let file_path = if spec.game_id == 0 {
110+
format!("records/{}", spec.game_addr)
108111
} else {
109-
format!("records/{}_{}", game_addr, game_id)
112+
format!("records/{}_{}", spec.game_addr, spec.game_id)
110113
};
111114
writer = Arc::new(Mutex::new(FileRecordWriter::try_new(file_path.into(), header).expect("Fail to create record writer")))
112115
}
@@ -154,13 +157,16 @@ impl Component<ConsumerPorts, RecorderContext> for Recorder {
154157
}
155158

156159
EventFrame::Checkpoint {
160+
access_version,
161+
settle_version,
157162
checkpoint,
158163
nodes,
164+
balances,
159165
..
160166
} => {
161167
if let Some(state) = checkpoint.get_data(game_id) {
162168
let record = Record::Checkpoint {
163-
state, nodes
169+
state, nodes, access_version, settle_version, balances,
164170
};
165171

166172
writer.write(record);

transactor-frames/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use race_api::event::{Event, Message};
44
use race_core::{
55
checkpoint::{Checkpoint, VersionedData},
66
context::{GameContext, SettleDetails, SubGameInit, Node},
7-
types::{ClientMode, PlayerDeposit, PlayerJoin, ServerJoin, TxState, VoteType},
7+
types::{PlayerBalance, ClientMode, PlayerDeposit, PlayerJoin, ServerJoin, TxState, VoteType},
88
};
99

1010
#[derive(Debug)]
@@ -67,6 +67,7 @@ pub enum EventFrame {
6767
Checkpoint {
6868
checkpoint: Checkpoint,
6969
nodes: Vec<Node>,
70+
balances: Vec<PlayerBalance>,
7071
access_version: u64,
7172
settle_version: u64,
7273
state_sha: String,

transactor/src/handle/transactor.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,13 @@ impl TransactorHandle {
115115
let (bridge, bridge_ctx) = EventBridgeParent::init(signal_tx);
116116
let mut bridge_handle = bridge.start(&game_account.addr, bridge_ctx);
117117

118-
let (recorder, recorder_ctx) = Recorder::init(game_account.addr.clone(), 0,
119-
game_account.bundle_addr.clone(), config.chain.as_str().into(), false);
118+
let (recorder, recorder_ctx) = Recorder::init(
119+
game_context.get_game_spec().to_owned(),
120+
game_account.data.clone(),
121+
game_account.entry_type.clone(),
122+
config.chain.as_str().into(),
123+
false);
124+
120125
let mut recorder_handle = recorder.start(&game_account.addr, recorder_ctx);
121126

122127
let (event_loop, event_loop_ctx) = EventLoop::init(

0 commit comments

Comments
 (0)