Mercurial > hg > RemoteEditor > REPSessionManager
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; }