0
|
1 package rep;
|
|
2
|
275
|
3 import java.util.Iterator;
|
1
|
4 import java.util.LinkedList;
|
131
|
5 import rep.channel.REPSocketChannel;
|
|
6
|
0
|
7 public class Session {
|
316
|
8 private Forwarder masterEditor;
|
1
|
9 private int sessionID;
|
|
10 private String sessionName;
|
319
|
11 private LinkedList<EditorPlus> editorList = new LinkedList<EditorPlus>();
|
67
|
12 private boolean isOwner = false;
|
319
|
13 private int eidSeed = 0;
|
|
14 private Forwarder firstForwarder;
|
9
|
15
|
319
|
16 public Session(int sid, String name, Forwarder editor) {
|
227
|
17 this(sid, editor);
|
|
18 sessionName = name;
|
1
|
19 }
|
320
|
20
|
39
|
21
|
319
|
22 public Session(int sid, Forwarder editor) {
|
144
|
23 sessionID = sid;
|
320
|
24 if (editor!=null) {
|
|
25 // we have a master
|
|
26 masterEditor = editor;
|
|
27 editor.setSID(sid);
|
|
28 editorList.add(editor);
|
|
29 if(editor.channel!=null) firstForwarder = editor;
|
|
30 }
|
1
|
31 }
|
319
|
32
|
|
33 public void addForwarder(Forwarder forwarder) {
|
320
|
34 // add a forwarder and connect this to the session
|
319
|
35 Forwarder last = (Forwarder)editorList.getLast();
|
|
36 forwarder.setNext(last.getNextForwarder());
|
|
37 last.setNext(forwarder);
|
|
38 editorList.add(forwarder);
|
|
39 if(firstForwarder==null) firstForwarder = forwarder;
|
|
40 }
|
|
41
|
320
|
42 public void addEditor(Editor editor) {
|
|
43 // add a not-connected editor in a sassion
|
|
44 // the editor is outside of this manager
|
|
45 editorList.add(editor);
|
|
46 }
|
|
47
|
319
|
48 public LinkedList<EditorPlus> getEditorList() {
|
1
|
49 return editorList;
|
|
50 }
|
319
|
51
|
3
|
52 public String toString(){
|
|
53 return sessionName;
|
|
54 }
|
56
|
55 public int getSID() {
|
|
56 return sessionID;
|
38
|
57 }
|
316
|
58 public Forwarder getOwner() {
|
38
|
59 return masterEditor;
|
|
60 }
|
|
61 public String getName() {
|
|
62 return sessionName;
|
|
63 }
|
319
|
64
|
|
65 public int newEid() {
|
|
66 int eid=0;
|
|
67 boolean flag = true;
|
|
68 while(flag) {
|
|
69 eid=eidSeed++;
|
|
70 for(EditorPlus e:editorList) {
|
322
|
71 if((flag = (eid==e.eid))) break;
|
319
|
72 }
|
|
73 }
|
|
74 return eid;
|
39
|
75 }
|
274
|
76
|
|
77 public boolean deleteEditor(REPSocketChannel<REPCommand> channel) {
|
|
78 boolean flag = false;
|
275
|
79
|
319
|
80 for (Iterator<EditorPlus> it = editorList.iterator();it.hasNext(); ) {
|
|
81 Forwarder e = (Forwarder)it.next();
|
275
|
82 if (e.getChannel()==channel) {
|
319
|
83 unconnect(e);
|
275
|
84 it.remove(); // to avoid concurrent modification
|
274
|
85 flag = true;
|
|
86 }
|
|
87 }
|
|
88 return flag;
|
|
89 }
|
|
90
|
319
|
91 private void unconnect(Forwarder e) {
|
|
92 for(EditorPlus e1:editorList) {
|
|
93 Forwarder f = (Forwarder)e1;
|
|
94 if(f.next==e)
|
|
95 f.next=e.next;
|
|
96 }
|
|
97 if(firstForwarder==e) firstForwarder=null;
|
|
98 if(masterEditor==e) masterEditor=null;
|
|
99 // if no masterEditor we should delete session also...
|
|
100 }
|
|
101
|
227
|
102 public void setSID(int sid) {
|
|
103 sessionID = sid;
|
56
|
104 }
|
274
|
105
|
158
|
106 public boolean hasOwner() {
|
67
|
107 return isOwner;
|
|
108 }
|
319
|
109
|
158
|
110 public void hasOwner(boolean b) {
|
320
|
111 isOwner = b;
|
66
|
112 }
|
319
|
113
|
144
|
114 public Editor getEditor(REPSocketChannel<REPCommand> channel) {
|
319
|
115 for(EditorPlus editor : editorList){
|
|
116 if(editor.getChannel() == channel) {
|
|
117 return (Editor)editor;
|
|
118 }
|
144
|
119 }
|
|
120 return null;
|
|
121 }
|
315
|
122
|
|
123
|
316
|
124 Forwarder getNextEditor(Forwarder editor) {
|
319
|
125 return editor.getNextForwarder();
|
167
|
126 }
|
319
|
127
|
259
|
128 public void closeSession() {
|
319
|
129 EditorPlus e = editorList.getFirst();
|
|
130 Forwarder first = (Forwarder)e;
|
|
131 REPCommand command = new REPCommand(REP.REPCMD_CLOSE, sessionID, REP.SM_EID.id, 0, 0, "");
|
|
132 if (first!=null)
|
|
133 first.send(command);
|
300
|
134 }
|
316
|
135
|
319
|
136
|
|
137 public boolean deleteForwarder(Forwarder editor) {
|
|
138 unconnect(editor);
|
|
139 return editorList.remove(editor);
|
316
|
140 }
|
|
141
|
319
|
142 public Forwarder getFirstForwarder() {
|
|
143 return firstForwarder;
|
316
|
144 }
|
319
|
145
|
320
|
146
|
0
|
147 }
|