changeset 77:015cdb9ecc21

TestMerger
author kent
date Sat, 10 Nov 2007 12:02:18 +0900
parents f07d649cae30
children a14d4b7337d9
files src/pathfinder/EditorEmulator.java src/pathfinder/NetworkSimulator.java src/pathfinder/SeMaEmulator.java src/pathfinder/TestMerger.java
diffstat 4 files changed, 105 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/src/pathfinder/EditorEmulator.java	Sat Nov 10 01:01:22 2007 +0900
+++ b/src/pathfinder/EditorEmulator.java	Sat Nov 10 12:02:18 2007 +0900
@@ -1,6 +1,5 @@
 package pathfinder;
 
-import java.util.Random;
 import remoteeditor.command.REPCommand;
 import remoteeditor.network.REP;
 import sample.merge.Translater;
@@ -8,33 +7,51 @@
 
 public class EditorEmulator extends Thread{
 	private int eid;
+	//private int MAX_CMD;
+	private int MAX_RCV_CMD;
 	private Thread cc;
 	private NetworkSimulator<REPCommand> ns;
 	private ChannelSimulator<REPCommand> cs;
 	private Translater translater;
 	private Text text;
+	private boolean running=true;
 
-	public EditorEmulator(int _eid, NetworkSimulator<REPCommand> _ns, int max_cmd) {
+	public EditorEmulator(int _eid, NetworkSimulator<REPCommand> _ns, int maxRcvCmd, int maxSndCmd) {
+		eid = _eid;
 		ns = _ns;
+		//MAX_CMD = max_cmd;
+		MAX_RCV_CMD = maxRcvCmd;
 		translater = new Translater(_eid);
-		cc = new AutoCmdSender(text, cs, _eid, max_cmd);
+		text = new Text();
 		cs = ns.connect();
+		cc = new AutoCmdSender(text, cs, translater, _eid, maxSndCmd);
 	}
 	public EditorEmulator(int _eid, NetworkSimulator<REPCommand> _ns) {
-		this(_eid, _ns, 3);
+		this(_eid, _ns, 0, 3);
+	}
+
+	synchronized public void finish(){
+		running = false;
 	}
 
 	public void run(){
+		int count=0;
 		REPCommand cmd;
 		cc.start();
 		System.out.println("Editor"+eid+" start.");
 
-		while(true){
+		while(running
+			  && (count<MAX_RCV_CMD || count==0 )){
 			cmd = cs.read();
-			if (cmd!=null) cmd = translater.transReceiveCmd(cmd);
-			if (cmd!=null) text.edit(cmd);
-			
-			if (false) break;
+			if (cmd!=null) {
+				count++;
+				System.out.println("\tEditor"+eid+" catch command:>> "+cmd.toString());
+				cmd = translater.transReceiveCmd(cmd);
+			}
+			if (cmd!=null) {
+				text.edit(cmd);
+				cs.write(cmd);
+			}
 		}
 
 		System.out.println("Editor"+eid+" finish.");
@@ -51,13 +68,15 @@
 	static public int cmdNO[] = { REP.REPCMD_INSERT, REP.REPCMD_REPLACE, REP.REPCMD_DELETE };
 	private Text text;
 	private ChannelSimulator<REPCommand> cs;
+	private Translater translater;
 	private int MAX_CMD;
 	private int eid;
 	private int seq;
 
-	public AutoCmdSender(Text _text, ChannelSimulator<REPCommand> _cs, int _eid, int max_cmd){
+	public AutoCmdSender(Text _text, ChannelSimulator<REPCommand> _cs, Translater trans, int _eid, int max_cmd){
 		text = _text;
 		cs   = _cs;
+		translater = trans;
 		MAX_CMD = max_cmd;
 		seq = 0;
 		eid = _eid;
@@ -68,6 +87,7 @@
 		for(int i=0; i<MAX_CMD; i++){
 			cmd = genCmd();
 			text.edit(cmd);
+			cmd = translater.transSendCmd(cmd);
 			cs.write(cmd);
 		}
 	}
@@ -76,7 +96,7 @@
 		String str = new String("inserted or replaced by editor"+eid);
 		return new REPCommand(cmdNO[Verify.random(2)],
 		                      0, eid, seq++,
-		                      Verify.random(text.size()), //size-1?
+		                      Verify.random(text.size()-1), //size-1?
 		                      str.length(), str);
 	}
 }
--- a/src/pathfinder/NetworkSimulator.java	Sat Nov 10 01:01:22 2007 +0900
+++ b/src/pathfinder/NetworkSimulator.java	Sat Nov 10 12:02:18 2007 +0900
@@ -4,7 +4,7 @@
 import java.util.Queue;
 
 public class NetworkSimulator<P> {
-	
+
 	/** Waiting connectionRequest to be accepted by SessionManager. */
 	private Queue<ChannelSimulator<P>> acceptList;
 	/** Established connection */
--- a/src/pathfinder/SeMaEmulator.java	Sat Nov 10 01:01:22 2007 +0900
+++ b/src/pathfinder/SeMaEmulator.java	Sat Nov 10 12:02:18 2007 +0900
@@ -4,28 +4,38 @@
 import java.util.List;
 
 public class SeMaEmulator<P> extends Thread {
+	private int MAX_PACKET;
+	private int MAX_CLIENT;
 	private NetworkSimulator<P> ns;
 	private List<ChannelSimulator<P>> csList;
 
-	public SeMaEmulator(NetworkSimulator<P> _ns){
+	public SeMaEmulator(NetworkSimulator<P> _ns, int max_client, int max_packet){
 		ns = _ns;
+		MAX_CLIENT = max_client;
+		MAX_PACKET = max_packet;
 		csList = new ArrayList<ChannelSimulator<P>>();
 	}
+	public SeMaEmulator(NetworkSimulator<P> _ns){
+		this(_ns, 2, 0);
+	}
 
 	/**
-	 * Check whether NetworkSimulator hold waiting connections.
+	 * Check whether the NetworkSimulator hold waiting connections.
 	 */
 	private boolean checkAccept(){
+		boolean flag=false;
 		ChannelSimulator<P> cs;
+		while((cs=ns.accept())!=null){
+			csList.add(cs);
+			flag = true;
+		}
+		return flag;
+/*
 		cs = ns.accept();
 		if (cs==null) return false;
 		csList.add(cs);
 		return true;
-	}
-	public void waitClient(){
-		while(csList.size()<2){
-			checkAccept();
-		}
+*/
 	}
 
 	public void run(){
@@ -33,20 +43,22 @@
 		int count=0;
 		P packet;
 
-		waitClient();
+		while(csList.size()<MAX_CLIENT){ checkAccept(); Thread.yield(); }
 		System.out.println("SessionManager start.");
-		
+
 		/* Main Loop */
 		ChannelSimulator<P> cs = csList.get(i);
-		while(true){
+		while(MAX_PACKET==0 || count<MAX_PACKET){
 			packet=cs.read();          // [i]からread
+			//if(packet!=null) System.out.println("SeMa catch packet to "+i+":>> "+packet.toString());
 			i = (i+1)%csList.size();   // i++
 			cs = csList.get(i);        // 次のChennelをゲット
 			if (packet!=null) {
+				System.out.println("SeMa pass packet to "+i+":>> "+packet.toString());
 				cs.write(packet);      // readできていたならそれを書き込む
-			}else count++;
-			if (i==0) checkAccept();   //全部回ったらaccept待ちをチェック
-			if (count>=100) break;
+				count++;
+			}
+			//if (i==0) checkAccept();   //全部回ったらaccept待ちをチェック
 		}
 		System.out.println("SessionManager finish.");
 	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pathfinder/TestMerger.java	Sat Nov 10 12:02:18 2007 +0900
@@ -0,0 +1,48 @@
+package pathfinder;
+
+
+import java.util.LinkedList;
+
+import remoteeditor.command.REPCommand;
+
+public class TestMerger {
+	private int N_editor;
+	private int N_packet;
+	private NetworkSimulator<REPCommand> ns;
+	private SeMaEmulator<REPCommand> sm;
+	private LinkedList<EditorEmulator> editors;
+
+	public TestMerger(int editor, int packet){
+		N_editor = editor;
+		N_packet = packet;
+		ns = new NetworkSimulator<REPCommand>();
+		sm = new SeMaEmulator<REPCommand>(ns, N_editor, N_editor*N_packet*N_editor);
+		editors = new LinkedList<EditorEmulator>();
+	}
+	
+	public static void main(String[] args){
+		TestMerger tm;
+		tm = new TestMerger(2, 3);
+		tm.startTest();
+	}
+
+	private void startTest() {
+		for (int i=0; i<N_editor; i++){
+			EditorEmulator ee = new EditorEmulator(i, ns, N_packet*N_editor, N_packet); 
+			editors.add(ee);
+			ee.start();
+		}
+		sm.start();
+
+		try {
+			sm.join();
+			for (EditorEmulator ee: editors){
+				//ee.finish();
+				ee.join();
+			}
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+	}
+
+}