|
1 | 1 | use std::sync::{Arc, Mutex}; |
2 | 2 |
|
3 | 3 | use fp_rust::{ |
4 | | - common::RawFunc, |
| 4 | + common::{RawFunc, SubscriptionFunc}, |
5 | 5 | handler::{Handler, HandlerThread}, |
6 | | - sync::CountDownLatch, |
| 6 | + sync::{CountDownLatch, Will, WillAsync}, |
7 | 7 | }; |
8 | 8 | use message::LuaMessage; |
9 | | -use rlua::{Error, Error::RuntimeError, FromLuaMulti, Function, Lua, ToLuaMulti}; |
| 9 | +use rlua::{Error, FromLuaMulti, Function, Lua, ToLuaMulti}; |
10 | 10 |
|
11 | 11 | #[derive(Clone)] |
12 | 12 | pub struct Actor { |
@@ -70,29 +70,18 @@ impl Actor { |
70 | 70 | ) -> Result<LuaMessage, Error> { |
71 | 71 | let func = Arc::new(Mutex::new(func)); |
72 | 72 |
|
73 | | - let _result: Arc<Mutex<Result<LuaMessage, Error>>> = |
74 | | - Arc::new(Mutex::new(Err(RuntimeError(String::from(""))))); |
75 | | - let result: Arc<Mutex<Result<LuaMessage, Error>>> = _result.clone(); |
76 | | - |
77 | 73 | let done_latch = CountDownLatch::new(1); |
78 | | - |
79 | 74 | let done_latch2 = done_latch.clone(); |
80 | | - _handler.lock().unwrap().post(RawFunc::new(move || { |
81 | | - { |
82 | | - (*result.lock().unwrap()) = (func.lock().unwrap().clone())(); |
83 | | - } |
84 | | - done_latch2.countdown(); |
85 | | - })); |
86 | 75 |
|
| 76 | + let mut will = |
| 77 | + WillAsync::new_with_handler(move || (func.lock().unwrap().clone())(), _handler.clone()); |
| 78 | + will.add_callback(Arc::new(Mutex::new(SubscriptionFunc::new(move |_| { |
| 79 | + done_latch2.countdown(); |
| 80 | + })))); |
| 81 | + will.start(); |
87 | 82 | done_latch.wait(); |
88 | 83 |
|
89 | | - { |
90 | | - let _result = &*_result.lock().unwrap(); |
91 | | - match _result { |
92 | | - Ok(_result) => Ok(_result.clone()), |
93 | | - Err(_err) => Err(_err.clone()), |
94 | | - } |
95 | | - } |
| 84 | + will.result().unwrap() |
96 | 85 | } |
97 | 86 |
|
98 | 87 | pub fn set_global(&self, key: &'static str, value: LuaMessage) -> Result<(), Error> { |
|
0 commit comments