chiark / gitweb /
cmdlistener: pieceid lookup commands
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 4 Apr 2021 15:19:06 +0000 (16:19 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 4 Apr 2021 17:50:05 +0000 (18:50 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
daemon/cmdlistener.rs
src/commands.rs

index 14aecf75f6b52b3ce1dbda56d6f4b57e9034600d..d40fb4ab5d2638de3dac82108bd3d6855d50fa3b 100644 (file)
@@ -426,6 +426,25 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>(
        None, ig)
     },
 
+    MGI::PieceIdLookupFwd { player, piece } => {
+      let superuser = cs.superuser.ok_or(ME::SuperuserAuthorisationRequired)?;
+      let ig = ig.by_mut(superuser.into());
+      let gpl = ig.gs.players.byid(player)?;
+      let vpid = gpl.idmap.fwd(piece);
+      (U{ pcs: vec![], log: vec![], raw: None },
+       MGR::VisiblePieceId(vpid),
+       None, ig)
+    },
+    MGI::PieceIdLookupRev { player, vpid } => {
+      let superuser = cs.superuser.ok_or(ME::SuperuserAuthorisationRequired)?;
+      let ig = ig.by_mut(superuser.into());
+      let gpl = ig.gs.players.byid(player)?;
+      let piece = gpl.idmap.rev(vpid);
+      (U{ pcs: vec![], log: vec![], raw: None },
+       MGR::InternalPieceId(piece),
+       None, ig)
+    },
+
     MGI::ListPieces => readonly(cs,ag,ig, &[TP::ViewNotSecret], |ig|{
       let ioccults = &ig.ioccults;
       let pieces = ig.gs.pieces.iter().filter_map(
index 8af875d952d250df834f522231b012dbc8292d51..36acc155cb2652b94b4c8f7b9a79170aea48e168 100644 (file)
@@ -78,11 +78,16 @@ pub enum MgmtResponse {
 pub enum MgmtGameInstruction {
   Noop,
   Info,
-  /// For testing, mostly.
-  Synch,
   SetTableSize(Pos),
   SetTableColour(ColourSpec),
 
+  /// For testing, mostly.
+  Synch,
+  /// For testing only
+  PieceIdLookupFwd { piece: PieceId, player: PlayerId, },
+  /// For testing only
+  PieceIdLookupRev { vpid: VisiblePieceId, player: PlayerId, },
+
   ListPieces,
   AddPieces(PiecesSpec),
   DeletePiece(PieceId),
@@ -116,6 +121,9 @@ pub enum MgmtGameResponse {
   Info(MgmtGameResponseGameInfo),
   Synch(Generation),
 
+  InternalPieceId(Option<PieceId>),
+  VisiblePieceId(Option<VisiblePieceId>),
+
   Pieces {
     pieces: Vec<MgmtGamePieceInfo>,
     pcaliases: BTreeSet<String>,