changeset 113:4205d029584c

create fdl.multiengine
author kazz
date Mon, 11 Oct 2010 04:43:46 +0900
parents 27874f473d48
children 3b877c9a44f5
files src/fdl/multiengine/MetaEngineExecutor.java src/fdl/multiengine/MultiEngineServer.java src/fdl/multiengine/StopServerEngine.java src/fdl/multiengine/TupleId.java
diffstat 4 files changed, 112 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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<MetaEngine> engines;
+	public boolean running = true;
+
+	public MetaEngineExecutor() {
+		engines = new LinkedList<MetaEngine>();
+	}
+	
+	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);
+	}
+	
+}
--- /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
+	}
+
+}
--- /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);
+	}
+
+}
--- /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<Integer, TupleId> hash = new HashMap<Integer, TupleId>();
+	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);
+		}
+	}
+}