Mercurial > hg > RemoteEditor > Eclipse
changeset 20:e5472194938a
*** empty log message ***
author | pin |
---|---|
date | Tue, 31 Oct 2006 19:01:04 +0900 |
parents | cc68a00f9850 |
children | 8b58e6bb09c1 |
files | bin/remoteeditor/network/REP.class src/remoteeditor/network/REP.java src/sample/merge/Merge.java src/sample/merge/MergeSample.java src/sample/merge/Rep_Cmd.java |
diffstat | 5 files changed, 113 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- 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 <Rep_Cmd> myCmdList = new LinkedList<Rep_Cmd>(); + List <Rep_Cmd> othersCmdList = new LinkedList<Rep_Cmd>(); 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());
--- 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 <Rep_Cmd> userCmdList = new LinkedList<Rep_Cmd>(); + List <Rep_Cmd> tokenCmdList = new LinkedList<Rep_Cmd>(); 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<Rep_Cmd>(); + tokenCmdList = new LinkedList<Rep_Cmd>(); 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<Rep_Cmd>(); + tokenCmdList = new LinkedList<Rep_Cmd>(); + 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<Rep_Cmd>(); + tokenCmdList = new LinkedList<Rep_Cmd>(); + 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<Rep_Cmd>(); + tokenCmdList = new LinkedList<Rep_Cmd>(); + 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()); }
--- 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 <Rep_Cmd> userList; + List <Rep_Cmd> tokenList; private int REP_IGNORE = -1; - public MergeSample(List userList, List tokenList){ + public MergeSample(List<Rep_Cmd> userList, List<Rep_Cmd> 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; + } + } } } }