0
|
1 package rep;
|
|
2
|
38
|
3 import java.beans.XMLEncoder;
|
|
4 import java.io.BufferedOutputStream;
|
|
5 import java.io.File;
|
|
6 import java.io.FileOutputStream;
|
|
7 import java.io.IOException;
|
|
8 import java.io.OutputStream;
|
|
9 import java.io.StringWriter;
|
0
|
10 import java.nio.channels.SocketChannel;
|
|
11 import java.util.Hashtable;
|
|
12 import java.util.LinkedList;
|
|
13 import java.util.List;
|
|
14
|
38
|
15 import javax.swing.JButton;
|
|
16 import javax.xml.parsers.DocumentBuilder;
|
|
17 import javax.xml.parsers.DocumentBuilderFactory;
|
|
18 import javax.xml.parsers.ParserConfigurationException;
|
|
19 import javax.xml.transform.Result;
|
|
20 import javax.xml.transform.Transformer;
|
|
21 import javax.xml.transform.TransformerFactory;
|
|
22 import javax.xml.transform.dom.DOMSource;
|
|
23 import javax.xml.transform.stream.StreamResult;
|
|
24
|
|
25 import org.w3c.dom.Document;
|
|
26 import org.w3c.dom.Element;
|
|
27 import org.w3c.dom.Node;
|
|
28 import org.w3c.dom.NodeList;
|
|
29 import org.xml.sax.SAXException;
|
|
30
|
41
|
31 import rep.xml.SessionXMLEncoder;
|
39
|
32
|
0
|
33 public class SessionList {
|
|
34
|
41
|
35 // Hashtable<Integer, Session> session3 = new Hashtable<Integer, Session>();
|
56
|
36 LinkedList<Session> sessionLinkedList = new LinkedList<Session>();
|
38
|
37 LinkedList<String> stringlist = new LinkedList<String>();
|
1
|
38 private int sessionID = 0;
|
|
39 private int editorCount = 0;
|
0
|
40
|
1
|
41 private SocketChannel smchannel;
|
2
|
42 private boolean channelequals = false;
|
31
|
43 private LinkedList<Session> tmpSessionList = new LinkedList<Session>();
|
80
|
44 private String maxHost;
|
31
|
45
|
|
46 public SessionList(){
|
|
47 makeDefaultSession();
|
|
48 }
|
0
|
49
|
|
50 public void add(SocketChannel channel) {
|
|
51
|
|
52 }
|
31
|
53
|
|
54 public void makeDefaultSession(){
|
41
|
55 // session3.put(0, new Session(0, null, null));
|
43
|
56 // session4.add(0, new Session(0, null, null));
|
31
|
57 }
|
0
|
58
|
|
59 public int getEditorNumber() {
|
|
60 return 0;
|
|
61
|
|
62 }
|
|
63
|
|
64 public void add(SocketChannel channel, int sid) {
|
|
65
|
|
66 }
|
|
67
|
|
68 public int addSession(SocketChannel channel, String string) {
|
|
69 sessionID++;
|
41
|
70 // session3.put(sessionID, new Session(sessionID, string, channel));
|
56
|
71 sessionLinkedList.add(new Session(sessionID, string, channel));
|
0
|
72 return sessionID;
|
|
73
|
|
74 }
|
|
75
|
1
|
76 public void addEditor(SocketChannel channel, int sid, REPCommand repCmd) {
|
|
77 int editorID = repCmd.eid;
|
41
|
78 // if(session3.get(sid) == null) System.out.println("ぬるぽ!");
|
|
79 // session3.get(sid).addEditor(editorID, channel);
|
66
|
80 sessionLinkedList.get(sid-1).addEditor(editorID, channel); //本当はforループで検索しないといけないよ。
|
0
|
81 }
|
|
82
|
|
83 public int getSessionID(SocketChannel channel) {
|
|
84 return 0;
|
|
85 }
|
|
86
|
|
87 public int getNumberOfEditor() {
|
|
88 editorCount++;
|
|
89 return editorCount;
|
|
90 }
|
2
|
91
|
0
|
92 public void sendCmd(SocketChannel channel2, REPCommand repCmd) {
|
41
|
93 // LinkedList <Editor> editorList = session3.get(repCmd.sid).getEditorList();
|
56
|
94 LinkedList <Editor> editorList = sessionLinkedList.get(repCmd.sid).getEditorList(); //ここもforループで検索しないといけないよ。
|
1
|
95 for(Editor editor : editorList){
|
|
96 SocketChannel channel = editor.getChannel();
|
0
|
97 if(channel.equals(channel2)) {
|
|
98 System.out.println("equals");
|
|
99 continue;
|
|
100 }
|
|
101 REPPacketSend repSend = new REPPacketSend(channel);
|
|
102 repSend.send(repCmd);
|
|
103 }
|
|
104 }
|
2
|
105
|
|
106 public void sendCmd(SocketChannel channel, REPCommand repCmd, boolean ring){
|
41
|
107 // LinkedList <Editor> editorList = session3.get(repCmd.sid).getEditorList();
|
56
|
108 LinkedList <Editor> editorList = sessionLinkedList.get(repCmd.sid).getEditorList(); //ここもforループで検索しないといけないよ。
|
2
|
109 REPPacketSend repsend = null;
|
|
110 for(Editor editor : editorList){
|
|
111 SocketChannel channel2 = editor.getChannel();
|
|
112 if(channel.equals(channel2)){
|
9
|
113 System.out.println("equals");
|
2
|
114 channelequals = true;
|
|
115 }else if(channelequals){
|
|
116 repsend = new REPPacketSend(channel2);
|
|
117 repsend.send(repCmd);
|
|
118 }
|
|
119 }
|
|
120 }
|
0
|
121
|
1
|
122 public void addSessionManager(SocketChannel channel, REPCommand repCmd) {
|
|
123 smchannel = channel;
|
|
124
|
|
125 }
|
|
126
|
41
|
127 // public void sendAddedSession(REPCommand repCmd) {
|
|
128 // repCmd.setCMD(REP.SMCMD_SM_JOIN);
|
|
129 // REPPacketSend repSend = new REPPacketSend(smchannel);
|
|
130 // }
|
1
|
131
|
3
|
132 public String getSessionList() {
|
41
|
133 // if (session3 != null) {
|
|
134 // System.out.println(session3.toString());
|
|
135 // return session3.toString();
|
|
136 // }
|
56
|
137 if (sessionLinkedList != null) {
|
|
138 System.out.println(sessionLinkedList.toString());
|
|
139 return sessionLinkedList.toString();
|
3
|
140 }
|
|
141 return "{}";
|
|
142 }
|
|
143
|
8
|
144 public void sendToNextEditor(SocketChannel channel, REPCommand repCmd) {
|
|
145 Editor editor2 = null;
|
|
146 Editor editor3;
|
41
|
147 // LinkedList <Editor> editorList = session3.get(repCmd.sid).getEditorList();
|
56
|
148 LinkedList <Editor> editorList = sessionLinkedList.get(repCmd.sid-1).getEditorList(); //ここもforループで検索しないといけないよ。
|
8
|
149 for(Editor editor : editorList){
|
|
150 SocketChannel channel2 = editor.getChannel();
|
|
151 if(channel.equals(channel2)){
|
|
152 editor2 = editor;
|
|
153 }
|
|
154 }
|
|
155 int size = editorList.size();
|
|
156 Editor lastEditor = (Editor) editorList.getLast();
|
|
157 if(size == 0){
|
|
158 editor3 = null;
|
|
159 }else if(editor2 == lastEditor){
|
|
160 editor3 = editorList.get(0);
|
|
161 }else{
|
|
162 editor3 = editorList.get(editorList.indexOf(editor2)+1);
|
|
163 }
|
9
|
164 if(editor3 != null){
|
|
165 REPPacketSend send = new REPPacketSend(editor3.getChannel());
|
|
166 send.send(repCmd);
|
|
167 }
|
8
|
168 }
|
|
169
|
|
170 public void addEditor(SocketChannel editorChannel, int sid, int eid) {
|
41
|
171 // session3.get(sid).addEditor(eid, editorChannel);
|
56
|
172 sessionLinkedList.get(sid-1).addEditor(eid, editorChannel);
|
8
|
173 }
|
|
174
|
|
175 public void sendSelect(int sid) {
|
41
|
176 // SocketChannel channel = session3.get(sid).getMaster().getChannel();
|
56
|
177 SocketChannel channel = sessionLinkedList.get(sid-1).getMaster().getChannel();
|
8
|
178 REPPacketSend send = new REPPacketSend(channel);
|
|
179 send.send(new REPCommand(REP.SMCMD_SELECT, sid, 0, 0, 0, 0, ""));
|
|
180 }
|
|
181
|
31
|
182 public void addSession(SocketChannel channel, String string, int i) {
|
|
183 tmpSessionList.add(new Session(0, string, channel));
|
|
184 }
|
|
185
|
39
|
186 // public String getXML() {
|
|
187 ///* SessionListをXMLに書き出す。ときの形式
|
|
188 // * <Session>
|
|
189 // * <editor>
|
|
190 // * <sid/>
|
|
191 // * <host/>
|
|
192 // * <port/>
|
|
193 // * <filename/>
|
|
194 // * </editor>
|
|
195 // * <editor>
|
|
196 // * <sid/>
|
|
197 // * <host/>
|
|
198 // * <port/>
|
|
199 // * </editor>
|
|
200 // * </Session>
|
|
201 // * <SessionManager>
|
|
202 // * <host/>
|
|
203 // * <port/>
|
|
204 // * </SessionManager>
|
|
205 // * <Session>
|
|
206 // * </Session>
|
41
|
207 // *
|
39
|
208 // StringWriter str = null;
|
|
209 // try {
|
|
210 // str = new StringWriter();
|
|
211 // DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
|
212 // DocumentBuilder builder = factory.newDocumentBuilder();
|
|
213 // Document doc = builder.newDocument();
|
|
214 // Element root = doc.getDocumentElement();
|
|
215 // root = doc.createElement("SessionList");
|
|
216 // for(Session session : session4){
|
|
217 // Element element = doc.createElement("Session");
|
|
218 // root.appendChild(element);
|
|
219 // Element element2 = doc.createElement("editor");
|
|
220 // element.appendChild(element2);
|
|
221 // Editor editor = session.getMaster();
|
|
222 // Element element3 = doc.createElement(editor.getHost());
|
|
223 // Element element4 = doc.createElement(editor.getPort());
|
|
224 // Element element5 = doc.createElement(editor.getName());
|
|
225 // element5 = doc.createElement(session.getName());
|
|
226 // element2.appendChild(element3);
|
|
227 // element2.appendChild(element4);
|
|
228 // element2.appendChild(element5);
|
|
229 //
|
|
230 // }
|
|
231 // doc.appendChild(root);
|
38
|
232 //
|
39
|
233 // TransformerFactory tfactory = TransformerFactory.newInstance();
|
|
234 // Transformer transformer = tfactory.newTransformer();
|
|
235 // StreamResult result = new StreamResult(str);
|
|
236 // //transformer.transform(new DOMSource(doc), new StreamResult(System.out));
|
|
237 // transformer.transform(new DOMSource(doc), result);
|
|
238 // System.out.println(str);
|
|
239 ////
|
|
240 //// XMLEncoder e = new XMLEncoder(System.out);
|
|
241 //// e.writeObject(session4);
|
|
242 //// e.writeObject(stringlist);
|
|
243 //// e.close();
|
|
244 //
|
|
245 // //System.out.println(doc);
|
|
246 // }catch (Exception e){
|
|
247 // e.printStackTrace();
|
|
248 // }
|
|
249 // return str.toString();
|
41
|
250 // }*/
|
39
|
251
|
|
252 public LinkedList<Session> getList() {
|
56
|
253 return sessionLinkedList;
|
39
|
254 }
|
|
255
|
|
256 public String toXML() {
|
56
|
257 SessionXMLEncoder encoder = new SessionXMLEncoder(sessionLinkedList);
|
39
|
258 encoder.sessionListToXML();
|
|
259 return null;
|
|
260 }
|
|
261
|
|
262 public int addSession(Session session) {
|
|
263 sessionID++;
|
41
|
264 // session3.put(sessionID, session);
|
56
|
265 session.setSID(sessionID);
|
|
266 sessionLinkedList.add(session);
|
39
|
267 return sessionID;
|
38
|
268 }
|
|
269
|
56
|
270 public void addToRoutingTable(SocketChannel channel) {
|
|
271
|
|
272 }
|
|
273
|
66
|
274 public Session getSession(int sid) {
|
|
275 return sessionLinkedList.get(sid - 1);
|
|
276 }
|
|
277
|
80
|
278 public void setMaxHost(String myHost) {
|
77
|
279 // TODO Auto-generated method stub
|
80
|
280 maxHost = myHost;
|
77
|
281 }
|
|
282
|
82
|
283 public String getMaxHost() {
|
77
|
284 // TODO Auto-generated method stub
|
80
|
285 return maxHost;
|
77
|
286 }
|
|
287
|
|
288 public void setList(LinkedList<Session> list) {
|
|
289 // TODO Auto-generated method stub
|
|
290 sessionLinkedList = list;
|
|
291 }
|
|
292
|
|
293
|
0
|
294 }
|