changeset 396:dc616339b00a

half done. returned command conflict.
author one
date Wed, 19 Nov 2008 17:07:04 +0900
parents a2efdec5cbfc
children 149c9a53fc37
files rep/handler/Editor.java test/sematest/TestEditor.java
diffstat 2 files changed, 16 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/rep/handler/Editor.java	Wed Nov 19 16:41:09 2008 +0900
+++ b/rep/handler/Editor.java	Wed Nov 19 17:07:04 2008 +0900
@@ -121,10 +121,7 @@
 		preMergeCommand = command;
 		// merge は必須だが、EditorのCommand実装をテストするには邪魔なので、off に出来るようにする。
 		if (noMergeMode) {
-			REPCommand ack = new REPCommand(REP.SMCMD_END_MERGE,command.sid,REP.SM_EID.id,seq(),0,"");
-			send(ack);
-			// END_MERGE_ACK が返って来てから、送る方が正しいような気もするが...
-			next.send(preMergeCommand);
+			endMerge();
 			return;
 		}
 		// START_MERGE を送る
@@ -166,15 +163,20 @@
 	void checkEndMerge() {
 		if (merging) {
 			if(translator.isMerging()) return;
-			REPCommand mergeEnd = new REPCommand(REP.SMCMD_END_MERGE,sid,eid,seq(),0,"");
-			send(mergeEnd);
-			// send INSERT_ACK/DELETE_ACK as next editor's merge trigger
-			next.send(preMergeCommand);
+			endMerge();
 			merging = false;
 		}
 		if (quit2!=null) checkQuit();
 	}
 
+	private void endMerge() {
+		REPCommand mergeEnd = new REPCommand(REP.SMCMD_END_MERGE,sid,eid,seq(),0,"");
+		send(mergeEnd);
+		// send INSERT_ACK/DELETE_ACK as next editor's merge trigger
+		sentList.add(new REPCommand(preMergeCommand));
+		next.send(preMergeCommand);
+	}
+
 	private boolean checkQuit() {
 		if (sentList.size()==0&&!isMerging()) {
 			send(quit2);
@@ -190,9 +192,11 @@
 		
 		switch(command.cmd){
 		// Editor Command
-		
+
 		case REPCMD_DELETE:
 		case REPCMD_INSERT:
+		case REPCMD_DELETE_ACK:
+		case REPCMD_INSERT_ACK:
 		case REPCMD_NOP:
 		{
 			translate(command);
@@ -244,6 +248,7 @@
 			break;
 		}
 		default:
+			assert false;
 			return false;
 		}
 		return true;
--- a/test/sematest/TestEditor.java	Wed Nov 19 16:41:09 2008 +0900
+++ b/test/sematest/TestEditor.java	Wed Nov 19 17:07:04 2008 +0900
@@ -43,6 +43,7 @@
 	private boolean hasInputLock=false;
 	private int port;
 	private REPSelector<REPCommand> selector;
+	private boolean syncEnable=false;
 
 
 	public TestEditor(String name, String _host,int _port, boolean master){
@@ -293,7 +294,7 @@
 			 cmd.cmd = REP.SMCMD_SYNC_ACK;
 			 forwardCommand(cmd);
 			 //if (cmd.eid==eid) {
-			 if (master) {
+			 if (master && syncEnable ) {
 				 syncCounter = 1;
 				 timeout = 1;
 			 }