annotate src/fdl/FDLindaServ.java @ 4:2023d9b31af9

fix parameter
author fuchita
date Tue, 12 Feb 2008 09:15:25 +0900
parents ae7e0e92c651
children aced4bfc15af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
1
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
2 package fdl;
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
3
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
4 import java.io.IOException;
4
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
5 import java.net.InetAddress;
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
6 import java.net.InetSocketAddress;
4
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
7 //import java.nio.ByteOrder;
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
8 import java.nio.channels.SelectionKey;
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
9 import java.nio.channels.Selector;
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
10 import java.nio.channels.ServerSocketChannel;
3
ae7e0e92c651 *** empty log message ***
fuchita
parents: 0
diff changeset
11 import java.nio.channels.spi.SelectorProvider;
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
12 import java.util.Iterator;
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
13
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
14 public class FDLindaServ implements PSXQueueInterface {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
15 static final int MAX_REQ = 1;
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
16 static final int FAIL = (-1);
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
17 static final int MAX_UAER = 4;
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
18 static final int MAX_TUPLE = 65536;
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
19 static final int DEF_PORT = 10000;
4
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
20 //public static final int TIMEOUT = 5*1000;
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
21 public static Tuple[] tuple_space;
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
22
3
ae7e0e92c651 *** empty log message ***
fuchita
parents: 0
diff changeset
23 @SuppressWarnings("unchecked")
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
24 public static void main(final String[] args) throws IOException {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
25 @SuppressWarnings("unused")
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
26 final String usages = "usage: FDLindaServ [-p port]";
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
27 int port = DEF_PORT;
4
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
28 //バイトオーダー確認
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
29 //System.out.println(ByteOrder.nativeOrder().toString());
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
30
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
31 tuple_space = new Tuple[MAX_TUPLE];
4
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
32
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
33 //引数判定
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
34 try {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
35 for (int i=0; i<args.length; ++i) {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
36 if("-p".equals(args[i])) {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
37 port = Integer.parseInt(args[++i]);
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
38 } else {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
39 System.err.println(usages);
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
40 }
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
41 }
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
42 } catch (NumberFormatException e) {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
43 e.printStackTrace();
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
44 }
4
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
45 //セレクタを生成
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
46 Selector selector = SelectorProvider.provider().openSelector();
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
47 try {
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
48 //ソケット・チャネルを生成・設定
3
ae7e0e92c651 *** empty log message ***
fuchita
parents: 0
diff changeset
49 ServerSocketChannel ssChannel = SelectorProvider.provider().openServerSocketChannel();
4
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
50 InetSocketAddress address = new InetSocketAddress(InetAddress.getLocalHost(), port);
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
51 //ssChannel.socket().bind(new InetSocketAddress(port));
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
52 ssChannel.socket().bind(address);
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
53 ssChannel.configureBlocking(false);
4
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
54 //ssChannel.socket().setReuseAddress(true);
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
55 System.out.println("Server: litening at "+ssChannel);
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
56 //セレクタにチャンネルを登録
3
ae7e0e92c651 *** empty log message ***
fuchita
parents: 0
diff changeset
57 //ssChannel.register(selector, SelectionKey.OP_ACCEPT, new AcceptHandler(tuple_space));
ae7e0e92c651 *** empty log message ***
fuchita
parents: 0
diff changeset
58 //ssChannel.register(selector, ssChannel.validOps(), new AcceptHandler(tuple_space));
ae7e0e92c651 *** empty log message ***
fuchita
parents: 0
diff changeset
59 ssChannel.register(selector, SelectionKey.OP_ACCEPT, new AcceptHandler(tuple_space));
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
60
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
61 // セレクタによる監視
3
ae7e0e92c651 *** empty log message ***
fuchita
parents: 0
diff changeset
62 while (selector.keys().size() > 0) {
ae7e0e92c651 *** empty log message ***
fuchita
parents: 0
diff changeset
63 @SuppressWarnings("unused")
4
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
64 int KeyCount = selector.select();
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
65 // Iteratorを用意
3
ae7e0e92c651 *** empty log message ***
fuchita
parents: 0
diff changeset
66 Iterator it = selector.selectedKeys().iterator();
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
67 while (it.hasNext()) {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
68 // SelectionKeyを取り出す
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
69 SelectionKey selKey = (SelectionKey)it.next();
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
70
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
71 // 操作に対する処理が行われていると認識させるためにremoveする
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
72 it.remove();
3
ae7e0e92c651 *** empty log message ***
fuchita
parents: 0
diff changeset
73
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
74 TupleHandler handler = (TupleHandler)selKey.attachment();
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
75 handler.handle(selKey);
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
76 }
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
77
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
78 }
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
79 } catch (IOException exc) {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
80 exc.printStackTrace();
4
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
81 } /*finally {
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
82 try {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
83 for (SelectionKey key: selector.keys()) {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
84 key.channel().close();
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
85 }
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
86 } catch(IOException ex) {
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
87 ex.printStackTrace();
4
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
88 }*/
2023d9b31af9 fix parameter
fuchita
parents: 3
diff changeset
89 //}
0
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
90 }
083a0b5e12cc Apply Debug Interface version start
fuchita
parents:
diff changeset
91 }