Mercurial > hg > RemoteEditor > REPSessionManager
view rep/Session.java @ 217:4deaaaa6354e
*** empty log message ***
author | kono |
---|---|
date | Sun, 31 Aug 2008 00:26:35 +0900 |
parents | 3a2c6c2f9761 |
children | 6b0dd92b8e45 |
line wrap: on
line source
package rep; import java.util.LinkedList; import rep.channel.REPSocketChannel; public class Session { private Editor masterEditor; private int sessionID; private String sessionName; private LinkedList<Editor> editorList = new LinkedList<Editor>(); private LinkedList<REPNode> routingTable = new LinkedList<REPNode>(); private boolean isOwner = false; public Session(int sessionID, String string, REPSocketChannel<REPCommand> channel) { masterEditor = new Editor(sessionID, channel); this.sessionID = sessionID; this.sessionName = string; } public Session(Editor editor) { masterEditor = editor; this.sessionID = 0; this.sessionName = editor.getName(); } public Session(int sid, Editor editor) { sessionID = sid; masterEditor = editor; editorList.add(editor); } public void addEditor(int editorID, REPSocketChannel<REPCommand> channel) { editorList.add(new Editor(editorID, channel)); } public LinkedList<Editor> getEditorList() { if(editorList == null) System.out.println("null!"); return editorList; } public String toString(){ return sessionName; } public int getSID() { return sessionID; } public Editor getOwner() { return masterEditor; } public String getName() { return sessionName; } public void addEditor(Editor editor) { int eid = editorList.size(); editor.setEID(eid); editorList.add(editor); } public void setSID(int sessionID2) { sessionID = sessionID2; } public void addToRoutingTable(Editor editor) { routingTable.add(new REPNode(editor)); } public boolean hasOwner() { return isOwner; } public void hasOwner(boolean b) { isOwner = true; } public void sendToEditor(REPCommand repCmd) { for(Editor editor : editorList){ editor.getChannel().write(repCmd); } } public Editor getEditor(REPSocketChannel<REPCommand> channel) { for(Editor editor : editorList){ if(editor.getChannel() == channel) return editor; } return null; } public void translate(REPSocketChannel<REPCommand> channel, REPCommand command) { Editor editor = getEditor(channel); LinkedList<REPCommand> commandList = editor.translate(command); Editor nextEditor = getNextEditor(editor); for(REPCommand cmd: commandList){ nextEditor.send(cmd); } } private Editor getNextEditor(Editor editor) { int eid = editor.getEID(); int neid = (eid+1)%editorList.size(); Editor nextEditor = editorList.get(neid); return nextEditor; } public Editor getPrevEditor(Editor editor) { int eid = editor.getEID(); int peid = (eid + editorList.size() - 1)%editorList.size(); Editor prevEditor = editorList.get(peid); return prevEditor; } }