changeset 8:78b415d019de

Local DS and CS work! maybe...
author one
date Thu, 12 Jan 2012 16:02:28 +0900
parents 352eb19d837d
children 22afbb2919f1
files src/alice/codesegment/CodeSegment.java src/alice/codesegment/CodeSegmentManager.java src/alice/codesegment/InputDataSegment.java src/alice/datasegment/LocalDataSegmentManager.java src/alice/test/codesegment/StartCodeSegment.java src/alice/test/codesegment/TestAlice.java src/alice/test/codesegment/TestCodeSegment.java
diffstat 7 files changed, 63 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/src/alice/codesegment/CodeSegment.java	Thu Jan 12 13:48:34 2012 +0900
+++ b/src/alice/codesegment/CodeSegment.java	Thu Jan 12 16:02:28 2012 +0900
@@ -6,7 +6,6 @@
 	
 	public InputDataSegment ids = new InputDataSegment(this);
 	
-	public abstract void prepare();
 	public abstract void run();
 
 }
--- a/src/alice/codesegment/CodeSegmentManager.java	Thu Jan 12 13:48:34 2012 +0900
+++ b/src/alice/codesegment/CodeSegmentManager.java	Thu Jan 12 16:02:28 2012 +0900
@@ -1,31 +1,28 @@
 package alice.codesegment;
 
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.LinkedBlockingQueue;
 
-import alice.datasegment.Reply;
-
 public class CodeSegmentManager {
 	private static CodeSegmentManager instance = new CodeSegmentManager();
-	private LinkedBlockingQueue<Reply> replyQueue = new LinkedBlockingQueue<Reply>();
-	private ConcurrentHashMap<Integer, CodeSegment> seqHash = new ConcurrentHashMap<Integer, CodeSegment>();
+	public LinkedBlockingQueue<CodeSegment> readyQueue = new LinkedBlockingQueue<CodeSegment>();
 	
 	private CodeSegmentManager() {
-		Runnable replyThread = new Runnable() {
+		Runnable prepareThread = new Runnable() {
 
 			@Override
 			public void run() {
 				while (true) {
 					try {
-						Reply reply = replyQueue.take();
-						
+						CodeSegment cs = readyQueue.take();
+						cs.run();
 					} catch (InterruptedException e) {
 						e.printStackTrace();
 					}
 				}
-				
 			}
+			
 		};
+		new Thread(prepareThread).start();
 	}
 	
 	public void create(CodeSegment cs) {
--- a/src/alice/codesegment/InputDataSegment.java	Thu Jan 12 13:48:34 2012 +0900
+++ b/src/alice/codesegment/InputDataSegment.java	Thu Jan 12 16:02:28 2012 +0900
@@ -36,5 +36,16 @@
 
 	public void reply(String key, DataSegmentValue val) {
 		inputDataSegments.put(key, val);
+		if (count.decrementAndGet() == 0) {
+			try {
+				CodeSegmentManager.get().readyQueue.put(cs);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	public DataSegmentValue get(String argKey) {
+		return inputDataSegments.get(argKey);
 	}
 }
--- a/src/alice/datasegment/LocalDataSegmentManager.java	Thu Jan 12 13:48:34 2012 +0900
+++ b/src/alice/datasegment/LocalDataSegmentManager.java	Thu Jan 12 16:02:28 2012 +0900
@@ -33,8 +33,9 @@
 	private DataSegmentKey getDataSegmentKey(String key) {
 		DataSegmentKey newDataSegmentKey = new DataSegmentKey();
 		DataSegmentKey dataSegmentKey = dataSegments.putIfAbsent(key, newDataSegmentKey);
-		if (dataSegmentKey == newDataSegmentKey) {
+		if (dataSegmentKey == null) {
 			newDataSegmentKey.runKeyThread();
+			dataSegmentKey = newDataSegmentKey;
 		}
 		return dataSegmentKey;
 	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/alice/test/codesegment/StartCodeSegment.java	Thu Jan 12 16:02:28 2012 +0900
@@ -0,0 +1,23 @@
+package alice.test.codesegment;
+
+import org.msgpack.type.Value;
+import org.msgpack.type.ValueFactory;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.DataSegment;
+
+public class StartCodeSegment extends CodeSegment {
+
+	@Override
+	public void run() {
+		System.out.println("run StartCodeSegment");
+		
+		TestCodeSegment tcs = new TestCodeSegment();
+		tcs.ids.peek("arg1", "local", "key1");
+		System.out.println("create TestCodeSegment");
+		
+		Value val = ValueFactory.createRawValue("String data");
+		DataSegment.get("local").put("key1", val);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/alice/test/codesegment/TestAlice.java	Thu Jan 12 16:02:28 2012 +0900
@@ -0,0 +1,17 @@
+package alice.test.codesegment;
+
+import alice.codesegment.CodeSegment;
+import alice.codesegment.CodeSegmentManager;
+
+public class TestAlice {
+	public static void main(String args[]) {
+		CodeSegment scs = new StartCodeSegment();
+		try {
+			CodeSegmentManager.get().readyQueue.put(scs);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+		
+	}
+	
+}
--- a/src/alice/test/codesegment/TestCodeSegment.java	Thu Jan 12 13:48:34 2012 +0900
+++ b/src/alice/test/codesegment/TestCodeSegment.java	Thu Jan 12 16:02:28 2012 +0900
@@ -1,22 +1,15 @@
 package alice.test.codesegment;
 
 import alice.codesegment.CodeSegment;
+import alice.datasegment.DataSegmentValue;
 
 public class TestCodeSegment extends CodeSegment {
 	
-	public TestCodeSegment() {
-
-	}
-
-	@Override
-	public void prepare() {
-		ids.peek("arg1", "local", "key1");
-	}
-	
 	@Override
 	public void run() {
-		
-
+		DataSegmentValue data = ids.get("arg1");
+		System.out.println("index = " + data.index);
+		System.out.println("data = " + data.val.toString());
 	}
 
 }