diff --git a/examples/multi_thread/src/lib.rs b/examples/multi_thread/src/lib.rs index 67211e55f..8c6706fb8 100644 --- a/examples/multi_thread/src/lib.rs +++ b/examples/multi_thread/src/lib.rs @@ -30,7 +30,7 @@ where fn update(&mut self, msg: Self::Message, env: &mut Env) -> ShouldRender { match msg { Msg::SendToThread => { - env.as_ref().send(worker::Msg::RequestDataFromServer); + env.as_ref().send(worker::Request::GetDataFromServer); } } true diff --git a/examples/multi_thread/src/worker.rs b/examples/multi_thread/src/worker.rs index fb63de78e..d29fdfd9e 100644 --- a/examples/multi_thread/src/worker.rs +++ b/examples/multi_thread/src/worker.rs @@ -1,42 +1,58 @@ +use std::time::Duration; use yew::prelude::*; +// TODO use yew::services::{IntervalService, FetchService, Task}; +use yew::services::Task; +use yew::services::interval::IntervalService; use yew::services::fetch::FetchService; #[derive(Serialize, Deserialize, Debug)] -pub enum Msg { - RequestDataFromServer, +pub enum Request { + GetDataFromServer, } -impl Message for Msg { +impl Message for Request { +} + +pub enum Msg { + Updating, } pub struct Worker { + interval: IntervalService, + task: Box, fetch: FetchService, } impl Agent for Worker { type Message = Msg; - type Input = Msg; + type Input = Request; type Output = Msg; fn create(link: AgentLink) -> Self { + let mut interval = IntervalService::new(); + let duration = Duration::from_secs(3); + let callback = link.send_back(|_| Msg::Updating); + let task = interval.spawn(duration, callback); Worker { + interval, + task: Box::new(task), fetch: FetchService::new(), } } fn update(&mut self, msg: Self::Message) { + match msg { + Msg::Updating => { + info!("Tick..."); + } + } } fn handle(&mut self, msg: Self::Input) { - info!("Incoming: {:?}", msg); + info!("Request: {:?}", msg); match msg { - Msg::RequestDataFromServer => { - /* - * let callback = env.send_back(|_| ___); - * let request = ...; - * self.fetch.fetch(callback); - */ - }, + Request::GetDataFromServer => { + } } } } diff --git a/src/agent.rs b/src/agent.rs index 0fa45d39b..861c04b2a 100644 --- a/src/agent.rs +++ b/src/agent.rs @@ -327,7 +327,7 @@ impl AgentLink { } /// This method sends messages back to the component's loop. - pub fn send_back(&mut self, function: F) -> Callback + pub fn send_back(&self, function: F) -> Callback where F: Fn(IN) -> AGN::Message + 'static, {