Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package de.kilobyte22.LuaJBot.luamachine;
- import de.kilobyte22.LuaJBot.logging.Logger;
- import org.luaj.vm2.LuaTable;
- import org.luaj.vm2.LuaValue;
- import org.luaj.vm2.Varargs;
- import org.luaj.vm2.lib.TwoArgFunction;
- import org.luaj.vm2.lib.VarArgFunction;
- import org.luaj.vm2.lib.ZeroArgFunction;
- import java.util.HashMap;
- import java.util.LinkedList;
- /**
- * Created with IntelliJ IDEA.
- * User: Stephan
- * Date: 10.02.13
- * Time: 00:21
- *
- * @author ${user}
- * @copyright Copyright ${year} ${user}
- */
- public class Eventlib extends VarArgFunction {
- private HashMap<String, LinkedList<LuaValue>> handlers = new HashMap<String, LinkedList<LuaValue>>();
- private boolean createLib = false;
- private static Logger logger = new Logger("Eventlib");
- public Eventlib(boolean createLib) {
- this.createLib = createLib;
- }
- public LuaValue call() {
- return call(LuaValue.NIL);
- }
- public LuaValue call(LuaValue env) {
- LuaTable event = new LuaTable();
- if (createLib) event.set("createEventLib", new createEventLib());
- event.set("addListener", new addHandler());
- event.set("emit", new Emit());
- if (createLib) env.set("event", event);
- return LuaValue.NIL;
- }
- protected final class createEventLib extends ZeroArgFunction {
- public LuaValue call() {
- Eventlib lib = new Eventlib(false);
- return lib.call();
- }
- }
- protected final class addHandler extends TwoArgFunction {
- @Override
- public LuaValue call(LuaValue name, LuaValue handler) {
- logger.log("Adding handler: " + name.checkjstring());
- LinkedList<LuaValue> handl = handlers.get(name.checkjstring());
- if (handl == null) {
- handl = new LinkedList<LuaValue>();
- logger.log("handler was null, creating it");
- }
- handl.add(handler.checkfunction());
- try {
- handlers.remove(name.checkjstring());
- } catch (Exception ex) {
- logger.log(ex);
- }
- handlers.put(name.checkjstring(), handl);
- return LuaValue.NIL;
- }
- }
- protected final class Emit extends VarArgFunction {
- public LuaValue call(Varargs args) {
- emit(args);
- return LuaValue.NIL;
- }
- }
- public void emit(Varargs args) {
- LinkedList<LuaValue> handl = handlers.get(args.arg(1).checkjstring());
- if (handl == null) {
- logger.log("No handlers registered for " + args.arg1().checkjstring());
- return;
- }
- logger.log("Calling handlers for " + args.arg1().checkjstring());
- LuaValue[] args_ = new LuaValue[args.narg() - 1];
- for(int i = 2; i <= args.narg(); i++) {
- args_[i-2] = args.arg(i);
- }
- for(LuaValue handler : handl) {
- handler.invoke(args_);
- logger.log("called");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement