annotate rep/Forwarder.java @ 355:98607350f7d1

*** empty log message ***
author kono
date Fri, 17 Oct 2008 22:11:34 +0900
parents 0d47ff22ee0e
children 034acadc0cdc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
316
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
1 package rep;
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
2
349
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
3 import java.io.IOException;
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
4
353
0d47ff22ee0e *** empty log message ***
kono
parents: 349
diff changeset
5
316
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
6 import rep.channel.REPLogger;
349
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
7 import rep.channel.REPSelectionKey;
316
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
8 import rep.channel.REPSocketChannel;
317
c83a3faec487 *** empty log message ***
kono
parents: 316
diff changeset
9 import rep.handler.PacketSet;
349
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
10 import rep.handler.REPHandler;
316
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
11
349
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
12 public class Forwarder extends EditorPlus implements REPHandler {
319
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
13 int seq = 0;
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
14 Forwarder next;
316
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
15 // REPCommands we sent to the next editor
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
16 final int limit=100;
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
17 REPLogger ns = REPLogger.singleton();
317
c83a3faec487 *** empty log message ***
kono
parents: 316
diff changeset
18 SessionManager manager;
355
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
19 public REP mode = null;
316
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
20
317
c83a3faec487 *** empty log message ***
kono
parents: 316
diff changeset
21 public Forwarder(SessionManager manager) {
c83a3faec487 *** empty log message ***
kono
parents: 316
diff changeset
22 this.manager = manager;
c83a3faec487 *** empty log message ***
kono
parents: 316
diff changeset
23 }
c83a3faec487 *** empty log message ***
kono
parents: 316
diff changeset
24
319
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
25 public int seq() {
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
26 return seq++;
316
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
27 }
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
28
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
29 public void send(REPCommand command) {
318
dc57e24ea3df *** empty log message ***
kono
parents: 317
diff changeset
30 assert(command!=null);
327
7b6dede07f4a *** empty log message ***
kono
parents: 319
diff changeset
31 REPCommand c = new REPCommand(command);
328
6ceb222570cb merge is working now.
kono
parents: 327
diff changeset
32 manager.addWriteQueue(new PacketSet(channel,null, c));
316
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
33 }
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
34
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
35 public REPSocketChannel<REPCommand> getChannel() {
319
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
36 return channel;
316
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
37 }
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
38
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
39 public void setChannel(REPSocketChannel<REPCommand> channel) {
319
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
40 this.channel = channel;
316
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
41 }
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
42
318
dc57e24ea3df *** empty log message ***
kono
parents: 317
diff changeset
43 public void setQuit2(REPCommand cmd) {
dc57e24ea3df *** empty log message ***
kono
parents: 317
diff changeset
44 send(cmd);
dc57e24ea3df *** empty log message ***
kono
parents: 317
diff changeset
45 }
dc57e24ea3df *** empty log message ***
kono
parents: 317
diff changeset
46
319
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
47 public void setNext(Forwarder next) {
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
48 this.next = next;
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
49 }
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
50
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
51 public Forwarder getNextForwarder() {
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
52 return next;
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
53 }
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
54
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
55 public boolean manage(REPCommand command) {
353
0d47ff22ee0e *** empty log message ***
kono
parents: 349
diff changeset
56 next.send(command);
319
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
57 return true;
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
58 }
dfed28488274 *** empty log message ***
kono
parents: 318
diff changeset
59
349
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
60 public String toString(){
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
61 return ("Forwarder:" + channel);
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
62 }
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
63
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
64 public String getLocalHostName() {
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
65 return channel.getLocalHostName();
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
66 }
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
67
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
68 public void cancel(REPSocketChannel<REPCommand> socketChannel) {
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
69 manager.remove(socketChannel);
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
70 }
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
71
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
72 public void handle(REPSelectionKey<REPCommand> key) throws Exception {
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
73 /*
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
74 * SessionManagerから来たコマンドは、Editor関係のコマンドは、
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
75 * sessionとeidを判定して、そのeditorにforwardしてやれば良い。
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
76 * 残りは、manager.manage() で処理する。
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
77 */
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
78 REPSocketChannel<REPCommand> channel = key.channel1();
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
79 REPCommand command = channel.read();
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
80 SessionManager.logger.writeLog("REPHandlerImpl.handle() : command = " + command);
353
0d47ff22ee0e *** empty log message ***
kono
parents: 349
diff changeset
81 if (manager.sessionManage(this, command)) return;
349
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
82 Session s = manager.getSession(command.sid);
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
83 Forwarder editor = s.getFirstForwarder();
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
84 if (editor!=null) {
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
85 editor.manage(command);
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
86 } else throw new IOException();
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
87 }
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 328
diff changeset
88
355
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
89 public void setMode(REP cmd) {
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
90 mode = cmd;
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
91 }
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
92
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
93 public boolean isEditor() {
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
94 return mode==REP.SMCMD_JOIN||mode==REP.SMCMD_PUT;
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
95 }
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
96
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
97 public boolean isForwarder() {
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
98 return mode==REP.SMCMD_SM_JOIN||mode==REP.SMCMD_SM_JOIN_ACK;
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
99 }
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
100
98607350f7d1 *** empty log message ***
kono
parents: 353
diff changeset
101
316
77f443f6dc9f add session manager channel handler
kono
parents:
diff changeset
102 }