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); let mut player = Player::new(account.id, instance.id, cryps);
player.vbox.fill(); player.vbox.fill();
player_create(tx, &player, account)?; let player = player_create(tx, player, account)?;
instance.add_player(player.clone()); 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(), true => player.add_win(),
false => player.add_loss(), false => player.add_loss(),
}; };
println!("{:?}", player);
player_update(tx, player, true)?; 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); 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 player_bytes = to_vec(&player)?;
let query = " 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); 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> { 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")); return Err(err_msg("team size is 3"));
} }
let mut player = player_get(tx, account.id, Uuid::nil())?;
let cryps = params.cryp_ids let cryps = params.cryp_ids
.iter() .iter()
.map(|id| cryp_get(tx, *id, account.id)) .map(|id| cryp_get(tx, *id, account.id))
.collect::<Result<Vec<Cryp>, Error>>()?; .collect::<Result<Vec<Cryp>, Error>>()?;
player.cryps = cryps; match player_get(tx, account.id, Uuid::nil()) {
Ok(mut p) => {
player_update(tx, player, false) 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 skill::{Skill};
// use zone::{Zone, zone_create, zone_join, zone_close}; // use zone::{Zone, zone_create, zone_join, zone_close};
use spec::{Spec}; 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 instance::{instance_join, instance_ready};
use vbox::{vbox_accept, vbox_apply, vbox_discard, vbox_combine, vbox_drop}; 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 msg = from_slice::<AccountCreateMsg>(&data).or(Err(err_msg("invalid params")))?;
let account = account_create(msg.params, tx)?; let account = account_create(msg.params, tx)?;
let player = Player::new(account.id, Uuid::nil(), vec![]);
player_create(tx, &player, &account)?;
Ok(RpcResponse { Ok(RpcResponse {
method: "account_create".to_string(), method: "account_create".to_string(),
@ -198,9 +196,6 @@ impl Rpc {
let name: String = iter::repeat(()).map(|()| rng.sample(Alphanumeric)).take(8).collect(); let name: String = iter::repeat(()).map(|()| rng.sample(Alphanumeric)).take(8).collect();
cryp_spawn(CrypSpawnParams { name }, tx, &account)?; cryp_spawn(CrypSpawnParams { name }, tx, &account)?;
let player = Player::new(account.id, Uuid::nil(), vec![]);
player_create(tx, &player, &account)?;
let res = RpcResponse { let res = RpcResponse {
method: "account_create".to_string(), method: "account_create".to_string(),
params: RpcResult::Account(account), params: RpcResult::Account(account),