# HG changeset patch # User pin # Date 1195189105 -32400 # Node ID 6ead43b2475e4b1fe495417e34f56308b3331a12 # Parent 57a16534ba5ad9f60f41e6e7e915144d4d615822 *** empty log message *** diff -r 57a16534ba5a -r 6ead43b2475e rep/Editor.java --- a/rep/Editor.java Tue Nov 13 20:44:21 2007 +0900 +++ b/rep/Editor.java Fri Nov 16 13:58:25 2007 +0900 @@ -1,10 +1,11 @@ package rep; import java.nio.channels.SocketChannel; +import java.util.StringTokenizer; public class Editor { private int eid; - private SocketChannel channel; + private SocketChannel myChannel; private SocketChannel nextChannel; private String host; private String port; @@ -13,11 +14,26 @@ public Editor(int editorNo, SocketChannel channel){ this.eid = editorNo; - this.channel = channel; + this.myChannel = channel; + } + + public Editor(SocketChannel channel) { + this.myChannel = channel; + setHostAndPort(myChannel); + } + + private void setHostAndPort(SocketChannel channel) { + String socketString = channel.socket().getRemoteSocketAddress().toString(); + String[] split = socketString.split("/"); + int length = split.length; + String hostAndPort = split[length-1]; + split = hostAndPort.split(":"); + host = split[0]; + port = split[1]; } public SocketChannel getChannel() { - return channel; + return myChannel; } public void setHost(String host){ @@ -42,7 +58,7 @@ this.eid = eid; } public String toString(){ - return ("eid:" + eid + ":" + channel.socket().getLocalSocketAddress().toString()); + return ("eid:" + eid + ":" + myChannel.socket().getLocalSocketAddress().toString()); } public String getName() { @@ -53,4 +69,9 @@ file = string; } + public void send(REPCommand repCmd) { + REPPacketSend send = new REPPacketSend(myChannel); + send.send(repCmd); + } + } diff -r 57a16534ba5a -r 6ead43b2475e rep/REPNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rep/REPNode.java Fri Nov 16 13:58:25 2007 +0900 @@ -0,0 +1,11 @@ +package rep; + +public class REPNode { + + public REPNode(Editor editor) { + } + + public REPNode(SessionManagerNode node, int sid) { + } + +} diff -r 57a16534ba5a -r 6ead43b2475e rep/RPanel.java --- a/rep/RPanel.java Tue Nov 13 20:44:21 2007 +0900 +++ b/rep/RPanel.java Fri Nov 16 13:58:25 2007 +0900 @@ -155,10 +155,10 @@ host = textField.getText(); listener.connectionOccured(new ConnectionEvent(host)); }else if(event.getSource() == buttonSelect){ - System.out.println(session_table.getSelectedRow()); - System.out.println(s_list.get(session_table.getSelectedRow()).getSID()); - System.out.println(editor_table.getSelectedRow()); - System.out.println(e_list.get(editor_table.getSelectedRow()).getEID()); + //System.out.println(session_table.getSelectedRow()); + //System.out.println(s_list.get(session_table.getSelectedRow()).getSID()); + //System.out.println(editor_table.getSelectedRow()); + //System.out.println(e_list.get(editor_table.getSelectedRow()).getEID()); actionListener.ActionOccured(new REPActionEvent((EditorPlus) comboEditor.getSelectedItem(), (SessionPlus)comboSession.getSelectedItem())); diff -r 57a16534ba5a -r 6ead43b2475e rep/Session.java --- a/rep/Session.java Tue Nov 13 20:44:21 2007 +0900 +++ b/rep/Session.java Fri Nov 16 13:58:25 2007 +0900 @@ -9,6 +9,9 @@ private int sessionID; private String sessionName; private LinkedList editorList = new LinkedList(); + private String masterHost; + private String masterPort; + private LinkedList routingTable = new LinkedList(); public Session(int sessionID, String string, SocketChannel channel) { masterEditor = new Editor(sessionID, channel); @@ -17,6 +20,8 @@ } public Session(Editor editor) { masterEditor = editor; + masterHost = editor.getHost(); + masterPort = editor.getPort(); this.sessionID = 0; this.sessionName = editor.getName(); } @@ -31,8 +36,8 @@ public String toString(){ return sessionName; } - public String getSID() { - return String.valueOf(sessionID); + public int getSID() { + return sessionID; } public Editor getMaster() { return masterEditor; @@ -43,4 +48,10 @@ public void addEditor(Editor editor) { editorList.add(editor); } + public void setSID(int sessionID2) { + sessionID = sessionID2; + } + public void addToRoutingTable(Editor editor) { + routingTable.add(new REPNode(editor)); + } } diff -r 57a16534ba5a -r 6ead43b2475e rep/SessionList.java --- a/rep/SessionList.java Tue Nov 13 20:44:21 2007 +0900 +++ b/rep/SessionList.java Fri Nov 16 13:58:25 2007 +0900 @@ -33,7 +33,7 @@ public class SessionList { // Hashtable session3 = new Hashtable(); - LinkedList session4 = new LinkedList(); + LinkedList sessionLinkedList = new LinkedList(); LinkedList stringlist = new LinkedList(); private int sessionID = 0; private int editorCount = 0; @@ -67,7 +67,7 @@ public int addSession(SocketChannel channel, String string) { sessionID++; // session3.put(sessionID, new Session(sessionID, string, channel)); - session4.add(new Session(sessionID, string, channel)); + sessionLinkedList.add(new Session(sessionID, string, channel)); return sessionID; } @@ -76,7 +76,7 @@ int editorID = repCmd.eid; // if(session3.get(sid) == null) System.out.println("ぬるぽ!"); // session3.get(sid).addEditor(editorID, channel); - session4.get(sid).addEditor(editorID, channel); //本当はforループで検索しないといけないよ。 + sessionLinkedList.get(sid).addEditor(editorID, channel); //本当はforループで検索しないといけないよ。 } public int getSessionID(SocketChannel channel) { @@ -90,7 +90,7 @@ public void sendCmd(SocketChannel channel2, REPCommand repCmd) { // LinkedList editorList = session3.get(repCmd.sid).getEditorList(); - LinkedList editorList = session4.get(repCmd.sid).getEditorList(); //ここもforループで検索しないといけないよ。 + LinkedList editorList = sessionLinkedList.get(repCmd.sid).getEditorList(); //ここもforループで検索しないといけないよ。 for(Editor editor : editorList){ SocketChannel channel = editor.getChannel(); if(channel.equals(channel2)) { @@ -104,7 +104,7 @@ public void sendCmd(SocketChannel channel, REPCommand repCmd, boolean ring){ // LinkedList editorList = session3.get(repCmd.sid).getEditorList(); - LinkedList editorList = session4.get(repCmd.sid).getEditorList(); //ここもforループで検索しないといけないよ。 + LinkedList editorList = sessionLinkedList.get(repCmd.sid).getEditorList(); //ここもforループで検索しないといけないよ。 REPPacketSend repsend = null; for(Editor editor : editorList){ SocketChannel channel2 = editor.getChannel(); @@ -133,9 +133,9 @@ // System.out.println(session3.toString()); // return session3.toString(); // } - if (session4 != null) { - System.out.println(session4.toString()); - return session4.toString(); + if (sessionLinkedList != null) { + System.out.println(sessionLinkedList.toString()); + return sessionLinkedList.toString(); } return "{}"; } @@ -144,7 +144,7 @@ Editor editor2 = null; Editor editor3; // LinkedList editorList = session3.get(repCmd.sid).getEditorList(); - LinkedList editorList = session4.get(repCmd.sid-1).getEditorList(); //ここもforループで検索しないといけないよ。 + LinkedList editorList = sessionLinkedList.get(repCmd.sid-1).getEditorList(); //ここもforループで検索しないといけないよ。 for(Editor editor : editorList){ SocketChannel channel2 = editor.getChannel(); if(channel.equals(channel2)){ @@ -168,12 +168,12 @@ public void addEditor(SocketChannel editorChannel, int sid, int eid) { // session3.get(sid).addEditor(eid, editorChannel); - session4.get(sid).addEditor(eid, editorChannel); + sessionLinkedList.get(sid-1).addEditor(eid, editorChannel); } public void sendSelect(int sid) { // SocketChannel channel = session3.get(sid).getMaster().getChannel(); - SocketChannel channel = session4.get(sid).getMaster().getChannel(); + SocketChannel channel = sessionLinkedList.get(sid-1).getMaster().getChannel(); REPPacketSend send = new REPPacketSend(channel); send.send(new REPCommand(REP.SMCMD_SELECT, sid, 0, 0, 0, 0, "")); } @@ -249,11 +249,11 @@ // }*/ public LinkedList getList() { - return session4; + return sessionLinkedList; } public String toXML() { - SessionXMLEncoder encoder = new SessionXMLEncoder(session4); + SessionXMLEncoder encoder = new SessionXMLEncoder(sessionLinkedList); encoder.sessionListToXML(); return null; } @@ -261,8 +261,13 @@ public int addSession(Session session) { sessionID++; // session3.put(sessionID, session); - session4.add(session); + session.setSID(sessionID); + sessionLinkedList.add(session); return sessionID; } + public void addToRoutingTable(SocketChannel channel) { + + } + } diff -r 57a16534ba5a -r 6ead43b2475e rep/SessionManager.java --- a/rep/SessionManager.java Tue Nov 13 20:44:21 2007 +0900 +++ b/rep/SessionManager.java Fri Nov 16 13:58:25 2007 +0900 @@ -10,6 +10,7 @@ import java.nio.channels.SocketChannel; import java.util.StringTokenizer; +import rep.xml.SessionXMLDecoder; import rep.xml.SessionXMLEncoder; //+-------+--------+--------+-------+--------+---------+------+ @@ -146,11 +147,28 @@ break; case REP.SMCMD_PUT: - if(repCmd.string.length() == 0){ - sessionlist.addEditor(channel, 0, 0); - }else if(repCmd.string.length() > 0){ - int sid = sessionlist.addSession(channel, repCmd.string); - sessionlist.addEditor(channel, sid, 0); + Editor editor = new Editor(channel); + editor.setEID(1); + editor.setName(repCmd.string); + Session session = new Session(editor); + sessionlist.addSession(session); + sessionmanagerGUI.setComboSession(session.getSID(), session.getName()); + session.addToRoutingTable(editor); + repCmd.setCMD(REP.SMCMD_PUT_ACK); + repCmd.setEID(1); + editor.send(repCmd); + + //if(isMaster){ + SessionXMLEncoder encoder = new SessionXMLEncoder(session); + REPCommand command = new REPCommand(); + command.setSID(session.getSID()); + command.setString(encoder.sessionListToXML()); + if(isMaster){ + command.setCMD(REP.SMCMD_UPDATE_ACK); + smList.sendToSlave(command); + }else{ + command.setCMD(REP.SMCMD_UPDATE); + smList.sendToMaster(command); } break; @@ -190,12 +208,19 @@ break; case REP.SMCMD_UPDATE: - int sessionID2 = sessionlist.addSession(channel, repCmd.string); //Sessionを作成 - sessionlist.addEditor(channel, sessionID2, repCmd); - sessionmanagerGUI.setComboSession(sessionID2, repCmd.string); //ComboBoxにSessionを追加 + //int sessionID2 = sessionlist.addSession(channel, repCmd.string); //Sessionを作成 + //sessionlist.addEditor(channel, sessionID2, repCmd); + //sessionmanagerGUI.setComboSession(sessionID2, repCmd.string); //ComboBoxにSessionを追加 + SessionXMLDecoder decoder = new SessionXMLDecoder(repCmd.string); + Editor editor1 = new Editor(channel); + //editor1.setHost(decoder.getHost()); + //editor1.setPort(decoder.getPort()); + + smList.sendToMaster(repCmd); break; case REP.SMCMD_UPDATE_ACK: + smList.sendToSlave(repCmd); break; case REP.REPCMD_READ: diff -r 57a16534ba5a -r 6ead43b2475e rep/SessionManagerList.java --- a/rep/SessionManagerList.java Tue Nov 13 20:44:21 2007 +0900 +++ b/rep/SessionManagerList.java Fri Nov 16 13:58:25 2007 +0900 @@ -4,6 +4,8 @@ import java.util.LinkedList; import java.util.List; +import rep.xml.SessionXMLEncoder; + public class SessionManagerList { private List list = new LinkedList(); @@ -47,9 +49,9 @@ this.master = channel; } - public void sendSessionList(SessionList sessionlist, REPCommand command) { - String xml = sessionlist.toXML(); - command.setString(xml); + public void sendSessionList(SessionList sessionlist, REPCommand command) { + SessionXMLEncoder encoder = new SessionXMLEncoder(sessionlist); + command.setString(encoder.sessionListToXML()); for(SocketChannel channel : list){ REPPacketSend send = new REPPacketSend(channel); @@ -61,4 +63,16 @@ } + public void sendToMaster(REPCommand repCmd) { + REPPacketSend send = new REPPacketSend(master); + send.send(repCmd); + } + + public void sendToSlave(REPCommand repCmd) { + for(SocketChannel channel : list){ + REPPacketSend send = new REPPacketSend(channel); + send.send(repCmd); + } + } + } diff -r 57a16534ba5a -r 6ead43b2475e rep/SessionManagerNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rep/SessionManagerNode.java Fri Nov 16 13:58:25 2007 +0900 @@ -0,0 +1,10 @@ +package rep; + +import java.nio.channels.SocketChannel; + +public class SessionManagerNode { + + public SessionManagerNode(SocketChannel channel) { + } + +} diff -r 57a16534ba5a -r 6ead43b2475e rep/xml/SessionXMLDecoder.java --- a/rep/xml/SessionXMLDecoder.java Tue Nov 13 20:44:21 2007 +0900 +++ b/rep/xml/SessionXMLDecoder.java Fri Nov 16 13:58:25 2007 +0900 @@ -1,5 +1,79 @@ package rep.xml; +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.StringReader; +import java.io.StringWriter; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import rep.SessionList; + public class SessionXMLDecoder { + + private String sessionListSize; + private String[] sessionInfo; + + + public SessionXMLDecoder(String string) { + decode(string); + } + + public SessionXMLDecoder() { + // TODO Auto-generated constructor stub + } + + public SessionList decode(String string) { + SessionList sessionlist = null; + System.out.println(""); + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + InputSource source = new InputSource(new StringReader(string)); + source.setEncoding("UTF-8"); + Document doc = builder.parse(source); + Element root = doc.getDocumentElement(); + System.out.println(root.getTagName()); + + seachNode(root.getChildNodes()); + + System.out.println(sessionListSize); + + + } catch (Exception e) { + e.printStackTrace(); + } + return sessionlist; + } + + private void seachNode(NodeList list) { + String[] host_port_name = new String[3]; + for(int i = 0; i < list.getLength(); i++){ + Element element = null; + if(list.item(i) instanceof Element) { + element = (Element) list.item(i); + System.out.println(element.getNodeName()); + }else{ + String string = list.item(i).getNodeValue(); + sessionListSize += string; + host_port_name[i] = string; + System.out.println(" " + i + ":" + string); + } + if(element != null) seachNode(element.getChildNodes()); + } + } } diff -r 57a16534ba5a -r 6ead43b2475e rep/xml/SessionXMLEncoder.java --- a/rep/xml/SessionXMLEncoder.java Tue Nov 13 20:44:21 2007 +0900 +++ b/rep/xml/SessionXMLEncoder.java Fri Nov 16 13:58:25 2007 +0900 @@ -18,7 +18,7 @@ import rep.SessionList; public class SessionXMLEncoder { - private LinkedList list; + private LinkedList list = new LinkedList(); public SessionXMLEncoder(SessionList list) { } @@ -30,6 +30,10 @@ public SessionXMLEncoder() { } + public SessionXMLEncoder(Session session) { + list.add(session); + } + public String sessionListToXML() { /* SessionListをXMLに書き出す。ときの形式 * diff -r 57a16534ba5a -r 6ead43b2475e test/XMLTest.java --- a/test/XMLTest.java Tue Nov 13 20:44:21 2007 +0900 +++ b/test/XMLTest.java Fri Nov 16 13:58:25 2007 +0900 @@ -3,6 +3,7 @@ import rep.Editor; import rep.Session; import rep.SessionList; +import rep.xml.SessionXMLDecoder; import rep.xml.SessionXMLEncoder; public class XMLTest { @@ -27,6 +28,9 @@ SessionXMLEncoder encoder = new SessionXMLEncoder(sessionlist.getList()); System.out.println(encoder.sessionListToXML()); - //list.getXML(); + + SessionXMLDecoder decoder = new SessionXMLDecoder(); + decoder.decode(encoder.sessionListToXML()); + } }