net_replication/
net_replication.rs1use ponko::*;
5
6fn main() {
7 let mut car = SnapshotStream::<Pose>::new(); let mut newest = LatestWins::new(); for n in 0u16..20 {
13 let (entity, stamp) = (7u64, UpdateStamp { epoch: 0, seq: n });
15 let sender_time = 5000.0 + f64::from(n) * 0.05; let arrived = f64::from(n) * 0.05 + 0.03; let pose = Pose::at(vec3(n as f32, 0.0, 0.0)).moving(vec3(20.0, 0.0, 0.0));
18 if newest.accept(entity, stamp) {
19 car.push(sender_time, arrived, pose);
20 }
21 }
22 let shown = car.sample(1.0).unwrap();
25 println!("{:?} at {:?}", shown.state, shown.value.position);
26 assert_eq!(shown.state, SnapshotState::Interpolated);
28 assert!((shown.value.position.x - 17.4).abs() < 0.05);
29 assert!(!newest.accept(7, UpdateStamp { epoch: 0, seq: 3 }));
30
31 let (host, guest) = (PeerId::HOST, PeerId::from_bits(1));
33 let mut vehicle = Authority::new(host); let epoch = vehicle.handoff(guest); assert_eq!(vehicle.check(host, 0), AuthorityCheck::Stale); assert_eq!(vehicle.check(guest, epoch), AuthorityCheck::Accept);
40 assert!(seq_newer(2, 65535)); let mut interest = Interest::new(InterestConfig::default());
46 let viewers = [InterestViewer {
47 peer: PeerId::HOST,
48 position: vec3(0.0, 0.0, 0.0),
49 }];
50 let world = [
51 InterestEntity {
52 id: 1,
53 position: vec3(10.0, 0.0, 0.0),
54 },
55 InterestEntity {
56 id: 2,
57 position: vec3(500.0, 0.0, 0.0),
58 },
59 ];
60 let mut sent = 0;
61 for tick in 0..8u64 {
62 interest.update(tick, &viewers, &world);
63 for change in interest.changes() {
64 println!("{:?} {:?} for peer {:?}", change.kind, change.entity, change.peer);
65 }
66 for entry in interest.due(PeerId::HOST) {
67 sent += 1; let _ = entry;
69 }
70 }
71 assert_eq!(sent, 8);
73}