Advertisement
Stiepen

Derpy Luaj event system

Feb 9th, 2013
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.00 KB | None | 0 0
  1. package de.kilobyte22.LuaJBot.luamachine;
  2.  
  3. import de.kilobyte22.LuaJBot.logging.Logger;
  4. import org.luaj.vm2.LuaTable;
  5. import org.luaj.vm2.LuaValue;
  6. import org.luaj.vm2.Varargs;
  7. import org.luaj.vm2.lib.TwoArgFunction;
  8. import org.luaj.vm2.lib.VarArgFunction;
  9. import org.luaj.vm2.lib.ZeroArgFunction;
  10.  
  11. import java.util.HashMap;
  12. import java.util.LinkedList;
  13.  
  14. /**
  15.  * Created with IntelliJ IDEA.
  16.  * User: Stephan
  17.  * Date: 10.02.13
  18.  * Time: 00:21
  19.  *
  20.  * @author ${user}
  21.  * @copyright Copyright ${year} ${user}
  22.  */
  23. public class Eventlib extends VarArgFunction {
  24.     private HashMap<String, LinkedList<LuaValue>> handlers = new HashMap<String, LinkedList<LuaValue>>();
  25.     private boolean createLib = false;
  26.     private static Logger logger = new Logger("Eventlib");
  27.     public Eventlib(boolean createLib) {
  28.         this.createLib = createLib;
  29.     }
  30.  
  31.     public LuaValue call() {
  32.         return call(LuaValue.NIL);
  33.     }
  34.  
  35.     public LuaValue call(LuaValue env) {
  36.         LuaTable event = new LuaTable();
  37.         if (createLib) event.set("createEventLib", new createEventLib());
  38.         event.set("addListener", new addHandler());
  39.         event.set("emit", new Emit());
  40.         if (createLib) env.set("event", event);
  41.         return LuaValue.NIL;
  42.     }
  43.  
  44.     protected final class createEventLib extends ZeroArgFunction {
  45.         public LuaValue call() {
  46.             Eventlib lib = new Eventlib(false);
  47.             return lib.call();
  48.         }
  49.     }
  50.  
  51.     protected final class addHandler extends TwoArgFunction {
  52.  
  53.         @Override
  54.         public LuaValue call(LuaValue name, LuaValue handler) {
  55.             logger.log("Adding handler: " + name.checkjstring());
  56.             LinkedList<LuaValue> handl = handlers.get(name.checkjstring());
  57.             if (handl == null) {
  58.                 handl = new LinkedList<LuaValue>();
  59.                 logger.log("handler was null, creating it");
  60.             }
  61.             handl.add(handler.checkfunction());
  62.             try {
  63.                 handlers.remove(name.checkjstring());
  64.             } catch (Exception ex) {
  65.                 logger.log(ex);
  66.             }
  67.             handlers.put(name.checkjstring(), handl);
  68.             return LuaValue.NIL;
  69.         }
  70.     }
  71.  
  72.     protected final class Emit extends VarArgFunction {
  73.         public LuaValue call(Varargs args) {
  74.             emit(args);
  75.             return LuaValue.NIL;
  76.         }
  77.     }
  78.  
  79.     public void emit(Varargs args) {
  80.         LinkedList<LuaValue> handl = handlers.get(args.arg(1).checkjstring());
  81.         if (handl == null) {
  82.             logger.log("No handlers registered for " + args.arg1().checkjstring());
  83.             return;
  84.         }
  85.         logger.log("Calling handlers for " + args.arg1().checkjstring());
  86.         LuaValue[] args_ = new LuaValue[args.narg() - 1];
  87.         for(int i = 2; i <= args.narg(); i++) {
  88.             args_[i-2] = args.arg(i);
  89.         }
  90.         for(LuaValue handler : handl) {
  91.             handler.invoke(args_);
  92.             logger.log("called");
  93.         }
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement