diff test/sematest/TestEditor.java @ 315:20fb70068089

*** empty log message ***
author kono
date Mon, 06 Oct 2008 18:58:49 +0900
parents 0585fd2410b8
children dc57e24ea3df
line wrap: on
line diff
--- a/test/sematest/TestEditor.java	Mon Oct 06 10:34:37 2008 +0900
+++ b/test/sematest/TestEditor.java	Mon Oct 06 18:58:49 2008 +0900
@@ -32,6 +32,7 @@
 	private int eid = 0;
 	private int sid = 0;
 	REPSocketChannel<REPCommand> channel;
+	REPCommand nop = new REPCommand(REP.REPCMD_NOP, 0, 0, 0, 0, "");
 	boolean running = true;
 	long timeout = 1;
 	private String name;
@@ -58,7 +59,7 @@
 			cmds.add(new REPCommand(REP.SMCMD_PUT,0,0,0,0,name+"-file"));
 			cmds.add(new REPCommand(REP.REPCMD_INSERT,0,0,0,0,"m0"));
 			//cmds.add(new REPCommand(REP.REPCMD_DELETE,0,0,0,0,"m0"));
-			//cmds.add(new REPCommand(REP.SMCMD_QUIT,0,0,0,0,""));
+			cmds.add(new REPCommand(REP.SMCMD_QUIT,0,0,0,0,""));
 		} else {
 			text = new Text(new String[0]);
 			cmds.add(new REPCommand(REP.SMCMD_JOIN,0,0,0,0,name));
@@ -145,8 +146,8 @@
 			int i=syncCounter-1;
 			REPCommand del = new REPCommand(REP.REPCMD_DELETE,sid,eid,0,i, text.get(i));
 			REPCommand ins = new REPCommand(REP.REPCMD_INSERT,sid,eid,0,i, text.get(i));
-			sendCommand(del,seq++);
-			sendCommand(ins,seq++);
+			sendCommand(del);
+			sendCommand(ins);
 			syncCounter++;
 		}
 	}
@@ -160,12 +161,12 @@
 			switch(cmd.cmd) {
 			case REPCMD_INSERT:
 				text.insert(cmd.lineno, cmd.string);
-				sendCommand(cmd,seq++);
+				sendCommand(cmd);
 				break;
 			case REPCMD_DELETE:
 				String del = text.delete(cmd.lineno);
 				cmd.setString(del);
-				sendCommand(cmd,seq++);
+				sendCommand(cmd);
 				break;
 			case SMCMD_QUIT:
 				/*
@@ -174,11 +175,11 @@
 				 * clients simply disconnect from the session manager.
 				 */
 				cmds.clear();
-				sendCommand(cmd,seq++);
+				sendCommand(cmd);
 				break;
 			case SMCMD_JOIN:
 			case SMCMD_PUT:
-				sendCommand(cmd,seq++);
+				sendCommand(cmd);
 				prevSeq = seq;
 				/*
 				 * To prevent confusion, stop user input until the ack
@@ -195,42 +196,48 @@
 	}
 
 
-	private void sendCommand(REPCommand cmd1,int seq) {
+	private void sendCommand(REPCommand cmd1) {
 		REPCommand cmd = new REPCommand(cmd1);
-		cmd.setSEQID(seq);
+		cmd.setSEQID(seq++);
 		cmd.setEID(eid);
 		cmd.setSID(sid);
 		ns.writeLog(name +" send "+cmd);
 		channel.write(cmd);
 	}
 
+	private void forwardCommand(REPCommand cmd1) {
+		REPCommand cmd = new REPCommand(cmd1);
+		ns.writeLog(name +" forward "+cmd);
+		channel.write(cmd);
+	}
+
 	private void handle(REPCommand cmd) {
 		if (cmd==null) return;
 		ns.writeLog(name +": read "+cmd);
 		switch(cmd.cmd) {
 		case REPCMD_INSERT	:
 			text.insert(cmd.lineno, cmd.string);
-			if (cmd.eid==REP.MERGE_EID.id) break;
-			addNop();
-			sendCommand(cmd,cmd.seq);
+			if (cmd.eid!=REP.MERGE_EID.id) 
+				addNop();
+			forwardCommand(cmd);
 			break;
 		case REPCMD_INSERT_ACK	:
 			assert(false);
 			break;
 		case REPCMD_DELETE	:
 			String del = text.delete(cmd.lineno);
-			if (cmd.eid==REP.MERGE_EID.id) break;
-			addNop();
+			if (cmd.eid!=REP.MERGE_EID.id) 
+				addNop();
 			cmd.setString(del);
-			sendCommand(cmd,cmd.seq);
+			forwardCommand(cmd);
 			break;
 		 case REPCMD_DELETE_ACK	:
 				assert(false);
 			 break;
 		 case REPCMD_NOP		:
- 			 if (cmd.eid==REP.MERGE_EID.id) break;
-			 addNop();
-			 sendCommand(cmd,cmd.seq);
+ 			 if (cmd.eid!=REP.MERGE_EID.id)
+ 				 addNop();
+			 forwardCommand(cmd);
 			 break;		 case REPCMD_CLOSE	:
 		 case REPCMD_CLOSE_2	:
 				assert(false);
@@ -247,13 +254,12 @@
 			 inputLock = false;
 			 break;
 		 case SMCMD_QUIT		:
-			 if (false) {
+			 if(true) return;
 			 if (cmd.eid!=eid)
-				 sendCommand(cmd,cmd.seq);
+				 forwardCommand(cmd);
 			 else
 				 sendCommand(new REPCommand(REP.SMCMD_QUIT_2, 
-						 sid, eid, seq, 0, ""),seq++);
-			 }
+						 sid, eid, seq, 0, ""));
 			 cmds.clear();
 			 break;
 		 case SMCMD_QUIT_ACK	:
@@ -263,7 +269,7 @@
 			 // lock user input during merge (optional)
 			 inputLock = hasInputLock;
 			 cmd.cmd = REP.SMCMD_START_MERGE_ACK;
-			 sendCommand(cmd,seq++);
+			 sendCommand(cmd);
 			 break;
 		 case SMCMD_START_MERGE_ACK :
 			 assert(false);
@@ -273,13 +279,14 @@
 			 break;
 		 case SMCMD_QUIT_2 :
 			 if (cmd.eid!=eid) {
-				 sendCommand(cmd,cmd.seq);
+				 forwardCommand(cmd);
 			 }
 			 running = false;
 			 break;
 		 case SMCMD_SYNC:
 			 // start contents sync with newly joined editor
-			 cmd.cmd = REP.SMCMD_SYNC_ACK; sendCommand(cmd,cmd.seq);
+			 cmd.cmd = REP.SMCMD_SYNC_ACK;
+			 forwardCommand(cmd);
 			 if (cmd.eid==eid) 
 				 syncCounter = 1;
 			 break;
@@ -292,8 +299,7 @@
 	private void addNop() {
 		if (seq!=prevSeq) return;
 		// We haven't send any command, add nop before retransmition.
-		REPCommand nop = new REPCommand(REP.REPCMD_NOP, sid, eid, seq, 0, "");
-		sendCommand(nop,seq++);
+		sendCommand(nop);
 		prevSeq = seq;
 	}
 }