Skip to content

Commit 9851151

Browse files
committed
Add workable version 001. Remain many tests.
1 parent e25c22c commit 9851151

File tree

2 files changed

+59
-57
lines changed

2 files changed

+59
-57
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "lua_actor"
3-
version = "0.1.2"
3+
version = "0.1.3"
44
license = "MIT"
55
authors = ["JunYi JohnTeee Lee <johnteee@gmail.com>"]
66
include = ["src/**/*.rs", "Cargo.toml"]

src/actor.rs

Lines changed: 58 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,13 @@
11

2-
use rlua::Value::Integer;
32
use std::sync::{Arc,Mutex};
43

54
use fp_rust::{
65
common::{RawFunc,},
76
sync::{CountDownLatch},
87
handler::{Handler,HandlerThread},
98
};
10-
use rlua::{Lua,Value,FromLua,ToLua,UserData,Error,Error::RuntimeError,Function};
11-
12-
#[derive(Clone)]
13-
pub struct TypeI8(i8);
14-
impl UserData for TypeI8 {
15-
}
16-
impl From<TypeI8> for i8 {
17-
fn from(v: TypeI8) -> i8 {
18-
v.0
19-
}
20-
}
21-
// pub struct TypeI16(i16);
22-
// impl <'lua> ToLua<'lua> for TypeI16 {
23-
//
24-
// }
25-
// pub struct TypeI32(i32);
26-
// impl <'lua> ToLua<'lua> for TypeI32 {
27-
//
28-
// }
29-
// pub struct TypeI64(i64);
30-
// impl <'lua> ToLua<'lua> for TypeI64 {
31-
//
32-
// }
33-
// pub struct TypeI128(i128);
34-
// impl <'lua> ToLua<'lua> for TypeI128 {
35-
//
36-
// }
37-
//
38-
// pub struct TypeF32(f32);
39-
// impl <'lua> ToLua<'lua> for TypeF32 {
40-
//
41-
// }
42-
// pub struct TypeF64(f64);
43-
// impl <'lua> ToLua<'lua> for TypeF64 {
44-
//
45-
// }
9+
use rlua::{Lua,Error,Error::RuntimeError,Function};
10+
use message::LuaMessage;
4611

4712
#[derive(Clone)]
4813
pub struct Actor {
@@ -74,7 +39,7 @@ impl Actor {
7439
self.lua.clone()
7540
}
7641

77-
pub fn set_global<T: UserData + Send + Sync + Clone>(&self, key: String, value: T) -> Result<(), Error> {
42+
pub fn set_global(&self, key: String, value: LuaMessage) -> Result<(), Error> {
7843
match self.handler.clone() {
7944
Some(_handler) => {
8045
let lua = self.lua.clone();
@@ -89,17 +54,17 @@ impl Actor {
8954
}
9055
}
9156
}
92-
fn _set_global<T: UserData + Send>(lua: Arc<Mutex<Lua>>, key: String, value: T) -> Result<(), Error> {
57+
fn _set_global(lua: Arc<Mutex<Lua>>, key: String, value: LuaMessage) -> Result<(), Error> {
9358
let vm = lua.lock().unwrap();
9459
let globals = vm.globals();
9560
Ok(globals.set(key, value)?)
9661
}
9762

98-
pub fn get_global<T: UserData + Send + Clone>(&self, key: String) -> Result<T, Error> {
63+
pub fn get_global(&self, key: String) -> Result<LuaMessage, Error> {
9964
match self.handler.clone() {
10065
Some(_handler) => {
101-
let _result : Arc<Mutex<Result<T, Error>>> = Arc::new(Mutex::new(Err(RuntimeError(String::from("")))));
102-
let result : Arc<Mutex<Result<T, Error>>> = _result.clone();
66+
let _result : Arc<Mutex<Result<LuaMessage, Error>>> = Arc::new(Mutex::new(Err(RuntimeError(String::from("")))));
67+
let result : Arc<Mutex<Result<LuaMessage, Error>>> = _result.clone();
10368
let lua = self.lua.clone();
10469

10570
let done_latch = CountDownLatch::new(1);
@@ -136,10 +101,10 @@ impl Actor {
136101
},
137102
}
138103
}
139-
fn _get_global<T: UserData + Clone>(lua: Arc<Mutex<Lua>>, key: String) -> Result<T, Error> {
104+
fn _get_global(lua: Arc<Mutex<Lua>>, key: String) -> Result<LuaMessage, Error> {
140105
let vm = lua.lock().unwrap();
141106
let globals = vm.globals();
142-
Ok(globals.get::<_, T>(key)?)
107+
Ok(globals.get::<_, LuaMessage>(key)?)
143108
}
144109

145110
pub fn load(&self, source: &'static str, name: Option<&'static str>) -> Result<(), Error> {
@@ -157,19 +122,19 @@ impl Actor {
157122
}
158123
}
159124
}
160-
pub fn _load(lua: Arc<Mutex<Lua>>, source: &str, name: Option<&str>) -> Result<(), Error> {
125+
fn _load(lua: Arc<Mutex<Lua>>, source: &str, name: Option<&str>) -> Result<(), Error> {
161126
let vm = lua.lock().unwrap();
162127
vm.load(source, name)?;
163128
Ok(())
164129
}
165130
// pub fn _load<'lua>(vm: &'lua Lua, source: &str, name: Option<&str>) -> Result<Function<'lua>, Error> {
166131
// Ok(vm.load(source, name)?)
167132
// }
168-
pub fn exec<T: UserData + Send + Clone>(&self, source: &'static str, name: Option<&'static str>) -> Result<T, Error> {
133+
pub fn exec(&self, source: &'static str, name: Option<&'static str>) -> Result<LuaMessage, Error> {
169134
match self.handler.clone() {
170135
Some(_handler) => {
171-
let _result : Arc<Mutex<Result<T, Error>>> = Arc::new(Mutex::new(Err(RuntimeError(String::from("")))));
172-
let result : Arc<Mutex<Result<T, Error>>> = _result.clone();
136+
let _result : Arc<Mutex<Result<LuaMessage, Error>>> = Arc::new(Mutex::new(Err(RuntimeError(String::from("")))));
137+
let result : Arc<Mutex<Result<LuaMessage, Error>>> = _result.clone();
173138
let lua = self.lua.clone();
174139

175140
let done_latch = CountDownLatch::new(1);
@@ -202,29 +167,66 @@ impl Actor {
202167
}
203168
}
204169
}
205-
pub fn _exec<T: UserData + Clone>(lua: Arc<Mutex<Lua>>, source: &str, name: Option<&str>) -> Result<T, Error> {
170+
fn _exec(lua: Arc<Mutex<Lua>>, source: &str, name: Option<&str>) -> Result<LuaMessage, Error> {
206171
let vm = lua.lock().unwrap();
207172
Ok(vm.exec(source, name)?)
208173
}
209174

210-
pub fn _call<T: UserData + Clone, X: UserData + Send>(lua: Arc<Mutex<Lua>>, name: String, args: X) -> Result<T, Error> {
175+
pub fn call(&self, name: String, args: LuaMessage) -> Result<LuaMessage, Error> {
176+
match self.handler.clone() {
177+
Some(_handler) => {
178+
let _result : Arc<Mutex<Result<LuaMessage, Error>>> = Arc::new(Mutex::new(Err(RuntimeError(String::from("")))));
179+
let result : Arc<Mutex<Result<LuaMessage, Error>>> = _result.clone();
180+
let lua = self.lua.clone();
181+
182+
let done_latch = CountDownLatch::new(1);
183+
184+
let done_latch2 = done_latch.clone();
185+
_handler.lock().unwrap().post(RawFunc::new(move ||{
186+
let lua = lua.clone();
187+
{
188+
(*result.lock().unwrap()) = Self::_call(lua, name.clone(), args.clone());
189+
}
190+
done_latch2.countdown();
191+
}));
192+
193+
done_latch.wait();
194+
195+
{
196+
let _result = &*_result.lock().unwrap();
197+
match _result {
198+
Ok(_result) => {
199+
Ok(_result.clone())
200+
},
201+
Err(_err) => {
202+
Err(_err.clone())
203+
}
204+
}
205+
}
206+
},
207+
None => {
208+
Self::_call(self.lua.clone(), name, args)
209+
}
210+
}
211+
}
212+
pub fn _call(lua: Arc<Mutex<Lua>>, name: String, args: LuaMessage) -> Result<LuaMessage, Error> {
211213
let vm = lua.lock().unwrap();
212214
let func: Function = vm.globals().get(name)?;
213-
Ok(func.call::<_, T>(args)?)
215+
Ok(func.call::<_, LuaMessage>(args)?)
214216
}
215217
}
216218

217219
#[test]
218-
fn test_handler_new() {
220+
fn test_actor_new() {
219221
use std::time;
220222
use std::thread;
221223

222224
let act = Actor::new_with_handler(None);
223225

224-
let i: TypeI8 = act.exec(r#"
225-
let i = 1
226-
return 1
227-
"#, None).ok().unwrap_or(TypeI8(0));
226+
// let i: LuaMessage = act.exec(r#"
227+
// let i = 1
228+
// return "1"
229+
// "#, None).ok().unwrap_or(LuaMessage::String(String::from("")));
228230
// assert_eq!(30, i8::from(i));
229231

230232
thread::sleep(time::Duration::from_millis(100));

0 commit comments

Comments
 (0)