# HG changeset patch # User pin # Date 1162288864 -32400 # Node ID e5472194938a965dff9d4995a090ae5bd4993439 # Parent cc68a00f98508c543a03f28d593241ebe656fa87 *** empty log message *** diff -r cc68a00f9850 -r e5472194938a bin/remoteeditor/network/REP.class Binary file bin/remoteeditor/network/REP.class has changed diff -r cc68a00f9850 -r e5472194938a src/remoteeditor/network/REP.java --- a/src/remoteeditor/network/REP.java Tue Oct 31 16:30:54 2006 +0900 +++ b/src/remoteeditor/network/REP.java Tue Oct 31 19:01:04 2006 +0900 @@ -44,23 +44,23 @@ //ByteBuffer read_buffer = ByteBuffer.allocateDirect(1024); String string; - private RSocketListener socketListener; - private Shell shell; + public RSocketListener socketListener; + Shell shell; - List myCmdList = new LinkedList(); - List othersCmdList = new LinkedList(); + List myCmdList = new LinkedList(); + List othersCmdList = new LinkedList(); private String filename; public REP() throws Exception { String host = "localhost"; - int port = 8080; + int port = 8765; InputDialog dialog = new InputDialog(shell, "REP", "host", "localhost", null); if(dialog.open() == Window.OK){ host = dialog.getValue(); } - dialog = new InputDialog(shell, "REP", "port", "8080", null); + dialog = new InputDialog(shell, "REP", "port", "8756", null); if (dialog.open() == Window.OK) { try { port = Integer.parseInt(dialog.getValue()); @@ -112,10 +112,15 @@ System.out.println("read packet:" + cmd +", "+ sid +", "+ eid +", "+ seqid +", "+ lineno +", "+ textsiz +", "+ string); } - public void insert(int offset, int length, String text) throws IOException { + public void insert(int offset, int length, String text) { cmd = REP_INSERT_CMD; seqid = (byte)offset; - sc.write(pack(cmd, sid, eid, seqid, lineno, text)); + try { + sc.write(pack(cmd, sid, eid, seqid, lineno, text)); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } try { myCmdList.add(new Rep_Cmd(cmd, sid, eid, seqid, lineno, length, text)); System.out.println("myCmdList : " + myCmdList.toString()); diff -r cc68a00f9850 -r e5472194938a src/sample/merge/Merge.java --- a/src/sample/merge/Merge.java Tue Oct 31 16:30:54 2006 +0900 +++ b/src/sample/merge/Merge.java Tue Oct 31 19:01:04 2006 +0900 @@ -9,11 +9,12 @@ public class Merge { public static void main(String[] args) throws Exception{ - List userCmdList = new LinkedList(); - List tokenCmdList = new LinkedList(); + List userCmdList = new LinkedList(); + List tokenCmdList = new LinkedList(); System.out.println("---------- パターン2 ----------"); userCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 1, 0, 10, 4, "test")); + userCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 1, 0, 11, 5, "test2")); System.out.println("UserList : " + userCmdList.toString()); tokenCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 2, 0, 12, 5, "test3")); tokenCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 2, 0, 15, 5, "test4")); @@ -26,8 +27,8 @@ System.out.println(""); System.out.println("---------- パターン2 ----------"); - userCmdList = new LinkedList(); - tokenCmdList = new LinkedList(); + userCmdList = new LinkedList(); + tokenCmdList = new LinkedList(); userCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 1, 0, 10, 4, "test")); System.out.println("UserList : " + userCmdList.toString()); tokenCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 2, 0, 5, 5, "test3")); @@ -38,7 +39,47 @@ System.out.println("NewUserList : " + userCmdList.toString()); System.out.println("NewTokenList : " + tokenCmdList.toString()); + System.out.println(""); + System.out.println("---------- パターン3 ----------"); + userCmdList = new LinkedList(); + tokenCmdList = new LinkedList(); + userCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 1, 0, 10, 4, "test")); + System.out.println("UserList : " + userCmdList.toString()); + tokenCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 2, 0, 10, 5, "test3")); + System.out.println("TokenList : " + tokenCmdList.toString()); + new MergeSample(userCmdList, tokenCmdList); + System.out.println(); + System.out.println("NewUserList : " + userCmdList.toString()); + System.out.println("NewTokenList : " + tokenCmdList.toString()); + + System.out.println(""); + + System.out.println("---------- パターン4 ----------"); + userCmdList = new LinkedList(); + tokenCmdList = new LinkedList(); + userCmdList.add(new Rep_Cmd(REP.REP_DELETE_CMD, 1, 1, 0, 10, 4, "test")); + System.out.println("UserList : " + userCmdList.toString()); + tokenCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 2, 0, 10, 5, "test3")); + System.out.println("TokenList : " + tokenCmdList.toString()); + new MergeSample(userCmdList, tokenCmdList); + System.out.println(); + System.out.println("NewUserList : " + userCmdList.toString()); + System.out.println("NewTokenList : " + tokenCmdList.toString()); + + System.out.println(""); + + System.out.println("---------- パターン5 ----------"); + userCmdList = new LinkedList(); + tokenCmdList = new LinkedList(); + userCmdList.add(new Rep_Cmd(REP.REP_DELETE_CMD, 1, 1, 0, 10, 4, "test")); + System.out.println("UserList : " + userCmdList.toString()); + tokenCmdList.add(new Rep_Cmd(REP.REP_REPLACE_CMD, 1, 2, 0, 10, 5, "test3")); + System.out.println("TokenList : " + tokenCmdList.toString()); + new MergeSample(userCmdList, tokenCmdList); + System.out.println(); + System.out.println("NewUserList : " + userCmdList.toString()); + System.out.println("NewTokenList : " + tokenCmdList.toString()); } diff -r cc68a00f9850 -r e5472194938a src/sample/merge/MergeSample.java --- a/src/sample/merge/MergeSample.java Tue Oct 31 16:30:54 2006 +0900 +++ b/src/sample/merge/MergeSample.java Tue Oct 31 19:01:04 2006 +0900 @@ -6,10 +6,10 @@ import remoteeditor.network.REP; public class MergeSample { - List userList; - List tokenList; + List userList; + List tokenList; private int REP_IGNORE = -1; - public MergeSample(List userList, List tokenList){ + public MergeSample(List userList, List tokenList){ this.userList = userList; this.tokenList = tokenList; merge(); @@ -17,13 +17,17 @@ void merge(){ - Iterator userListIterator = userList.iterator(); - while(userListIterator.hasNext()){ - Iterator tokenListIterator = tokenList.iterator(); - Rep_Cmd userCmd = (Rep_Cmd)userListIterator.next(); + Rep_Cmd h_pricmd; + Rep_Cmd l_pricmd; +// Iterator userListIterator = userList.iterator(); +// while(userListIterator.hasNext()){ + for(Rep_Cmd userCmd:userList){ + //Iterator tokenListIterator = tokenList.iterator(); + //Rep_Cmd userCmd = (Rep_Cmd)userListIterator.next(); if(userCmd.stat == REP_IGNORE) continue; /* 削除される(予定)のREPコマンドの比較は無視 */ - while(tokenListIterator.hasNext()){ - Rep_Cmd tokenCmd =(Rep_Cmd)tokenListIterator.next(); + //while(tokenListIterator.hasNext()){ + for(Rep_Cmd tokenCmd:tokenList){ +// Rep_Cmd tokenCmd =(Rep_Cmd)tokenListIterator.next(); if(tokenCmd.stat == REP_IGNORE) continue; /* 削除される(予定)のREPコマンドの比較は無視 */ if(userCmd.stat == REP_IGNORE) break; if(userCmd.lineno < tokenCmd.lineno) { /* UsersLineNumber < TokensLineNumber */ @@ -45,6 +49,48 @@ * uid が小さい方を優先(h_pricmdに)し、 * uid が大きい方(l_pricmd)を変更する。 */ + if(userCmd.eid < tokenCmd.eid){ + h_pricmd = userCmd; + l_pricmd = tokenCmd; + }else { + h_pricmd = tokenCmd; + l_pricmd = userCmd; + } + if(h_pricmd.cmd == REP.REP_INSERT_CMD){ + l_pricmd.lineno++; + }else if(l_pricmd.cmd == REP.REP_REPLACE_CMD){ + if(l_pricmd.cmd == REP.REP_INSERT_CMD){ + /* h_pricmd が優先され,l_pricmd は削除(無視に)する */ + l_pricmd.stat = REP_IGNORE; + }else if(l_pricmd.cmd == REP.REP_DELETE_CMD){ + /* + * l_pricmd 側ではすでにdeleteされているので、 + * h_pricmd を REP_REPLACE_CMD -> REP_INSERT_CMD へ変更。 + */ + h_pricmd.cmd = REP.REP_INSERT_CMD; + l_pricmd.stat = REP_IGNORE; + } + }else if(h_pricmd.cmd == REP.REP_DELETE_CMD){ + if (l_pricmd.cmd == REP.REP_INSERT_CMD) { + h_pricmd.lineno++; + } else if(l_pricmd.cmd == REP.REP_REPLACE_CMD){ + /* + * h_pricmd 側ではすでにdeleteされているので、 + * l_pricmd 側を REP_REPLACE_CMD -> REP_INSERT_CMD へ変更。 + */ + l_pricmd.cmd = REP.REP_INSERT_CMD; + h_pricmd.stat= REP_IGNORE; + } else { /* l_pricmd->cmd == REP_DELETE_LINE_CMD */ + /* + * 相手と削除する行が重なるので、 + * 両方のコマンドを無視にする。 + * 相手先ではすでにこの行は削除されている。 + */ + h_pricmd.stat = REP_IGNORE; + l_pricmd.stat = REP_IGNORE; + break; + } + } } } } diff -r cc68a00f9850 -r e5472194938a src/sample/merge/Rep_Cmd.java --- a/src/sample/merge/Rep_Cmd.java Tue Oct 31 16:30:54 2006 +0900 +++ b/src/sample/merge/Rep_Cmd.java Tue Oct 31 19:01:04 2006 +0900 @@ -1,7 +1,5 @@ package sample.merge; -import java.nio.ByteBuffer; - public class Rep_Cmd { public int cmd; public int sid;