Browse Source

console scheduler, rprint command, bugfixes (returned int)

Kajetan Johannes Hammerle 4 years ago
parent
commit
25a9c753c3

+ 60 - 1
src/me/hammerle/snuviscript/ConsoleScheduler.java

@@ -1,14 +1,73 @@
 package me.hammerle.snuviscript;
 
+import java.util.ArrayList;
 import me.hammerle.snuviscript.code.ISnuviScheduler;
 
 public class ConsoleScheduler implements ISnuviScheduler
 {
+    private class Task
+    {
+        private Runnable r;
+        private long delay;
+        
+        public Task(Runnable r, long delay)
+        {
+            this.r = r;
+            this.delay = delay;
+        }
+        
+        public void tick()
+        {
+            delay--;
+            if(delay <= 0 && r != null)
+            {
+                r.run();
+                r = null;
+                activeTasks--;
+            }
+        }
+        
+        public void set(Runnable r, long delay)
+        {
+            this.r = r;
+            this.delay = delay;
+        }
+        
+        public boolean isFree()
+        {
+            return r == null;
+        }
+    }
+    
+    private int activeTasks = 0;
+    private final ArrayList<Task> tasks = new ArrayList<>();
+    
     @Override
     public int scheduleTask(Runnable r, long delay)
     {
-        System.out.println("Scheduling is currently not supported in this environment.");
+        activeTasks++;
+        for(int i = 0; i < tasks.size(); i++)
+        {
+            Task t = tasks.get(i);
+            if(t.isFree())
+            {
+                t.set(r, delay);
+                return -1;
+            }
+        }
+        tasks.add(new Task(r, delay));
         return -1;
     }
     
+    public void tick()
+    {
+        while(activeTasks > 0)
+        {
+            for(int i = 0; i < tasks.size(); i++)
+            {
+                tasks.get(i).tick();
+            }
+        }
+    }
+    
 }

+ 15 - 4
src/me/hammerle/snuviscript/SnuviScript.java

@@ -6,9 +6,20 @@ public class SnuviScript
 {
     public static void main(String[] args)
     {
-        me.hammerle.snuviscript.test.Test.test();
-        
-        //ScriptManager sm = new ScriptManager(new ConsoleLogger(), new ConsoleScheduler());
-        //sm.startScript(true, args[0], args);
+        //me.hammerle.snuviscript.test.Test.test();
+        startForConsole(args);
     }  
+    
+    private static void startForConsole(String[] args)
+    {
+        if(args.length == 0)
+        {
+            System.out.println("java -jar SnuviScriptRecoded.jar <file_1> [file_2] ...");
+            return;
+        }
+        ConsoleScheduler cs = new ConsoleScheduler();
+        ScriptManager sm = new ScriptManager(new ConsoleLogger(), cs);
+        sm.startScript(true, args[0], args);
+        cs.tick();
+    }
 }

+ 7 - 2
src/me/hammerle/snuviscript/code/FunctionRegistry.java

@@ -459,8 +459,8 @@ public class FunctionRegistry
         registerFunction("text.startswith", (sc, in) -> in[0].getString(sc).startsWith(in[1].getString(sc), in[2].getInt(sc))); 
         registerFunction("text.endswith", (sc, in) -> in[0].getString(sc).endsWith(in[1].getString(sc))); 
         registerFunction("text.contains", (sc, in) ->  in[0].getString(sc).contains(in[1].getString(sc))); 
-        registerFunction("text.indexof", (sc, in) -> in[0].getString(sc).indexOf(in[1].getString(sc), in[2].getInt(sc))); 
-        registerFunction("text.lastindexof", (sc, in) -> in[0].getString(sc).lastIndexOf(in[1].getString(sc), in[2].getInt(sc)));
+        registerFunction("text.indexof", (sc, in) -> (double) in[0].getString(sc).indexOf(in[1].getString(sc), in[2].getInt(sc))); 
+        registerFunction("text.lastindexof", (sc, in) -> (double) in[0].getString(sc).lastIndexOf(in[1].getString(sc), in[2].getInt(sc)));
         registerFunction("text.replace", (sc, in) -> in[0].getString(sc).replace(in[1].getString(sc), in[2].getString(sc)));
         registerFunction("text.trim", (sc, in) -> in[0].getString(sc).trim());
         registerFunction("text.charat", (sc, in) -> String.valueOf(in[0].getString(sc).charAt(in[1].getInt(sc))));
@@ -761,6 +761,11 @@ public class FunctionRegistry
             sc.getScriptManager().getLogger().print(SnuviUtils.connect(sc, in, 0), null, "print", sc.getName(), sc, sc.getActiveSourceLine());
             return Void.TYPE;
         });
+        registerFunction("rprint", (sc, in) -> 
+        {
+            System.out.println(SnuviUtils.connect(sc, in, 0));
+            return Void.TYPE;
+        });
         registerFunction("waitfor", (sc, in) ->    
         {
             long l = in[0].getInt(sc);