comparison rep/Editor.java @ 323:1e605880d49e

*** empty log message ***
author kono
date Fri, 10 Oct 2008 18:04:09 +0900
parents dfed28488274
children e235998427a6
comparison
equal deleted inserted replaced
322:5893fd8c0f50 323:1e605880d49e
41 REPCommand cmd = new REPCommand(REP.SMCMD_START_MERGE,command.sid,REP.SM_EID.id,seq(),0,""); 41 REPCommand cmd = new REPCommand(REP.SMCMD_START_MERGE,command.sid,REP.SM_EID.id,seq(),0,"");
42 nextEditor.send(cmd); 42 nextEditor.send(cmd);
43 // Session Manager 側で、このeditorへの他のeditorからの 43 // Session Manager 側で、このeditorへの他のeditorからの
44 // 入力を止めて、merge にそなえる。merge は、eidtor 側から 44 // 入力を止めて、merge にそなえる。merge は、eidtor 側から
45 // ACKが来てから始まる。 45 // ACKが来てから始まる。
46 translater.startMerge(cmd);
46 return; 47 return;
47 } else assert(false); 48 } else assert(false);
48 } else if(command.eid == eid){ 49 } else if(command.eid == eid){
49 //エディタからの新たな編集コマンド 50 //エディタからの新たな編集コマンド
50 sentList.add(command); 51 sentList.add(command);
72 manager.addWaitingCommand(new PacketSet(getChannel(), this, command)); 73 manager.addWaitingCommand(new PacketSet(getChannel(), this, command));
73 } 74 }
74 return; 75 return;
75 } 76 }
76 77
77 boolean merge(Editor editor,REPCommand command) { 78 boolean merge(REPCommand command) {
78 REPCommand prev = translater.prev(); 79 REPCommand prev = translater.prev();
79 if(prev==null) return false; 80 if(prev==null) return false;
80 assert(prev.eid==command.eid); 81 assert(prev.eid==command.eid);
81 //マージして送信 82 //マージして送信
82 return translater.catchOwnCommand(editor); 83 return translater.catchOwnCommand(this);
83 } 84 }
84 85
85 boolean checkReturnedCommand(REPCommand command) { 86 boolean checkReturnedCommand(REPCommand command) {
86 if(sentList.size() > 0){ 87 if(sentList.size() > 0){
87 if(sentList.get(0).seq == command.seq){ 88 if(sentList.get(0).seq == command.seq){
171 case REPCMD_NOP: 172 case REPCMD_NOP:
172 { 173 {
173 translate(next, receivedCommand); 174 translate(next, receivedCommand);
174 break; 175 break;
175 } 176 }
176 177
178 case SMCMD_START_MERGE_ACK:
179 {
180 // マージの処理と次のエディタへコマンドを送信する処理
181 translater.mergeAck();
182 if (!merge(receivedCommand)) {
183 // nothing to do, send END_MERGE
184 endMerge();
185 }
186 break;
187 }
177 case SMCMD_QUIT: 188 case SMCMD_QUIT:
178 { 189 {
179 next.send(receivedCommand); 190 next.send(receivedCommand);
180 break; 191 break;
181 } 192 }