1
|
1 package rep;
|
|
2
|
122
|
3 import java.util.LinkedList;
|
142
|
4 import java.util.List;
|
1
|
5
|
131
|
6 import rep.channel.REPSocketChannel;
|
142
|
7 import rep.translater.TranslaterImp1;
|
131
|
8
|
1
|
9 public class Editor {
|
23
|
10 private int eid;
|
132
|
11 private REPSocketChannel<REPCommand> myChannel;
|
21
|
12 private String host;
|
39
|
13 private String file;
|
142
|
14 private TranslaterImp1 translater;
|
|
15 private List<REPCommand> sentList;
|
155
|
16
|
|
17 public Editor(){
|
|
18 setHostAndPort(myChannel);
|
|
19 translater = new TranslaterImp1(eid);
|
|
20 sentList = new LinkedList<REPCommand>();
|
|
21 }
|
1
|
22
|
132
|
23 public Editor(int editorNo, REPSocketChannel<REPCommand> channel){
|
23
|
24 this.eid = editorNo;
|
56
|
25 this.myChannel = channel;
|
142
|
26 translater = new TranslaterImp1(eid);
|
|
27 sentList = new LinkedList<REPCommand>();
|
152
|
28 setHostAndPort(myChannel);
|
56
|
29 }
|
142
|
30
|
132
|
31 public Editor(REPSocketChannel<REPCommand> channel) {
|
56
|
32 this.myChannel = channel;
|
|
33 setHostAndPort(myChannel);
|
152
|
34 translater = new TranslaterImp1(eid);
|
|
35 sentList = new LinkedList<REPCommand>();
|
56
|
36 }
|
142
|
37
|
|
38 public LinkedList<REPCommand> translate(REPCommand command){
|
|
39 LinkedList<REPCommand> list = new LinkedList<REPCommand>();
|
|
40 if(command.eid == eid){
|
|
41 if(checkReturnedCommand(command)){
|
152
|
42 //エディタからのコマンドが元のエディタに戻ってきた
|
164
|
43 //マージして送信
|
142
|
44 REPCommand[] cmds = translater.catchOwnCommand(command);
|
|
45 sendMergedCommand(cmds);
|
|
46 return null;
|
|
47 }else{
|
152
|
48 //エディタからの新たな編集コマンド
|
142
|
49 sentList.add(command);
|
|
50 translater.transSendCmd(command);
|
|
51 list.add(command);
|
|
52 }
|
179
|
53 }else if(eid == REP.MERGE_EID){
|
|
54 //マージコマンドが返ってきた
|
|
55 if(translater.checkMergeConflict(command)){
|
|
56 //マージ中にエディタからの割り込みがあった場合
|
|
57 LinkedList<REPCommand> mergeAgainList = translater.getMergeAgain();
|
|
58 for(REPCommand againCommand: mergeAgainList){
|
|
59 myChannel.write(againCommand);
|
|
60 }
|
|
61 }
|
142
|
62 }else{
|
152
|
63 //他のエディタからの編集コマンド
|
142
|
64 REPCommand[] cmds = translater.transReceiveCmd(command);
|
|
65 for(REPCommand cmd : cmds){
|
|
66 list.add(cmd);
|
|
67 }
|
|
68 }
|
|
69 return list;
|
|
70 }
|
|
71
|
|
72 private void sendMergedCommand(REPCommand[] cmds) {
|
|
73 for(int i = 0; i < cmds.length; i++){
|
179
|
74 REPCommand mergeCommand = cmds[i];
|
|
75 mergeCommand.setEID(REP.MERGE_EID);
|
|
76 myChannel.write(mergeCommand);
|
142
|
77 }
|
|
78 }
|
56
|
79
|
142
|
80 private boolean checkReturnedCommand(REPCommand command) {
|
|
81 if(sentList.size() > 0){
|
|
82 if(sentList.get(0).seq == command.seq){
|
|
83 sentList.remove(0);
|
|
84 return true;
|
|
85 }else{
|
|
86 System.out.println("error:Editor.checkReturnedCommand()");
|
|
87 }
|
|
88 }
|
|
89 return false;
|
74
|
90 }
|
|
91
|
132
|
92 private void setHostAndPort(REPSocketChannel<REPCommand> myChannel2) {
|
195
|
93 //host = myChannel2.socket().getRemoteSocketAddress().toString();
|
178
|
94
|
1
|
95 }
|
|
96
|
132
|
97 public REPSocketChannel<REPCommand> getChannel() {
|
56
|
98 return myChannel;
|
1
|
99 }
|
21
|
100
|
|
101 public void setHost(String host){
|
|
102 this.host = host;
|
|
103 }
|
178
|
104
|
21
|
105
|
|
106 public String getHost(){
|
|
107 return host;
|
|
108 }
|
178
|
109
|
21
|
110
|
23
|
111 public int getEID() {
|
|
112 return eid;
|
|
113 }
|
|
114
|
|
115 public void setEID(int eid) {
|
|
116 this.eid = eid;
|
|
117 }
|
24
|
118 public String toString(){
|
178
|
119 return (host + ":" + file);
|
24
|
120 }
|
23
|
121
|
38
|
122 public String getName() {
|
39
|
123 return file;
|
|
124 }
|
|
125
|
|
126 public void setName(String string) {
|
|
127 file = string;
|
38
|
128 }
|
|
129
|
179
|
130 public void send(REPCommand command) {
|
|
131 myChannel.write(command);
|
56
|
132 }
|
|
133
|
178
|
134 public void setChannel(REPSocketChannel<REPCommand> channel) {
|
83
|
135 myChannel = channel;
|
|
136 }
|
|
137
|
164
|
138 public boolean isMerging() {
|
|
139 return translater.isMerging();
|
|
140 }
|
|
141
|
1
|
142 }
|