changeset 56:6ead43b2475e

*** empty log message ***
author pin
date Fri, 16 Nov 2007 13:58:25 +0900
parents 57a16534ba5a
children 29ab0b82988a
files rep/Editor.java rep/REPNode.java rep/RPanel.java rep/Session.java rep/SessionList.java rep/SessionManager.java rep/SessionManagerList.java rep/SessionManagerNode.java rep/xml/SessionXMLDecoder.java rep/xml/SessionXMLEncoder.java test/XMLTest.java
diffstat 11 files changed, 216 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- 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);
+	}
+
 }
--- /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) {
+	}
+
+}
--- 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()));
--- 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<Editor> editorList = new LinkedList<Editor>();
+	private String masterHost;
+	private String masterPort;
+	private LinkedList<REPNode> routingTable = new LinkedList<REPNode>();
 	
 	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));
+	}
 }
--- 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<Integer, Session> session3 = new Hashtable<Integer, Session>();
-	LinkedList<Session> session4 = new LinkedList<Session>();
+	LinkedList<Session> sessionLinkedList = new LinkedList<Session>();
 	LinkedList<String> stringlist = new LinkedList<String>();
 	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 <Editor> editorList = session3.get(repCmd.sid).getEditorList();
-		LinkedList <Editor> editorList = session4.get(repCmd.sid).getEditorList();	//ここもforループで検索しないといけないよ。
+		LinkedList <Editor> 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 <Editor> editorList = session3.get(repCmd.sid).getEditorList();
-		LinkedList <Editor> editorList = session4.get(repCmd.sid).getEditorList();	//ここもforループで検索しないといけないよ。
+		LinkedList <Editor> 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 <Editor> editorList = session3.get(repCmd.sid).getEditorList();
-		LinkedList <Editor> editorList = session4.get(repCmd.sid-1).getEditorList();	//ここもforループで検索しないといけないよ。
+		LinkedList <Editor> 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<Session> 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) {
+		
+	}
+
 }
--- 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:
--- 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<SocketChannel> list = new LinkedList<SocketChannel>();
@@ -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);
+		}
+	}
+
 }
--- /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) {
+	}
+
+}
--- 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());
+		}
+	}
 	
 }
--- 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<Session> list;
+	private LinkedList<Session> list = new LinkedList<Session>();
 
 	public SessionXMLEncoder(SessionList list) {
 	}
@@ -30,6 +30,10 @@
 	public SessionXMLEncoder() {
 	}
 
+	public SessionXMLEncoder(Session session) {
+		list.add(session);
+	}
+
 	public String sessionListToXML() {
 		/* SessionListをXMLに書き出す。ときの形式
 		 * 	<Session>
--- 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());
+
 	}
 }