Skip to content

Commit 41170fe

Browse files
author
DogLooksGood
committed
Change get_serving_addrs to get_serving_games
1 parent ad16105 commit 41170fe

File tree

7 files changed

+41
-9
lines changed

7 files changed

+41
-9
lines changed

transactor/src/context.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::blacklist::Blacklist;
22
use crate::component::{CheckpointBroadcastFrame, CloseReason, WrappedStorage, WrappedTransport};
33
use crate::frame::SignalFrame;
4-
use crate::game_manager::GameManager;
4+
use crate::game_manager::{ServingGame, GameManager};
55
use race_api::event::{Event, Message};
66
use race_core::error::{Error, Result};
77
use race_core::encryptor::{EncryptorT, NodePublicKeyRaw};
@@ -197,8 +197,8 @@ impl ApplicationContext {
197197
self.game_manager.send_message(game_addr, message).await
198198
}
199199

200-
pub async fn get_serving_addrs(&self) -> Vec<String> {
201-
self.game_manager.get_serving_addrs().await
200+
pub async fn get_serving_games(&self) -> Vec<ServingGame> {
201+
self.game_manager.get_serving_games().await
202202
}
203203

204204
pub async fn get_broadcast_and_backlogs(

transactor/src/game_manager.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,27 @@ use std::sync::Arc;
1111
use tokio::sync::{broadcast, mpsc, Mutex, RwLock};
1212
use tokio::task::JoinHandle;
1313
use tracing::{error, info, warn};
14+
use serde::Serialize;
1415

1516
use crate::blacklist::Blacklist;
1617
use crate::component::{CheckpointBroadcastFrame, BridgeToParent, CloseReason, WrappedStorage, WrappedTransport};
1718
use crate::frame::{EventFrame, SignalFrame};
1819
use crate::handle::Handle;
1920
use crate::utils::current_timestamp;
2021

22+
#[derive(Serialize, Clone)]
23+
#[serde(rename_all = "camelCase")]
24+
pub struct ServingGame {
25+
addr: String,
26+
bundle_addr: String,
27+
}
28+
29+
impl ServingGame {
30+
pub fn new(addr: String, bundle_addr: String) -> Self {
31+
Self { addr, bundle_addr }
32+
}
33+
}
34+
2135
pub struct GameManager {
2236
games: Arc<RwLock<HashMap<String, Handle>>>,
2337
}
@@ -30,6 +44,7 @@ impl Default for GameManager {
3044
}
3145
}
3246

47+
3348
impl GameManager {
3449
/// Load a child game
3550
pub async fn launch_sub_game(
@@ -150,9 +165,10 @@ impl GameManager {
150165
}
151166
}
152167

153-
pub async fn get_serving_addrs(&self) -> Vec<String> {
168+
pub async fn get_serving_games(&self) -> Vec<ServingGame> {
154169
let games = self.games.read().await;
155-
games.keys().cloned().collect()
170+
171+
games.iter().map(|(addr, handle)| ServingGame::new(addr.to_owned(), handle.bundle_addr())).collect()
156172
}
157173

158174
pub async fn is_game_loaded(&self, game_addr: &str) -> bool {

transactor/src/handle.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,14 @@ impl Handle {
124124
}
125125
}
126126

127+
pub fn bundle_addr(&self) -> String {
128+
match self {
129+
Handle::Transactor(h) => h.bundle_addr.clone(),
130+
Handle::Validator(h) => h.bundle_addr.clone(),
131+
Handle::SubGame(h) => h.bundle_addr.clone(),
132+
}
133+
}
134+
127135
/// Wait handle until it's shutted down. A
128136
/// [SignalFrame::RemoveGame] will be sent through `signal_tx`.
129137
pub fn wait(&mut self, signal_tx: mpsc::Sender<SignalFrame>) -> JoinHandle<CloseReason> {

transactor/src/handle/subgame.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use race_env::TransactorConfig;
1515
#[allow(dead_code)]
1616
pub struct SubGameHandle {
1717
pub(crate) addr: String,
18+
pub(crate) bundle_addr: String,
1819
pub(crate) event_bus: EventBus,
1920
pub(crate) handles: Vec<PortsHandle>,
2021
pub(crate) broadcaster: Broadcaster,
@@ -41,6 +42,8 @@ impl SubGameHandle {
4142
.await?
4243
.ok_or(Error::GameBundleNotFound)?;
4344

45+
let bundle_addr = sub_game_init.spec.bundle_addr.clone();
46+
4447
// Build an InitAccount
4548
let game_context = GameContext::try_new_with_sub_game_spec(sub_game_init)?;
4649
let access_version = game_context.access_version();
@@ -86,6 +89,7 @@ impl SubGameHandle {
8689

8790
Ok(Self {
8891
addr: format!("{}:{}", game_addr, game_id),
92+
bundle_addr,
8993
event_bus,
9094
handles: vec![broadcaster_handle, bridge_handle, event_loop_handle],
9195
broadcaster,

transactor/src/handle/transactor.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use tracing::info;
1818
#[allow(dead_code)]
1919
pub struct TransactorHandle {
2020
pub(crate) addr: String,
21+
pub(crate) bundle_addr: String,
2122
pub(crate) handles: Vec<PortsHandle>,
2223
pub(crate) event_bus: EventBus,
2324
pub(crate) broadcaster: Broadcaster,
@@ -169,6 +170,7 @@ impl TransactorHandle {
169170

170171
Ok(Self {
171172
addr: game_account.addr.clone(),
173+
bundle_addr: game_account.bundle_addr.clone(),
172174
event_bus,
173175
handles: vec![
174176
broadcaster_handle,

transactor/src/handle/validator.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use tracing::info;
1818
#[allow(dead_code)]
1919
pub struct ValidatorHandle {
2020
pub(crate) addr: String,
21+
pub(crate) bundle_addr: String,
2122
pub(crate) event_bus: EventBus,
2223
pub(crate) handles: Vec<PortsHandle>,
2324
pub(crate) bridge_parent: EventBridgeParent,
@@ -124,6 +125,7 @@ impl ValidatorHandle {
124125
event_bus.attach(&mut subscriber_handle).await;
125126
Ok(Self {
126127
addr: game_account.addr.clone(),
128+
bundle_addr: game_account.bundle_addr.clone(),
127129
event_bus,
128130
handles: vec![
129131
subscriber_handle,

transactor/src/server.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::{net::SocketAddr, sync::Arc};
22

33
use crate::context::ApplicationContext;
44
use crate::utils;
5+
use crate::game_manager::ServingGame;
56
use borsh::BorshDeserialize;
67
use hyper::Method;
78
use jsonrpsee::core::error::Error as RpcError;
@@ -82,9 +83,8 @@ fn ping(_: Params<'_>, _: &ApplicationContext) -> Result<String, RpcError> {
8283
Ok("pong".to_string())
8384
}
8485

85-
86-
async fn get_serving_addrs(_: Params<'_>, context: Arc<ApplicationContext>) -> Result<Vec<String>, RpcError> {
87-
Ok(context.get_serving_addrs().await)
86+
async fn get_serving_games(_: Params<'_>, context: Arc<ApplicationContext>) -> Result<Vec<ServingGame>, RpcError> {
87+
Ok(context.get_serving_games().await)
8888
}
8989

9090
async fn submit_message(
@@ -344,7 +344,7 @@ pub async fn run_server(
344344
module.register_async_method("get_checkpoint", get_checkpoint)?;
345345
module.register_async_method("get_latest_checkpoints", get_latest_checkpoints)?;
346346
module.register_async_method("attach_game", attach_game)?;
347-
module.register_async_method("get_serving_addrs", get_serving_addrs)?;
347+
module.register_async_method("get_serving_games", get_serving_games)?;
348348
module.register_async_method("submit_event", submit_event)?;
349349
module.register_async_method("submit_message", submit_message)?;
350350
module.register_async_method("exit_game", exit_game)?;

0 commit comments

Comments
 (0)