Java源码示例:org.luaj.vm2.LuaFunction

示例1
public LuaModInstance(String name, FileHandle file, AssetManager assetManager, Map<String, FileHandle> luaFiles, FileHandle luaFolder) {
  super(name, file, assetManager);
  this.luaFiles = luaFiles;
  this.luaFolder = luaFolder;
  this.modStates = new ArrayList<ModState>();

  this.globals = CubesLua.globals(); // each mod has its own globals
  this.luaModEvent = new Multimap<ModState, LuaFunction>();
  this.globalEventListeners = new ArrayList<LuaEventListener>();
  this.clientEventListeners = new ArrayList<LuaEventListener>();
  this.serverEventListeners = new ArrayList<LuaEventListener>();

  int length = Integer.MAX_VALUE;
  String current = luaFiles.keySet().iterator().next();
  for (Entry<String, FileHandle> entry : luaFiles.entrySet()) {
    String s = entry.getKey();
    if (s.toLowerCase().contains("init") && s.length() < length) {
      length = s.length();
      current = s;
    }
  }
  initFile = name + "|" + current;
  Log.debug("Using '" + initFile + "' as init file");
}
 
示例2
public LuaValue call(LuaValue value, LuaValue table) {
    LuaValue mt = table.opttable(null);
    switch (value.type()) {
        case TNIL:
            LuaNil.s_metatable = mt;
            break;
        case TNUMBER:
            LuaNumber.s_metatable = mt;
            break;
        case TBOOLEAN:
            LuaBoolean.s_metatable = mt;
            break;
        case TSTRING:
            LuaString.s_metatable = mt;
            break;
        case TFUNCTION:
            LuaFunction.s_metatable = mt;
            break;
        case TTHREAD:
            LuaThread.s_metatable = mt;
            break;
        default:
            value.setmetatable(mt);
    }
    return value;
}
 
示例3
public void funcinfo(LuaFunction f) {
    if (f.isclosure()) {
        Prototype p = f.checkclosure().p;
        this.source = p.source != null ? p.source.tojstring() : "=?";
        this.linedefined = p.linedefined;
        this.lastlinedefined = p.lastlinedefined;
        this.what = (this.linedefined == 0) ? "main" : "Lua";
        this.short_src = p.shortsource();
    } else {
        this.source = "=[Java]";
        this.linedefined = -1;
        this.lastlinedefined = -1;
        this.what = "Java";
        this.short_src = f.name();
    }
}
 
示例4
private static Varargs startConnect(Varargs args, LVHttpBridge lvHttpBridge, RequestType requestType) {
    final int fixIndex = VenvyLVLibBinder.fixIndex(args);
    int requestId = -1;
    if (args.narg() > fixIndex) {
        String url = LuaUtil.getString(args, fixIndex + 1);
        LuaTable table = LuaUtil.getTable(args, fixIndex + 2);
        LuaFunction callback = LuaUtil.getFunction(args, fixIndex + 3);
        switch (requestType) {
            case GET:
                requestId = lvHttpBridge.get(url, table, callback);
                break;
            case POST:
                requestId = lvHttpBridge.post(url, table, callback);
                break;
            case PUT:
                requestId = lvHttpBridge.put(url, table, callback);
                break;
            case DELETE:
                requestId = lvHttpBridge.delete(url, table, callback);
                break;
        }
    }
    return LuaValue.valueOf(requestId);
}
 
示例5
@Override
public Varargs invoke(Varargs args) {
    final int fixIndex = VenvyLVLibBinder.fixIndex(args);
    if (args.narg() > fixIndex) {
        if (mPlatform != null && mPlatform.getPlatformRecordInterface() != null) {
            final LuaFunction callback = LuaUtil.getFunction(args, fixIndex + 1);
            if (callback == null) {
                return LuaValue.NIL;
            }
            mPlatform.getPlatformRecordInterface().endRecord(new IPlatformRecordInterface.RecordCallback() {
                @Override
                public void onRecordResult(String filePath) {
                    LuaUtil.callFunction(callback, LuaValue.valueOf(filePath));
                }
            });
        }
    }
    return LuaValue.NIL;
}
 
示例6
@Override
public Varargs invoke(Varargs args) {
    final int fixIndex = VenvyLVLibBinder.fixIndex(args);
    if (args.narg() > fixIndex) {
        if (mPlatform != null && mPlatform.getPlatformLoginInterface() != null) {
            final LuaFunction callback = LuaUtil.getFunction(args, fixIndex + 1);
            mPlatform.getPlatformLoginInterface().login(new IPlatformLoginInterface.LoginCallback() {
                @Override
                public void loginSuccess(PlatformUserInfo platformUserInfo) {
                    LuaUtil.callFunction(callback, JsonUtil.toLuaTable(platformUserInfo.toString()));
                }

                @Override
                public void loginError(LoginException loginException) {
                    LuaUtil.callFunction(callback, LuaValue.NIL);
                }
            });
        }
    }
    return LuaValue.NIL;
}
 
示例7
public void upload(final String url, String filePath, final LuaFunction callback) {
    File file = new File(filePath);
    if (!file.exists()) {
        LuaUtil.callFunction(callback, LuaValue.NIL);
        return;
    }

    final PostFormRequest.FileInfo fileInfo = new PostFormRequest.FileInfo();
    fileInfo.file = file;
    fileInfo.fileName = filePath;
    fileInfo.name = "file";
    if (mUploadHelper == null) {
        mUploadHelper = new FileUploadHelper();
    }
    mUploadHelper.uploadAsync(PostFormRequest.upload(fileInfo, url), new FileUploadHelper.IUploadListener() {

        @Override
        public void uploadComplete(String data) {
            VenvyLog.i("--图片上传结果--" + data);
            LuaUtil.callFunction(callback, TextUtils.isEmpty(data) ? LuaValue.NIL : LuaValue.valueOf(data));
        }
    });
}
 
示例8
public String callJS(String jsMethod, final LuaFunction callback) {
    IVenvyWebView webView;
    if (getView() == null || (webView = this.getView().getWebView()) == null) {
        return "";
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        webView.evaluateJavascript(jsMethod, new ValueCallback<String>() {
            /**
             *
             * @param value  js的函数执行的返回值
             */
            @Override
            public void onReceiveValue(String value) {
                LuaValue luaValue = LuaValue.valueOf(value);
                LuaUtil.callFunction(callback, luaValue);
            }
        });
    } else {
        webView.loadUrl(jsMethod);
    }


    return "";
}
 
示例9
private LuaValue startConnect(Varargs args, LVHttpBridge lvHttpBridge, RequestType requestType) {
    final int fixIndex = VenvyLVLibBinder.fixIndex(args);
    int requestId = -1;
    if (args.narg() > fixIndex) {
        String url = LuaUtil.getString(args, 2);
        LuaTable table = LuaUtil.getTable(args, 3);
        LuaFunction callback = LuaUtil.getFunction(args, 4);
        switch (requestType) {
            case GET:
                requestId = lvHttpBridge.get(url, table, callback);
                break;
            case POST:
                requestId = lvHttpBridge.post(url, table, callback);
                break;
            case PUT:
                requestId = lvHttpBridge.put(url, table, callback);
                break;
            case DELETE:
                requestId = lvHttpBridge.delete(url, table, callback);
                break;
        }
    }
    return LuaValue.valueOf(requestId);
}
 
示例10
public void funcinfo(LuaFunction f) {
	if (f.isclosure()) {
		Prototype p = f.checkclosure().p;
		this.source = p.source != null ? p.source.tojstring() : "=?";
		this.linedefined = p.linedefined;
		this.lastlinedefined = p.lastlinedefined;
		this.what = (this.linedefined == 0) ? "main" : "Lua";
		this.short_src = p.shortsource();
	} else {
		this.source = "=[Java]";
		this.linedefined = -1;
		this.lastlinedefined = -1;
		this.what = "Java";
		this.short_src = f.name();
	}
}
 
示例11
public void funcinfo(LuaFunction f) {
	if (f.isclosure()) {
		Prototype p = f.checkclosure().p;
		this.source = p.source != null ? p.source.tojstring() : "=?";
		this.linedefined = p.linedefined;
		this.lastlinedefined = p.lastlinedefined;
		this.what = (this.linedefined == 0) ? "main" : "Lua";
		this.short_src = p.shortsource();
	} else {
		this.source = "=[Java]";
		this.linedefined = -1;
		this.lastlinedefined = -1;
		this.what = "Java";
		this.short_src = f.name();
	}
}
 
示例12
public void funcinfo(LuaFunction f) {
	if (f.isclosure()) {
		Prototype p = f.checkclosure().p;
		this.source = p.source != null ? p.source.tojstring() : "=?";
		this.linedefined = p.linedefined;
		this.lastlinedefined = p.lastlinedefined;
		this.what = (this.linedefined == 0) ? "main" : "Lua";
		this.short_src = p.shortsource();
	} else {
		this.source = "=[Java]";
		this.linedefined = -1;
		this.lastlinedefined = -1;
		this.what = "Java";
		this.short_src = f.name();
	}
}
 
示例13
public void onCall(LuaFunction f) {
    LuaThread t = globals.running;
    callstack().onCall(f);

    if (t.inhook) return;
    if (t.hookcall && t.hookfunc != null)
        callHook(CALL, NIL);
}
 
示例14
public void constructor(@This Object o, @AllArguments Object[] objects) { // @Origin Constructor constructor,
  LuaValue value = delegations.get("__new__");
  if (value.isnil()) return;
  if (!value.isfunction()) throw new DynamicDelegationError("__new__ for " + o.getClass().getName() + " is a " + value.typename());
  LuaFunction function = value.checkfunction();
  LuaValue[] parameters = convertParamsToLua(o, objects);
  function.invoke(parameters);
}
 
示例15
public UDImageView setPlaceHolderImage(final String placeHolderImage, final LuaFunction callback) {
    final T imageView = getView();
    if (imageView != null) {
        if (!TextUtils.isEmpty(placeHolderImage)) {
            imageView.setPlaceHolderImg(placeHolderImage);

            Drawable drawable = null;
            if (getLuaResourceFinder() != null) {
                drawable = getLuaResourceFinder().findDrawable(placeHolderImage);
                imageView.setPlaceHolderDrawable(drawable);
            }
        }
    }
    return this;
}
 
示例16
/**
 * 提供View的构造环境,注意,callback里面不能有异步操作,否则操作的时序上会混乱
 *
 * @param callback
 * @return
 */
public UDViewGroup children(LuaFunction callback) {
    if (getView() instanceof ViewGroup) {
        Globals globals = getGlobals();
        if (globals != null) {
            globals.pushContainer(getView());
            LuaUtil.callFunction(callback, this);
            globals.popContainer();
        }
    }
    return this;
}
 
示例17
public LuaValue setPlaceHolderImage(U view, Varargs varargs) {
    if (varargs.isstring(2)) {
        final String url = varargs.optjstring(2, null);
        final LuaFunction callback = varargs.optfunction(3, null);
        return view.setPlaceHolderImage(url, callback);
    } else if (varargs.arg(2) instanceof UDData) {//data
        final UDData data = (UDData) varargs.arg(2);
        return view.setPlaceHolderBytes(data != null ? Base64.decode(data.bytes(), Base64.NO_WRAP) : null);
    }
    return view;
}
 
示例18
public LuaValue setImage(U view, Varargs varargs) {
    if (varargs.isstring(2)) {
        final String url = varargs.optjstring(2, null);
        final LuaFunction callback = varargs.optfunction(3, null);
        return view.setImageUrl(url, callback);
    } else if (varargs.arg(2) instanceof UDData) {//data
        final UDData data = (UDData) varargs.arg(2);
        return view.setImageBytes(data != null ? Base64.decode(data.bytes(), Base64.NO_WRAP) : null);
    }
    return view;
}
 
示例19
@Override
public Varargs invoke(Varargs args) {
    final int fixIndex = VenvyLVLibBinder.fixIndex(args);
    if (args.narg() > fixIndex) {
        String url = LuaUtil.getString(args, fixIndex + 1);
        String filePath = LuaUtil.getString(args, fixIndex + 2);
        LuaFunction callback = LuaUtil.getFunction(args, fixIndex + 3);
        httpBridge.upload(url, filePath, callback);

    }
    return LuaValue.NIL;
}
 
示例20
public void setCropImageResultListener(final LuaFunction luaFunction) {
    if (mImageScannerDialogLayout != null) {
        mImageScannerDialogLayout.mCropImageResultListener = new IWidgetClickListener<String>() {
            @Override
            public void onClick(@Nullable String imgPath) {
                if (luaFunction != null) {
                    LuaValue value = LuaValue.valueOf(imgPath);
                    LuaUtil.callFunction(luaFunction, value);
                }
                dismiss();
            }
        };
    }
}
 
示例21
public void show(final LuaFunction luaFunction) {
    if (mImageScannerDialog == null) {
        mImageScannerDialog = new VenvyLVImageScannerDialog(mContext);
    }
    mImageScannerDialog.show(new ImageScannerDialog.ShowImageDialogResult() {
        @Override
        public void successful() {
            mImageScannerDialog.setCropImageResultListener(luaFunction);
        }
    });
}
 
示例22
public LuaValue upload(Varargs varargs) {
    final int fixIndex = VenvyLVLibBinder.fixIndex(varargs);
    if (varargs.narg() > fixIndex) {
        String url = LuaUtil.getString(varargs, 2);
        String filePath = LuaUtil.getString(varargs, 3);
        LuaFunction callback = LuaUtil.getFunction(varargs, 4);
        httpBridge.upload(url, filePath, callback);
    }
    return LuaValue.NIL;
}
 
示例23
public LuaValue mqttCallback(U target, Varargs varargs) {
    final LuaFunction callback = varargs.optfunction(2, null);
    if (callback != null && callback.isfunction()) {
        return target.setMqttCallback(callback);
    }
    return LuaValue.NIL;
}
 
示例24
public LuaValue keyboardCallback(U target, Varargs varargs) {
    final LuaFunction callback = varargs.optfunction(2, null);
    if (callback != null && callback.isfunction()) {
        return target.setKeyboardCallback(callback);
    }
    return LuaValue.NIL;
}
 
示例25
public LuaValue acrRecognizeCallback(U target, Varargs varargs) {
    final LuaFunction callback = varargs.optfunction(2, null);
    if (callback != null && callback.isfunction()) {
        return target.setAcrCloudCallback(callback);
    }
    return LuaValue.NIL;
}
 
示例26
public LuaValue acrRecordEnd(U target, Varargs args) {
    final int fixIndex = VenvyLVLibBinder.fixIndex(args);
    if (args.narg() > fixIndex) {
        final LuaFunction callback = LuaUtil.getFunction(args, fixIndex + 2);
        if (callback == null) {
            return LuaValue.NIL;
        }
        target.acrRecordEnd(callback);
    }
    return LuaValue.NIL;
}
 
示例27
public LuaValue call(LuaValue value, LuaValue table) {
	LuaValue mt = table.opttable(null);
	switch ( value.type() ) {
		case TNIL:      LuaNil.s_metatable      = mt; break;
		case TNUMBER:   LuaNumber.s_metatable   = mt; break;
		case TBOOLEAN:  LuaBoolean.s_metatable  = mt; break;
		case TSTRING:   LuaString.s_metatable   = mt; break;
		case TFUNCTION: LuaFunction.s_metatable = mt; break;
		case TTHREAD:   LuaThread.s_metatable   = mt; break;
		default: value.setmetatable( mt );
	}
	return value;
}
 
示例28
public LuaValue call(LuaValue value, LuaValue table) {
	LuaValue mt = table.opttable(null);
	switch ( value.type() ) {
		case TNIL:      LuaNil.s_metatable      = mt; break;
		case TNUMBER:   LuaNumber.s_metatable   = mt; break;
		case TBOOLEAN:  LuaBoolean.s_metatable  = mt; break;
		case TSTRING:   LuaString.s_metatable   = mt; break;
		case TFUNCTION: LuaFunction.s_metatable = mt; break;
		case TTHREAD:   LuaThread.s_metatable   = mt; break;
		default: value.setmetatable( mt );
	}
	return value;
}
 
示例29
private static <T> T serializeLuaScript(LuaValue lv, Function<LuaFunction, T> asFunction, Function<String, T> asScript, Function<Integer, T> byId) {
	if (lv.isfunction()) {
		return asFunction.apply(lv.checkfunction());
	} else if (lv.isnumber() && byId != null) {
		return byId.apply(lv.toint());
	} else if (lv.isstring()) {
		return asScript.apply(lv.tojstring());
	} else {
		return null;
	}
}
 
示例30
public LuaFunction load(String classname, LuaValue env) {
	try {
		Class c = loadClass( classname );
		LuaFunction v = (LuaFunction) c.newInstance();
		v.initupvalue1(env);
		return v;
	} catch ( Exception e ) {
		e.printStackTrace();
		throw new IllegalStateException("bad class gen: "+e);
	}
}