11
2- use rlua:: Value :: Integer ;
32use std:: sync:: { Arc , Mutex } ;
43
54use 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 ) ]
4813pub 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