/* * Created by LuaView. * Copyright (c) 2017, Alibaba Group. All rights reserved. * * This source code is licensed under the MIT. * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree. */ package com.taobao.luaview.vm.extend; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; import org.luaj.vm2.lib.OneArgFunction; import org.luaj.vm2.lib.TwoArgFunction; import org.luaj.vm2.lib.ZeroArgFunction; /** * LuaJ DebugLib的扩展功能 * * @author song * @date 16/2/22 */ public class DebugLib { org.luaj.vm2.lib.DebugLib mDebugLib; Globals globals; public DebugLib(org.luaj.vm2.lib.DebugLib debugLib, Globals globals){ this.mDebugLib = debugLib; this.globals = globals; } public void extend(LuaTable debug){ debug.set("readCmd", new readCmd()); debug.set("sleep", new sleep()); debug.set("printToServer", new printToServer()); debug.set("runningLine", new runningLine()); debug.set("get_file_line", new get_file_line()); } //---------------------------------------------------------------------------------------------- final class readCmd extends ZeroArgFunction { @Override public LuaValue call() { if (globals.debugConnection != null) { String cmd = globals.debugConnection.reciveCMD(); return cmd != null ? valueOf(cmd) : NIL; } else { return NIL; } } } final class sleep extends OneArgFunction { @Override public LuaValue call(LuaValue arg) { try { Thread.sleep(arg.checklong()); } catch (InterruptedException e) { e.printStackTrace(); } return NIL; } } final class printToServer extends OneArgFunction { @Override public LuaValue call(LuaValue arg) { if (globals.debugConnection != null) { globals.debugConnection.sendingEnabled = arg.optboolean(false); } return NIL; } } final class runningLine extends TwoArgFunction { @Override public LuaValue call(LuaValue arg1, LuaValue arg2) { String fileName = arg1.checkjstring(1); String lineNumber = String.valueOf(arg2.checkint()); if (globals.debugConnection != null) { globals.debugConnection.sendCmd("running", fileName, lineNumber.getBytes()); } return NIL; } } final class get_file_line extends ZeroArgFunction { @Override public LuaValue call() { return NIL; } } //---------------------------------------------------------------------------------------------- }