|
|
@@ -1,5 +1,5 @@ |
|
|
|
use actix::prelude::*; |
|
|
|
use actix::ActorContext; |
|
|
|
use ::actix::prelude::*; |
|
|
|
use ::actix::ActorContext; |
|
|
|
use rlua::Error as LuaError; |
|
|
|
use rlua::{FromLua, Function, Lua, MultiValue, ToLua, Value}; |
|
|
|
|
|
|
@@ -9,9 +9,9 @@ use std::str; |
|
|
|
use std::time::Duration; |
|
|
|
use uuid::Uuid; |
|
|
|
|
|
|
|
use message::LuaMessage; |
|
|
|
use crate::message::LuaMessage; |
|
|
|
|
|
|
|
use builder::LuaActorBuilder; |
|
|
|
use crate::builder::LuaActorBuilder; |
|
|
|
|
|
|
|
/// Top level struct which holds a lua state for itself. |
|
|
|
/// |
|
|
@@ -206,7 +206,8 @@ fn invoke( |
|
|
|
recipient_name, |
|
|
|
msg, |
|
|
|
cb_thread_id, |
|
|
|
}).unwrap(); |
|
|
|
}) |
|
|
|
.unwrap(); |
|
|
|
|
|
|
|
Ok(()) |
|
|
|
}, |
|
|
@@ -339,7 +340,8 @@ impl Handler<SendAttempt> for LuaActor { |
|
|
|
} |
|
|
|
}; |
|
|
|
actix::fut::ok(()) |
|
|
|
}).wait(ctx); |
|
|
|
}) |
|
|
|
.wait(ctx); |
|
|
|
|
|
|
|
LuaMessage::Nil |
|
|
|
} |
|
|
@@ -353,7 +355,7 @@ mod tests { |
|
|
|
use std::time::Duration; |
|
|
|
use tokio::prelude::Future; |
|
|
|
|
|
|
|
use builder::LuaActorBuilder; |
|
|
|
use crate::builder::LuaActorBuilder; |
|
|
|
|
|
|
|
fn lua_actor_with_handle(script: &str) -> LuaActor { |
|
|
|
LuaActorBuilder::new() |
|
|
@@ -373,7 +375,8 @@ mod tests { |
|
|
|
l.map(|res| { |
|
|
|
assert_eq!(res, LuaMessage::from(2)); |
|
|
|
System::current().stop(); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
); |
|
|
|
|
|
|
|
system.run(); |
|
|
@@ -401,14 +404,16 @@ mod tests { |
|
|
|
error("foo") |
|
|
|
print("after") |
|
|
|
"#, |
|
|
|
).start(); |
|
|
|
) |
|
|
|
.start(); |
|
|
|
|
|
|
|
let l = lua_addr.send(LuaMessage::from(0)); |
|
|
|
Arbiter::spawn( |
|
|
|
l.map(|_| { |
|
|
|
// it should panic |
|
|
|
System::current().stop(); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
); |
|
|
|
|
|
|
|
system.run(); |
|
|
@@ -422,7 +427,8 @@ mod tests { |
|
|
|
r#" |
|
|
|
return {x = 1} |
|
|
|
"#, |
|
|
|
).start(); |
|
|
|
) |
|
|
|
.start(); |
|
|
|
|
|
|
|
let l = lua_addr.send(LuaMessage::from(3)); |
|
|
|
Arbiter::spawn( |
|
|
@@ -432,7 +438,8 @@ mod tests { |
|
|
|
|
|
|
|
assert_eq!(res, LuaMessage::from(t)); |
|
|
|
System::current().stop(); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
); |
|
|
|
|
|
|
|
system.run(); |
|
|
@@ -449,7 +456,8 @@ mod tests { |
|
|
|
ctx.state.x = ctx.state.x + 1 |
|
|
|
return ctx.state.x |
|
|
|
"#, |
|
|
|
).start(); |
|
|
|
) |
|
|
|
.start(); |
|
|
|
|
|
|
|
let l = lua_addr.send(LuaMessage::Nil); |
|
|
|
Arbiter::spawn( |
|
|
@@ -460,9 +468,11 @@ mod tests { |
|
|
|
l2.map(|res| { |
|
|
|
assert_eq!(res, LuaMessage::from(2)); |
|
|
|
System::current().stop(); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
); |
|
|
|
|
|
|
|
system.run(); |
|
|
@@ -477,15 +487,17 @@ mod tests { |
|
|
|
r#" |
|
|
|
ctx.notify(100) |
|
|
|
"#, |
|
|
|
).on_handle_with_lua( |
|
|
|
) |
|
|
|
.on_handle_with_lua( |
|
|
|
r#" |
|
|
|
if ctx.msg == 100 then |
|
|
|
ctx.state.notified = ctx.msg |
|
|
|
end |
|
|
|
|
|
|
|
return ctx.msg + ctx.state.notified |
|
|
|
"#, |
|
|
|
).build() |
|
|
|
) |
|
|
|
.build() |
|
|
|
.unwrap() |
|
|
|
.start(); |
|
|
|
|
|
|
@@ -495,7 +507,8 @@ mod tests { |
|
|
|
l.map(|res| { |
|
|
|
assert_eq!(res, LuaMessage::from(101)); |
|
|
|
System::current().stop(); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
) |
|
|
|
}); |
|
|
|
Arbiter::spawn(delay.map_err(|e| println!("actor dead {}", e))); |
|
|
@@ -512,15 +525,17 @@ mod tests { |
|
|
|
r#" |
|
|
|
ctx.notify_later(100, 1) |
|
|
|
"#, |
|
|
|
).on_handle_with_lua( |
|
|
|
) |
|
|
|
.on_handle_with_lua( |
|
|
|
r#" |
|
|
|
if ctx.msg == 100 then |
|
|
|
ctx.state.notified = ctx.msg |
|
|
|
end |
|
|
|
|
|
|
|
return ctx.msg + ctx.state.notified |
|
|
|
"#, |
|
|
|
).build() |
|
|
|
) |
|
|
|
.build() |
|
|
|
.unwrap() |
|
|
|
.start(); |
|
|
|
|
|
|
@@ -530,7 +545,8 @@ mod tests { |
|
|
|
l2.map(|res| { |
|
|
|
assert_eq!(res, LuaMessage::from(101)); |
|
|
|
System::current().stop(); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
) |
|
|
|
}); |
|
|
|
Arbiter::spawn(delay.map_err(|e| println!("actor dead {}", e))); |
|
|
@@ -547,7 +563,8 @@ mod tests { |
|
|
|
local id = ctx.new_actor("src/lua/test/test.lua") |
|
|
|
return id |
|
|
|
"#, |
|
|
|
).start(); |
|
|
|
) |
|
|
|
.start(); |
|
|
|
let l = addr.send(LuaMessage::Nil); |
|
|
|
Arbiter::spawn( |
|
|
|
l.map(move |res| { |
|
|
@@ -559,7 +576,8 @@ mod tests { |
|
|
|
} |
|
|
|
|
|
|
|
System::current().stop(); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
); |
|
|
|
|
|
|
|
system.run(); |
|
|
@@ -577,11 +595,13 @@ mod tests { |
|
|
|
local result = ctx.send(rec, "Hello") |
|
|
|
print("new actor addr name", rec, result) |
|
|
|
"#, |
|
|
|
).on_handle_with_lua( |
|
|
|
) |
|
|
|
.on_handle_with_lua( |
|
|
|
r#" |
|
|
|
return ctx.msg |
|
|
|
"#, |
|
|
|
).build() |
|
|
|
) |
|
|
|
.build() |
|
|
|
.unwrap() |
|
|
|
.start(); |
|
|
|
|
|
|
@@ -591,7 +611,8 @@ mod tests { |
|
|
|
l.map(|res| { |
|
|
|
assert_eq!(res, LuaMessage::Nil); |
|
|
|
System::current().stop(); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
) |
|
|
|
}); |
|
|
|
Arbiter::spawn(delay.map_err(|e| println!("actor dead {}", e))); |
|
|
@@ -612,7 +633,8 @@ mod tests { |
|
|
|
print(result) |
|
|
|
return result |
|
|
|
"#, |
|
|
|
).build() |
|
|
|
) |
|
|
|
.build() |
|
|
|
.unwrap(); |
|
|
|
|
|
|
|
let addr = actor.start(); |
|
|
@@ -625,7 +647,8 @@ mod tests { |
|
|
|
} else { |
|
|
|
unimplemented!() |
|
|
|
} |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
); |
|
|
|
|
|
|
|
system.run(); |
|
|
@@ -670,7 +693,8 @@ mod tests { |
|
|
|
print("send result", result) |
|
|
|
ctx.send("callback", result) |
|
|
|
"#, |
|
|
|
).build() |
|
|
|
) |
|
|
|
.build() |
|
|
|
.unwrap(); |
|
|
|
|
|
|
|
actor.add_recipients("callback", callback_addr.recipient()); |
|
|
@@ -685,7 +709,8 @@ mod tests { |
|
|
|
} else { |
|
|
|
unimplemented!() |
|
|
|
} |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
); |
|
|
|
|
|
|
|
system.run(); |
|
|
@@ -704,11 +729,13 @@ mod tests { |
|
|
|
local result = ctx.do_send(rec, "Hello") |
|
|
|
print("new actor addr name", rec, result) |
|
|
|
"#, |
|
|
|
).on_handle_with_lua( |
|
|
|
) |
|
|
|
.on_handle_with_lua( |
|
|
|
r#" |
|
|
|
return ctx.msg |
|
|
|
"#, |
|
|
|
).build() |
|
|
|
) |
|
|
|
.build() |
|
|
|
.unwrap() |
|
|
|
.start(); |
|
|
|
|
|
|
@@ -718,7 +745,8 @@ mod tests { |
|
|
|
l.map(|res| { |
|
|
|
assert_eq!(res, LuaMessage::Nil); |
|
|
|
System::current().stop(); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
) |
|
|
|
}); |
|
|
|
Arbiter::spawn(delay.map_err(|e| println!("actor dead {}", e))); |
|
|
@@ -736,7 +764,8 @@ mod tests { |
|
|
|
r#" |
|
|
|
ctx.terminate() |
|
|
|
"#, |
|
|
|
).on_stopped_with_lua(r#"print("stopped")"#) |
|
|
|
) |
|
|
|
.on_stopped_with_lua(r#"print("stopped")"#) |
|
|
|
.build() |
|
|
|
.unwrap() |
|
|
|
.start(); |
|
|
@@ -761,15 +790,17 @@ mod tests { |
|
|
|
local m = require('lua/test/module') |
|
|
|
return m.incr(ctx.msg) |
|
|
|
"#, |
|
|
|
).build() |
|
|
|
) |
|
|
|
.build() |
|
|
|
.unwrap() |
|
|
|
.start(); |
|
|
|
let l = addr.send(LuaMessage::from(1)); |
|
|
|
Arbiter::spawn( |
|
|
|
l.map(|res| { |
|
|
|
assert_eq!(res, LuaMessage::from(2)); |
|
|
|
System::current().stop(); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
); |
|
|
|
|
|
|
|
system.run(); |
|
|
@@ -785,14 +816,16 @@ mod tests { |
|
|
|
"greet", |
|
|
|
vm.create_function(|_, name: String| Ok(format!("Hello, {}!", name))) |
|
|
|
.unwrap(), |
|
|
|
).unwrap(); |
|
|
|
) |
|
|
|
.unwrap(); |
|
|
|
|
|
|
|
let addr = LuaActorBuilder::new() |
|
|
|
.on_handle_with_lua( |
|
|
|
r#" |
|
|
|
return greet(ctx.msg) |
|
|
|
"#, |
|
|
|
).build_with_vm(vm) |
|
|
|
) |
|
|
|
.build_with_vm(vm) |
|
|
|
.unwrap() |
|
|
|
.start(); |
|
|
|
|
|
|
@@ -801,7 +834,8 @@ mod tests { |
|
|
|
l.map(|res| { |
|
|
|
assert_eq!(res, LuaMessage::from("Hello, World!")); |
|
|
|
System::current().stop(); |
|
|
|
}).map_err(|e| println!("actor dead {}", e)), |
|
|
|
}) |
|
|
|
.map_err(|e| println!("actor dead {}", e)), |
|
|
|
); |
|
|
|
|
|
|
|
system.run(); |
|
|
|
0 comments on commit
4107532