Upgrade deps, tokens
This commit is contained in:
parent
5437fe2771
commit
896ad2ac2f
15 changed files with 513 additions and 412 deletions
822
Cargo.lock
generated
822
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -6,6 +6,7 @@ members = [
|
|||
"runtime-interface-macro",
|
||||
"runtime",
|
||||
]
|
||||
resolver = "2"
|
||||
|
||||
[profile.release]
|
||||
lto = "fat"
|
||||
|
|
|
@ -16,7 +16,7 @@ Idées pour un jeu comme [LeekWars](https://leekwars.com) :
|
|||
|
||||
### Runtime (AI)
|
||||
|
||||
cargo build --release -p runtime
|
||||
RUSTFLAGS="-C target-cpu=mvp -C target-feature=-sign-ext" cargo build --release -p runtime --target wasm32-unknown-unknown
|
||||
|
||||
### Executor
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ edition = "2021"
|
|||
|
||||
[dependencies]
|
||||
num-traits = { version = "0.2.15", default-features = false }
|
||||
parity-scale-codec = "3.4.0"
|
||||
parity-scale-codec = "3.6.3"
|
||||
sp-runtime-interface = { version = "16.0.0", default-features = false }
|
||||
|
||||
[features]
|
||||
|
|
|
@ -3,11 +3,14 @@ use sp_runtime_interface::runtime_interface;
|
|||
|
||||
#[runtime_interface]
|
||||
pub trait Api {
|
||||
fn get_turn(sim_token: SimToken) -> Result<u32, SimError> {
|
||||
unreachable!()
|
||||
}
|
||||
fn say(msg: &str) {
|
||||
unreachable!()
|
||||
}
|
||||
fn walk(
|
||||
sim_id: SimId,
|
||||
sim_token: SimToken,
|
||||
entity_id: EntityId,
|
||||
direction: Direction,
|
||||
) -> Result<Result<Position, (Position, WalkError)>, SimError> {
|
||||
|
|
1
common/src/events.rs
Normal file
1
common/src/events.rs
Normal file
|
@ -0,0 +1 @@
|
|||
pub enum Event {}
|
|
@ -4,6 +4,7 @@
|
|||
pub mod api;
|
||||
pub mod board;
|
||||
pub mod entities;
|
||||
pub mod events;
|
||||
pub mod sim;
|
||||
|
||||
#[cfg(not(feature = "std"))]
|
||||
|
@ -21,7 +22,7 @@ pub mod prelude {
|
|||
pub use crate::{
|
||||
board::{Board, Direction, Position},
|
||||
entities::{ferris::Ferris, traits::Walker, Entity, WalkError},
|
||||
sim::{EntityId, Sim, SimError, SimId},
|
||||
sim::{EntityId, Sim, SimError, SimToken},
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -31,6 +32,6 @@ pub mod prelude {
|
|||
api::api::*,
|
||||
board::{Board, Direction, Position},
|
||||
entities::WalkError,
|
||||
sim::{EntityId, SimError, SimId},
|
||||
sim::{EntityId, SimError, SimToken},
|
||||
};
|
||||
}
|
||||
|
|
|
@ -6,9 +6,9 @@ use parity_scale_codec::{Decode, Encode};
|
|||
use std::collections::BTreeMap;
|
||||
|
||||
#[derive(Clone, Copy, Debug, Decode, Encode, Eq, Hash, Ord, PartialEq, PartialOrd)]
|
||||
pub struct SimId(pub [u8; 16]);
|
||||
pub struct SimToken(pub [u8; 16]);
|
||||
|
||||
impl sp_runtime_interface::pass_by::PassBy for SimId {
|
||||
impl sp_runtime_interface::pass_by::PassBy for SimToken {
|
||||
type PassBy = sp_runtime_interface::pass_by::Codec<Self>;
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,7 @@ mod sim {
|
|||
pub board: board::Board,
|
||||
pub entities: BTreeMap<EntityId, entities::Entity>,
|
||||
pub entity_counter: u32,
|
||||
pub turn: u32,
|
||||
}
|
||||
|
||||
impl Sim {
|
||||
|
|
|
@ -4,13 +4,13 @@ version = "0.1.0"
|
|||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
dashmap = "5.4.0"
|
||||
dashmap = "5.5.0"
|
||||
cultivar-common = { path = "../common", features = ["std"] }
|
||||
once_cell = "1.17.1"
|
||||
parity-scale-codec = "3.4.0"
|
||||
once_cell = "1.18.0"
|
||||
parity-scale-codec = "3.6.3"
|
||||
parking_lot = "0.12.1"
|
||||
sc-executor-common = "0.21.0"
|
||||
sc-executor-wasmtime = "0.21.0"
|
||||
sc-executor-common = "0.22.0"
|
||||
sc-executor-wasmtime = "0.22.0"
|
||||
sp-runtime-interface = { version = "16.0.0", default-features = false, features = ["std"] }
|
||||
sp-wasm-interface = "13.0.0"
|
||||
|
||||
|
|
|
@ -6,16 +6,24 @@ use sp_runtime_interface::runtime_interface;
|
|||
#[allow(dead_code)]
|
||||
#[runtime_interface]
|
||||
pub trait Api {
|
||||
fn get_turn(sim_token: SimToken) -> Result<u32, SimError> {
|
||||
Ok(SIMS
|
||||
.write()
|
||||
.get_sim_from_token_mut(&sim_token)
|
||||
.ok_or(SimError::SimNotFound)?
|
||||
.turn)
|
||||
}
|
||||
|
||||
fn say(msg: &str) {
|
||||
println!("{msg}");
|
||||
}
|
||||
|
||||
fn walk(
|
||||
sim_id: SimId,
|
||||
sim_token: SimToken,
|
||||
entity_id: EntityId,
|
||||
direction: Direction,
|
||||
) -> Result<Result<Position, (Position, WalkError)>, SimError> {
|
||||
if let Some(mut sim) = SIMS.write().sims.get_mut(&sim_id) {
|
||||
if let Some(mut sim) = SIMS.write().get_sim_from_token_mut(&sim_token) {
|
||||
let sim = sim.value_mut();
|
||||
if let Some(entity) = sim.entities.get_mut(&entity_id) {
|
||||
match entity {
|
||||
|
|
|
@ -14,13 +14,15 @@ fn main() {
|
|||
let mut sim = Sim {
|
||||
board: Board {
|
||||
origin: (0, 0),
|
||||
size: (4, 4),
|
||||
size: (16, 16),
|
||||
},
|
||||
entities: Default::default(),
|
||||
entity_counter: 0,
|
||||
turn: 0,
|
||||
};
|
||||
sim.add_entity(Entity::Ferris(Box::new(Ferris { position: (0, 0) })));
|
||||
sim.add_entity(Entity::Ferris(Box::new(Ferris { position: (8, 8) })));
|
||||
let sim_id = SIMS.read().new_sim(sim);
|
||||
let sim_token = SIMS.read().new_token(sim_id);
|
||||
|
||||
let ai_code = std::fs::read("target/wasm32-unknown-unknown/release/runtime.wasm")
|
||||
.expect("Cannot read runtime file");
|
||||
|
@ -42,6 +44,10 @@ fn main() {
|
|||
heap_alloc_strategy: sc_executor_common::wasm_runtime::HeapAllocStrategy::Dynamic {
|
||||
maximum_pages: Some(32),
|
||||
},
|
||||
wasm_bulk_memory: false,
|
||||
wasm_multi_value: false,
|
||||
wasm_reference_types: false,
|
||||
wasm_simd: false,
|
||||
},
|
||||
},
|
||||
)
|
||||
|
@ -49,7 +55,11 @@ fn main() {
|
|||
|
||||
let mut instance = runtime.new_instance().unwrap();
|
||||
|
||||
dbg!(instance.call_export("run", &sim_id.encode()).unwrap());
|
||||
for turn in 0usize..64 {
|
||||
instance.call_export("run", &sim_token.encode()).unwrap();
|
||||
|
||||
SIMS.write().sims.get_mut(&sim_id).unwrap().turn += 1;
|
||||
}
|
||||
|
||||
dbg!(SIMS.read().sims.remove(&sim_id));
|
||||
|
||||
|
|
|
@ -4,12 +4,17 @@ use dashmap::DashMap;
|
|||
|
||||
pub struct Sims {
|
||||
pub sims: DashMap<SimId, Sim>,
|
||||
pub tokens: DashMap<SimToken, SimId>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
pub struct SimId([u8; 16]);
|
||||
|
||||
impl Sims {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
sims: DashMap::new(),
|
||||
tokens: DashMap::new(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,4 +23,26 @@ impl Sims {
|
|||
self.sims.insert(sim_id, sim);
|
||||
sim_id
|
||||
}
|
||||
|
||||
pub fn new_token(&self, sim_id: SimId) -> SimToken {
|
||||
let sim_token = SimToken([0; 16]);
|
||||
self.tokens.insert(sim_token, sim_id);
|
||||
sim_token
|
||||
}
|
||||
|
||||
pub fn get_sim_from_token<'a>(
|
||||
&'a self,
|
||||
sim_token: &SimToken,
|
||||
) -> Option<dashmap::mapref::one::Ref<'a, SimId, Sim>> {
|
||||
self.sims.get(&*self.tokens.get(sim_token)?)
|
||||
}
|
||||
|
||||
pub fn get_sim_from_token_mut<'a>(
|
||||
&'a self,
|
||||
sim_token: &SimToken,
|
||||
) -> Option<dashmap::mapref::one::RefMut<'a, SimId, Sim>> {
|
||||
self.sims.get_mut(&*self.tokens.get(sim_token)?)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct CallContext {}
|
||||
|
|
|
@ -7,5 +7,5 @@ edition = "2021"
|
|||
proc-macro = true
|
||||
|
||||
[dependencies]
|
||||
quote = "1.0.26"
|
||||
syn = { version = "1.0.109", features = [ "full" ] }
|
||||
quote = "1.0.31"
|
||||
syn = { version = "2.0.26", features = [ "full" ] }
|
||||
|
|
|
@ -14,5 +14,5 @@ crate-type = ["cdylib", "staticlib"]
|
|||
#dlmalloc = { version = "0.2.4", features = ["global"] }
|
||||
cultivar-common = { path = "../common" }
|
||||
#cultivar-runtime-interface = { path = "../runtime-interface" }
|
||||
parity-scale-codec = "3.4.0"
|
||||
parity-scale-codec = "3.6.3"
|
||||
wee_alloc = "0.4.5"
|
||||
|
|
|
@ -15,14 +15,17 @@ static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
|
|||
pub unsafe fn run(ptr: *mut u8, len: usize) -> u64 {
|
||||
let data = unsafe { Vec::from_raw_parts(ptr, len, len) };
|
||||
|
||||
let sim_id = SimId::decode(&mut &data[..]).unwrap();
|
||||
let sim_token = SimToken::decode(&mut &data[..]).unwrap();
|
||||
|
||||
run_inner(sim_id);
|
||||
run_inner(sim_token);
|
||||
|
||||
let (ptr, len, _) = data.into_raw_parts();
|
||||
(len as u64) << 32 | ptr as u64
|
||||
}
|
||||
|
||||
fn run_inner(sim_id: SimId) {
|
||||
say(&format!("{:?}", walk(sim_id, EntityId(0), Direction::East)));
|
||||
fn run_inner(sim_token: SimToken) {
|
||||
say(&format!(
|
||||
"{:?}",
|
||||
walk(sim_token, EntityId(0), Direction::East)
|
||||
));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue