annotate test/channeltest/testSeMaSlave.java @ 471:d2762d669617

sleep command to wait for singleton prevention
author one
date Tue, 12 Oct 2010 10:19:59 +0900
parents c5be84d53c7f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
1 package test.channeltest;
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
2
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
3 import java.io.IOException;
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
4 import java.net.SocketAddress;
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
5 import java.util.LinkedList;
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
6 import java.net.InetSocketAddress;
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
7 import java.nio.channels.SelectionKey;
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
8 import java.nio.channels.Selector;
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
9
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
10 import rep.channel.REPLogger;
205
dfc2afab1325 *** empty log message ***
kono
parents: 187
diff changeset
11 import rep.channel.REPPack;
dfc2afab1325 *** empty log message ***
kono
parents: 187
diff changeset
12 import rep.channel.REPSelectionKey;
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
13 import rep.channel.REPSelector;
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
14 import rep.channel.REPServerSocketChannel;
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
15 import rep.channel.REPSocketChannel;
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
16
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
17 public class testSeMaSlave extends Thread{
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
18
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
19 SocketAddress ownIP;
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
20 SocketAddress masterIP;
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
21 boolean running=true;
161
5b4be02e7243 *** empty log message ***
kono
parents: 159
diff changeset
22 REPLogger ns;
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
23 LinkedList<ClientInfo> cis;
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
24
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
25 public testSeMaSlave(String name, String oname,int oport, String mname,int mport){
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
26 super(name);
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
27 ownIP = new InetSocketAddress(oname,oport);
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
28 masterIP = new InetSocketAddress(mname,mport);
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
29 cis = new LinkedList<ClientInfo>();
174
72252e970a8b *** empty log message ***
kent
parents: 161
diff changeset
30 ns = REPLogger.singleton();
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
31 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
32 public void init(){
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
33
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
34 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
35
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
36 public void run() {
205
dfc2afab1325 *** empty log message ***
kono
parents: 187
diff changeset
37 REPSelector<String> selector;
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
38 REPSocketChannel<String> masterCH ;
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
39 try {
205
dfc2afab1325 *** empty log message ***
kono
parents: 187
diff changeset
40 REPPack<String> pack = new StringPacker();
dfc2afab1325 *** empty log message ***
kono
parents: 187
diff changeset
41 REPServerSocketChannel<String> scs = REPServerSocketChannel.<String>open(pack);
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
42 selector = REPSelector.create();
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
43 masterCH = connectToMaster(selector);
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
44 scs.socket().bind(ownIP);
206
a2aaf8af7bcc *** empty log message ***
kono
parents: 205
diff changeset
45 scs.configureBlocking(false);
180
f34608ae1ed2 *** empty log message ***
kent
parents: 174
diff changeset
46 scs.register(selector, SelectionKey.OP_ACCEPT,null);
206
a2aaf8af7bcc *** empty log message ***
kono
parents: 205
diff changeset
47 masterCH.configureBlocking(false);
180
f34608ae1ed2 *** empty log message ***
kent
parents: 174
diff changeset
48 masterCH.register(selector, SelectionKey.OP_READ,null);
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
49
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
50
208
302c4a0afab6 *** empty log message ***
kono
parents: 207
diff changeset
51 ns.writeLog("Slave SessionManager starts main routin.", 1);
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
52
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
53 /* Main Loop */
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
54 while(running){
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
55
248
e72e0eae1261 *** empty log message ***
kent
parents: 235
diff changeset
56 selector.select();
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
57
205
dfc2afab1325 *** empty log message ***
kono
parents: 187
diff changeset
58 for(REPSelectionKey<String> key : selector.selectedKeys1()){
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
59
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
60 if(key.isAcceptable()){
205
dfc2afab1325 *** empty log message ***
kono
parents: 187
diff changeset
61 REPSocketChannel<String> channel = key.accept(pack);
dfc2afab1325 *** empty log message ***
kono
parents: 187
diff changeset
62 if(channel==null) continue;
dfc2afab1325 *** empty log message ***
kono
parents: 187
diff changeset
63 channel.configureBlocking(false);
248
e72e0eae1261 *** empty log message ***
kent
parents: 235
diff changeset
64 //selector.register(channel, SelectionKey.OP_READ,null);
e72e0eae1261 *** empty log message ***
kent
parents: 235
diff changeset
65 channel.register(selector, SelectionKey.OP_READ, null);
174
72252e970a8b *** empty log message ***
kent
parents: 161
diff changeset
66 ns.writeLog("accepts a client.", 1);
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
67
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
68 }else if(key.isReadable()){
268
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
69 try {
308
c5be84d53c7f *** empty log message ***
kono
parents: 273
diff changeset
70 REPSocketChannel<String> channel = key.channel1();
268
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
71 String packet = channel.read();
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
72 if (packet==null) continue;
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
73 //if (channel==masterCH){
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
74 if (packet.matches("^SeMa\\d.*")){
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
75 ns.writeLog("receives String from master ==> `"+packet+"\'", 1);
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
76 for (ClientInfo ci: cis){
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
77 if (!packet.matches(".*"+ci.str+".*")) continue;
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
78 ci.channel.write(this.getName()+": loopback master ==>`"+packet+"\'");
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
79 }
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
80 }else{
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
81 ns.writeLog("receives String==> `"+packet+"\'", 1);
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
82 //channlel.write("from "+this.getName()+": save");
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
83 masterCH.write(this.getName()+": pass packet`"+packet+"\'");
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
84 cis.add(new ClientInfo(packet, channel));
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
85 }
268
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
86 }catch (IOException e1) {
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
87 ns.writeLog("channel "+ns+" closed.");
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
88 key.cancel();
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
89 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
90 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
91 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
92 }
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
93 } catch (IOException e1) {
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
94 e1.printStackTrace();
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
95 }
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
96
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
97 }
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
98
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
99 private REPSocketChannel<String> connectToMaster(Selector _selector) throws IOException {
187
fc8ee7600cf3 *** empty log message ***
kent
parents: 180
diff changeset
100 REPSocketChannel<String> channel = REPSocketChannel.<String>create(new StringPacker());
174
72252e970a8b *** empty log message ***
kent
parents: 161
diff changeset
101 ns.writeLog("is connecting to masterSeMa whose ip is"+masterIP, 1);
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
102 while(!channel.connect(masterIP)){
174
72252e970a8b *** empty log message ***
kent
parents: 161
diff changeset
103 ns.writeLog("SeMa not listen to socket yet, wait", 1);
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
104 Thread.yield();
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
105 }
174
72252e970a8b *** empty log message ***
kent
parents: 161
diff changeset
106 ns.writeLog("connecting was successful.", 1);
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
107
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
108 return channel;
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
109 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
110 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
111 class ClientInfo{
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
112 String str;
159
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
113 REPSocketChannel<String> channel;
ecab03b50e08 *** empty log message ***
kono
parents: 157
diff changeset
114 ClientInfo(String _str, REPSocketChannel<String> _channel){
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
115 str = _str;
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
116 channel = _channel;
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
117 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
118 }