Handle all available messages
This commit is contained in:
parent
ba7737671e
commit
c005a4dbb9
1 changed files with 37 additions and 10 deletions
47
src/net.rs
47
src/net.rs
|
@ -4,7 +4,7 @@ use std::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use bevy::{prelude::*, tasks::futures_lite::io};
|
use bevy::{prelude::*, tasks::futures_lite::io};
|
||||||
use crossbeam_channel::{Receiver, Sender, unbounded};
|
use crossbeam_channel::{Receiver, Sender, TrySendError, unbounded};
|
||||||
|
|
||||||
use crate::game::seed::Seed;
|
use crate::game::seed::Seed;
|
||||||
|
|
||||||
|
@ -68,8 +68,35 @@ fn setup_socket(port: u16) -> Result<(Sender<NetworkMessage>, Receiver<NetworkMe
|
||||||
#[derive(Resource)]
|
#[derive(Resource)]
|
||||||
pub struct NetworkSend(Sender<NetworkMessage>);
|
pub struct NetworkSend(Sender<NetworkMessage>);
|
||||||
|
|
||||||
#[derive(Resource)]
|
impl NetworkSend {
|
||||||
pub struct NetworkReceive(Receiver<NetworkMessage>);
|
/// Send the message, erroring if the queue is full or disconnected
|
||||||
|
pub fn send(
|
||||||
|
&self,
|
||||||
|
value: Vec<u8>,
|
||||||
|
address: SocketAddr,
|
||||||
|
) -> Result<(), TrySendError<NetworkMessage>> {
|
||||||
|
self.0.try_send((value, address))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Resource, Clone)]
|
||||||
|
struct NetworkReceive(Receiver<NetworkMessage>);
|
||||||
|
|
||||||
|
impl NetworkReceive {
|
||||||
|
fn iter(&self) -> Iter {
|
||||||
|
Iter(self.0.clone())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Iter(Receiver<NetworkMessage>);
|
||||||
|
|
||||||
|
impl Iterator for Iter {
|
||||||
|
type Item = NetworkMessage;
|
||||||
|
|
||||||
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
self.0.try_recv().ok()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn handle_network_io(
|
fn handle_network_io(
|
||||||
receive: Res<NetworkReceive>,
|
receive: Res<NetworkReceive>,
|
||||||
|
@ -77,14 +104,14 @@ fn handle_network_io(
|
||||||
seed: Option<Res<Seed>>,
|
seed: Option<Res<Seed>>,
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
) -> Result {
|
) -> Result {
|
||||||
let Ok((message, address)) = receive.0.try_recv() else {
|
for (message, address) in receive.iter() {
|
||||||
return Ok(());
|
if let Some(ref value) = seed {
|
||||||
};
|
send.send((**value).into(), address)?;
|
||||||
if let Some(value) = seed {
|
} else {
|
||||||
send.0.try_send(((*value).into(), address))?;
|
commands.insert_resource::<Seed>(message.try_into()?);
|
||||||
} else {
|
}
|
||||||
commands.insert_resource::<Seed>(message.try_into()?);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue