exercises

Log | Files | Refs | README

basic_actor.rs (689B)


      1 use tokio::sync::{mpsc::Receiver, oneshot};
      2 
      3 pub struct Message {
      4     pub value: i64,
      5 }
      6 
      7 pub async fn basic_actor(mut rx: Receiver<Message>) {
      8     let mut state = 0;
      9 
     10     while let Some(msg) = rx.recv().await {
     11         state += msg.value;
     12         println!("Received: {}", msg.value);
     13         println!("State: {}", state);
     14     }
     15 }
     16 
     17 pub struct RespMessage {
     18     pub value: i64,
     19     pub responder: oneshot::Sender<i64>,
     20 }
     21 
     22 pub async fn resp_actor(mut rx: Receiver<RespMessage>) {
     23     let mut state = 0;
     24 
     25     while let Some(msg) = rx.recv().await {
     26         state += msg.value;
     27         if msg.responder.send(state).is_err() {
     28             eprintln!("Failed to send response");
     29         }
     30     }
     31 }