My personal project and infrastructure archive
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
nomicon/games/rstnode/rst-core/src/wire/update.rs

72 lines
1.9 KiB

//! Update to the game state
use super::UserId;
use crate::data::{NodeId, PacketId, Player, Upgrade};
use serde::{Deserialize, Serialize};
/// An update provided by the game server
#[derive(Serialize, Deserialize)]
pub enum Update {
/// Update made to a node
Node(NodeUpdate),
/// Update made to a link
Link(LinkUpdate),
/// Update made to a packet
Packet(PacketUpdate),
/// Update made to the user set
User(UserUpdate),
/// An error occured, can be non-fatal
Error(UpdateError),
}
/// Update made to a node
#[derive(Serialize, Deserialize)]
pub enum NodeUpdate {
/// The node owner changed
Owner(Player),
/// Represent a new upgrade state
Level { node: NodeId, new: Upgrade },
/// A new packet was consumed from a link
NewPacket(PacketId),
/// Remove a packet from the node buffer
SentPacket(PacketId),
/// Dropped a packet
DropPacket(PacketId),
}
/// Update made to a link
#[derive(Serialize, Deserialize)]
pub enum LinkUpdate {
/// Take a packet from a node's buffer
TakePacket(PacketId),
/// Give a packet to a node's buffer
GivePacket(PacketId),
}
/// Update made to a packet
#[derive(Serialize, Deserialize)]
pub enum PacketUpdate {
/// Advance a packet along one step along the link
Increment(PacketId),
}
/// Update made to the user set
#[derive(Serialize, Deserialize)]
pub enum UserUpdate {
UserLeft(UserId),
}
/// An error occured, can be non-fatal
#[derive(Serialize, Deserialize)]
pub enum UpdateError {
/// You are the last user in the match
LastUser,
/// The game crashed, so kick all
GameCrashed,
/// The server's time was behind the client time
///
/// This means that newer events will be dropped from the map
/// state. This should prompt the client to warn the user this
/// has happened, then resync the time of the game states.
TimeAheadServer,
}