global join better

This commit is contained in:
ntr 2019-03-14 17:11:43 +11:00
parent 61a2a7500b
commit cf3dbaa6e9
3 changed files with 13 additions and 15 deletions

View File

@ -402,7 +402,7 @@ pub fn instance_join(params: InstanceJoinParams, tx: &mut Transaction, account:
let mut player = Player::new(account.id, instance.id, cryps);
player.vbox.fill();
player_create(tx, &player, account)?;
let player = player_create(tx, player, account)?;
instance.add_player(player.clone());
@ -475,7 +475,6 @@ pub fn instance_game_finished(tx: &mut Transaction, game: &Game, instance_id: Uu
true => player.add_win(),
false => player.add_loss(),
};
println!("{:?}", player);
player_update(tx, player, true)?;
},
}

View File

@ -94,7 +94,7 @@ pub fn player_get(tx: &mut Transaction, account_id: Uuid, instance_id: Uuid) ->
return Ok(data);
}
pub fn player_create(tx: &mut Transaction, player: &Player, account: &Account) -> Result<(), Error> {
pub fn player_create(tx: &mut Transaction, player: Player, account: &Account) -> Result<Player, Error> {
let player_bytes = to_vec(&player)?;
let query = "
@ -110,7 +110,7 @@ pub fn player_create(tx: &mut Transaction, player: &Player, account: &Account) -
println!("wrote player {:} joined instance: {:}", account.name, player.instance);
return Ok(());
return Ok(player);
}
pub fn player_update(tx: &mut Transaction, player: Player, ignore_phase: bool) -> Result<Player, Error> {
@ -168,14 +168,18 @@ pub fn player_cryps_set(params: PlayerCrypsSetParams, tx: &mut Transaction, acco
return Err(err_msg("team size is 3"));
}
let mut player = player_get(tx, account.id, Uuid::nil())?;
let cryps = params.cryp_ids
.iter()
.map(|id| cryp_get(tx, *id, account.id))
.collect::<Result<Vec<Cryp>, Error>>()?;
player.cryps = cryps;
player_update(tx, player, false)
match player_get(tx, account.id, Uuid::nil()) {
Ok(mut p) => {
p.cryps = cryps;
player_update(tx, p, false)
},
Err(_) => {
return player_create(tx, Player::new(account.id, Uuid::nil(), cryps), &account)
}
}
}

View File

@ -21,7 +21,7 @@ use account::{Account, account_create, account_login, account_from_token, accoun
use skill::{Skill};
// use zone::{Zone, zone_create, zone_join, zone_close};
use spec::{Spec};
use player::{player_state, player_create, player_cryps_set, Player};
use player::{player_state, player_cryps_set, Player};
use instance::{instance_join, instance_ready};
use vbox::{vbox_accept, vbox_apply, vbox_discard, vbox_combine, vbox_drop};
@ -163,8 +163,6 @@ impl Rpc {
let msg = from_slice::<AccountCreateMsg>(&data).or(Err(err_msg("invalid params")))?;
let account = account_create(msg.params, tx)?;
let player = Player::new(account.id, Uuid::nil(), vec![]);
player_create(tx, &player, &account)?;
Ok(RpcResponse {
method: "account_create".to_string(),
@ -198,9 +196,6 @@ impl Rpc {
let name: String = iter::repeat(()).map(|()| rng.sample(Alphanumeric)).take(8).collect();
cryp_spawn(CrypSpawnParams { name }, tx, &account)?;
let player = Player::new(account.id, Uuid::nil(), vec![]);
player_create(tx, &player, &account)?;
let res = RpcResponse {
method: "account_create".to_string(),
params: RpcResult::Account(account),