Mercurial > hg > RemoteEditor > REPSessionManager
view rep/Session.java @ 275:3be92eb54b1c
*** empty log message ***
author | kono |
---|---|
date | Wed, 24 Sep 2008 17:31:57 +0900 |
parents | ad487e63e3c8 |
children | a549bd4dadb8 |
line wrap: on
line source
package rep; import java.nio.channels.SelectionKey; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import rep.channel.REPSelectionKey; import rep.channel.REPSocketChannel; public class Session { private Editor masterEditor; private int sessionID; private String sessionName; private LinkedList<Editor> editorList = new LinkedList<Editor>(); private boolean isOwner = false; public Session(int sid, String name, Editor editor) { this(sid, editor); sessionName = name; } 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 boolean deleteEditor(REPSocketChannel<REPCommand> channel) { boolean flag = false; for (Iterator<Editor> it = editorList.iterator();it.hasNext(); ) { Editor e = it.next(); if (e.getChannel()==channel) { it.remove(); // to avoid concurrent modification flag = true; } } return flag; } public void setSID(int sid) { sessionID = sid; } 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); List<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; } public void closeSession() { REPCommand command = new REPCommand(); command.setCMD(REP.REPCMD_CLOSE); for(Editor editor : editorList){ command.setEID(editor.getEID()); editor.send(command); } } }