changeset 327:7b6dede07f4a

*** empty log message ***
author kono
date Sat, 11 Oct 2008 19:31:13 +0900
parents b1a6acf0b8a9
children 6ceb222570cb
files rep/Editor.java rep/Forwarder.java rep/SessionManager.java rep/translator/Translator.java rep/translator/TranslatorImpl.java
diffstat 5 files changed, 11 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/rep/Editor.java	Sat Oct 11 19:04:38 2008 +0900
+++ b/rep/Editor.java	Sat Oct 11 19:31:13 2008 +0900
@@ -38,9 +38,9 @@
 			nextEditor.checkReturnedCommand(command);
 		} else if(command.eid == eid){
 			//エディタからの新たな編集コマンド
-			sentList.add(command);
+			translator.transSendCmd(command);
+			sentList.add(new REPCommand(command));
 			assert(sentList.size()<limit);
-			translator.transSendCmd(command);
 			nextEditor.send(command);
 			return;
 		}else if(command.eid == REP.MERGE_EID.id){
@@ -62,18 +62,16 @@
 	}
 
 	boolean merge(REPCommand command) {
-		REPCommand prev = translator.prev();
-		if(prev==null) return false;
-		assert(prev.eid==command.eid);
 		//マージして送信
 		return translator.catchOwnCommand(this);
 	}
 
 	void checkReturnedCommand(REPCommand command) {
 		REPCommand prev = sentList.remove(0);
-		if (prev==null || prev.seq != command.seq) {
+		if (prev==null || prev.seq != command.seq || prev.eid!=command.eid) {
 			String err = "Editor.checkReturnedCommand() : command = " + command + " prev=";
 			err += prev==null?"null":prev.toString();
+			System.out.println(err);
 			assert(false);
 		}
 
@@ -89,8 +87,8 @@
 
 	@Override
 	public void setQuit2(REPCommand cmd) {
-		if (!checkQuit()) 
-			quit2 = cmd;
+		quit2 = cmd;
+		checkQuit();
 		// do not send quit2 until we received all pending
 		// command
 	}
@@ -121,6 +119,7 @@
 	private boolean checkQuit() {
 		if (sentList.size()==0&&!isMerging()) {
 			send(quit2);
+			quit2 = null;
 			manager.remove(this);
 			return true;
 		}
--- a/rep/Forwarder.java	Sat Oct 11 19:04:38 2008 +0900
+++ b/rep/Forwarder.java	Sat Oct 11 19:31:13 2008 +0900
@@ -22,7 +22,8 @@
 	
 	public void send(REPCommand command) {
 		assert(command!=null);
-		manager.addWriteQueue(new PacketSet(channel, null, command));
+		REPCommand c = new REPCommand(command);
+		manager.addWriteQueue(new PacketSet(channel, null, c));
 	}
 	
 	public REPSocketChannel<REPCommand> getChannel() {
--- a/rep/SessionManager.java	Sat Oct 11 19:04:38 2008 +0900
+++ b/rep/SessionManager.java	Sat Oct 11 19:31:13 2008 +0900
@@ -140,8 +140,7 @@
 	private boolean checkWaitingWrite() throws IOException {
 		PacketSet p = writeQueue.poll();
 		if (p!=null) {
-			REPCommand cmd = new REPCommand(p.command);
-			p.channel.write(cmd);
+			p.channel.write(p.command);
 			return true;
 		}
 		return false;
--- a/rep/translator/Translator.java	Sat Oct 11 19:04:38 2008 +0900
+++ b/rep/translator/Translator.java	Sat Oct 11 19:31:13 2008 +0900
@@ -43,8 +43,6 @@
 
 	public void startMerge(REPCommand cmd);
 
-	public REPCommand prev();
-
 	public boolean isMerging();
 
 	public void mergeAck();
--- a/rep/translator/TranslatorImpl.java	Sat Oct 11 19:04:38 2008 +0900
+++ b/rep/translator/TranslatorImpl.java	Sat Oct 11 19:31:13 2008 +0900
@@ -18,7 +18,6 @@
 	 * queue が5つもいるって、あまりに馬鹿げてる。
 	 */
 	public REPCommandOptimizer optimizer;
-	private LinkedList<REPCommand> sentCmds;
 	private LinkedList<REPCommand> unMergedCmds;
 	public LinkedList<REPCommand> sentMergedList;
 	private LinkedList<REPCommand> mergeAgainList;
@@ -27,7 +26,6 @@
 	public TranslatorImpl(int _eid,REPCommandOptimizer opt){
 		eid = _eid;
 		optimizer = opt;
-		sentCmds = new LinkedList<REPCommand>();
 		unMergedCmds = new LinkedList<REPCommand>();
 		mergeAgainList = new LinkedList<REPCommand>();
 		sentMergedList = new LinkedList<REPCommand>();
@@ -40,7 +38,7 @@
 	 * @return translated command.
 	 */
 	public REPCommand transSendCmd(REPCommand cmd){
-		sentCmds.add(cmd);
+		assert(cmd.eid==eid);
 		unMergedCmds.add(cmd);
 		
 		//マージ中にユーザから割り込みがあった場合
@@ -101,10 +99,6 @@
 		return true;
 	}
 	
-	public REPCommand prev() {
-		return sentCmds.poll();
-	}
-
 	private REPCommand createUndo(REPCommand cmd){
 		REPCommand retCmd = new REPCommand(cmd);
 		if (cmd.cmd==REP.REPCMD_INSERT) retCmd.cmd=REP.REPCMD_DELETE;
@@ -215,7 +209,6 @@
 	public boolean isFinished() {
 		if(unMergedCmds.size() > 0) return false;
 		if(sentMergedList.size() > 0) return false;
-		if(sentCmds.size() > 0) return false;
 		return true;
 	}