# HG changeset patch # User kazz # Date 1286739826 -32400 # Node ID 4205d029584cb87b589e6620f17ce1cd420383d0 # Parent 27874f473d4802fda820c1ca76d01fa76c1be20c create fdl.multiengine diff -r 27874f473d48 -r 4205d029584c src/fdl/multiengine/MetaEngineExecutor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fdl/multiengine/MetaEngineExecutor.java Mon Oct 11 04:43:46 2010 +0900 @@ -0,0 +1,33 @@ +package fdl.multiengine; + +import java.util.LinkedList; + +import fdl.MetaEngine; +import fdl.MetaLinda; + +public class MetaEngineExecutor implements MetaEngine { + private LinkedList engines; + public boolean running = true; + + public MetaEngineExecutor() { + engines = new LinkedList(); + } + + public void mainLoop(MetaLinda ml) { + while (running) { + for (MetaEngine engine : engines) { + engine.mainLoop(ml); + } + ml.sync(0); + } + } + + public void addMetaEngine(MetaEngine engine) { + engines.add(engine); + } + + public void deleteMetaEngine(MetaEngine engine) { + engines.remove(engine); + } + +} diff -r 27874f473d48 -r 4205d029584c src/fdl/multiengine/MultiEngineServer.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fdl/multiengine/MultiEngineServer.java Mon Oct 11 04:43:46 2010 +0900 @@ -0,0 +1,17 @@ +package fdl.multiengine; + +import fdl.FDLindaServ; + +public class MultiEngineServer { + static int DEFAULTPORT = 10000; + static MetaEngineExecutor mee; + /** + * @param args + */ + public static void main(String[] args) { + mee = new MetaEngineExecutor(); + mee.addMetaEngine(new StopServerEngine(mee)); + FDLindaServ.main(mee, args); // start server + } + +} diff -r 27874f473d48 -r 4205d029584c src/fdl/multiengine/StopServerEngine.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fdl/multiengine/StopServerEngine.java Mon Oct 11 04:43:46 2010 +0900 @@ -0,0 +1,23 @@ +package fdl.multiengine; + +import java.nio.ByteBuffer; + +import fdl.MetaEngine; +import fdl.MetaLinda; +import fdl.PSXCallback; + +public class StopServerEngine implements MetaEngine { + MetaEngineExecutor mee; + + public StopServerEngine(MetaEngineExecutor mee) { + this.mee = mee; + } + + public void mainLoop(MetaLinda ml) { + ml.in(TupleId.STOP.id, + new PSXCallback() { public void callback(ByteBuffer reply) { + mee.running = false; }}); + mee.deleteMetaEngine(this); + } + +} diff -r 27874f473d48 -r 4205d029584c src/fdl/multiengine/TupleId.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fdl/multiengine/TupleId.java Mon Oct 11 04:43:46 2010 +0900 @@ -0,0 +1,39 @@ +package fdl.multiengine; + +import java.util.HashMap; + +public enum TupleId { + MANAGE (60000), + STOP; + + public int id; + public static HashMap hash = new HashMap(); + private static int lastId = 0; + + private TupleId(int id) { + this.id = id; + setLastId(id); + } + + private TupleId() { + this.id = incrementLastId(); + } + + private void setLastId(int id) { + lastId = id; + } + + private int incrementLastId() { + return ++lastId; + } + + public static TupleId getTupleIdFromId(int id) { + return hash.get(id); + } + + static { + for (TupleId tid : TupleId.values()) { + hash.put(tid.id, tid); + } + } +}