annotate src/fdl/test/topology/MetaProtocolEngine.java @ 97:0ea086f0e96f fuchita

main loop modification, for easy meta engine addition. add comments.
author one
date Wed, 26 May 2010 10:49:50 +0900
parents 04bd4ae97e7c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
1 package fdl.test.topology;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
2
e8b757d7d0af (no commit message)
one
parents:
diff changeset
3 import java.io.IOException;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
4 import java.net.InetAddress;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
5 import java.net.UnknownHostException;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
6
e8b757d7d0af (no commit message)
one
parents:
diff changeset
7 import java.nio.ByteBuffer;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
8 import java.util.ArrayList;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
9
e8b757d7d0af (no commit message)
one
parents:
diff changeset
10 import fdl.MetaEngine;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
11 import fdl.MetaLinda;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
12 import fdl.PSXLinda;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
13 import fdl.PSXReply;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
14
e8b757d7d0af (no commit message)
one
parents:
diff changeset
15 /**
e8b757d7d0af (no commit message)
one
parents:
diff changeset
16 * MetaProtocolEngine
e8b757d7d0af (no commit message)
one
parents:
diff changeset
17 *
e8b757d7d0af (no commit message)
one
parents:
diff changeset
18 * @author Kazuki Akamine
e8b757d7d0af (no commit message)
one
parents:
diff changeset
19 *
e8b757d7d0af (no commit message)
one
parents:
diff changeset
20 * 接続する機能までを実装した MetaEngine
e8b757d7d0af (no commit message)
one
parents:
diff changeset
21 * これを継承して、具体的な処理を書く
e8b757d7d0af (no commit message)
one
parents:
diff changeset
22 *
e8b757d7d0af (no commit message)
one
parents:
diff changeset
23 */
e8b757d7d0af (no commit message)
one
parents:
diff changeset
24
e8b757d7d0af (no commit message)
one
parents:
diff changeset
25 public class MetaProtocolEngine implements MetaEngine {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
26 // Fields
79
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
27 protected static String lastToken = "null";
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
28 protected static int port = 10000;
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
29 protected static int manageId = 60000;
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
30 protected PSXLinda manager, psxLocal;
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
31 protected ArrayList<PSXLinda> psxSendServers;
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
32 protected MetaLinda fdlMeta;
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
33 protected String managerHostName;
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
34 protected String localHostName;
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
35
e8b757d7d0af (no commit message)
one
parents:
diff changeset
36 // Constructor
e8b757d7d0af (no commit message)
one
parents:
diff changeset
37 public MetaProtocolEngine(MetaLinda ml, String managerHostName) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
38 this.fdlMeta = ml;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
39 this.managerHostName = managerHostName;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
40 try {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
41 this.localHostName = InetAddress.getLocalHost().getHostName();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
42 } catch (UnknownHostException e) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
43 e.printStackTrace();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
44 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
45 this.psxSendServers = new ArrayList<PSXLinda>();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
46 }
97
0ea086f0e96f main loop modification, for easy meta engine addition.
one
parents: 80
diff changeset
47 public void mainLoop(MetaLinda ml) {}
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
48
e8b757d7d0af (no commit message)
one
parents:
diff changeset
49 public void mainLoop() {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
50 psxLocal = fdlMeta;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
51 initTopologyManager();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
52 initSendServer();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
53 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
54
79
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
55 protected void initSendServer() {
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
56 sendLocalHostName();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
57 connectSendServers();
80
04bd4ae97e7c RingTopology is finished.
one
parents: 79
diff changeset
58 sendLocalHostName();
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
59 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
60
79
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
61 protected void initTopologyManager() {
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
62 // Connect to TopologyManager Server
e8b757d7d0af (no commit message)
one
parents:
diff changeset
63 try {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
64 manager = fdlMeta.open(managerHostName, port);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
65 } catch (IOException e) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
66 // manager は先に立ち上げてから実行する。
e8b757d7d0af (no commit message)
one
parents:
diff changeset
67 // while で回して再接続 loop にすべき?
e8b757d7d0af (no commit message)
one
parents:
diff changeset
68 e.printStackTrace();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
69 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
70 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
71
79
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
72 protected void sendLocalHostName() {
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
73 // TopologyManager に自分のホストネームを送信して、起動を伝える
e8b757d7d0af (no commit message)
one
parents:
diff changeset
74 ByteBuffer local;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
75 local = ByteBuffer.wrap(localHostName.getBytes());
e8b757d7d0af (no commit message)
one
parents:
diff changeset
76 manager.out(manageId, local);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
77 try {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
78 manager.sync(1);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
79 } catch (IOException e) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
80 e.printStackTrace();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
81 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
82 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
83
79
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
84 protected void connectSendServers() {
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
85 // TopologyManager から、送られてくる ConnectServer の hostName を取得して接続
e8b757d7d0af (no commit message)
one
parents:
diff changeset
86 System.out.println("[DEBUG] MethodCall connectSendServers()");
e8b757d7d0af (no commit message)
one
parents:
diff changeset
87 while (true) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
88 PSXReply reply;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
89 reply = psxLocal.in(manageId);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
90 do {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
91 try {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
92 psxLocal.sync(1);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
93 } catch (IOException e) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
94 e.printStackTrace();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
95 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
96 } while (!reply.ready());
e8b757d7d0af (no commit message)
one
parents:
diff changeset
97 ByteBuffer data = reply.getData();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
98 String hostName = new String(data.array());
e8b757d7d0af (no commit message)
one
parents:
diff changeset
99 System.out.println("[DEBUG] GetReply " + hostName);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
100 if (hostName.equals(lastToken))
e8b757d7d0af (no commit message)
one
parents:
diff changeset
101 break;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
102 connectSendServer(hostName);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
103 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
104 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
105
79
805645cf5ec0 topology modifired
one
parents: 76
diff changeset
106 protected void connectSendServer(String hostName) {
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
107 PSXLinda linda;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
108 try {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
109 linda = fdlMeta.open(hostName, port);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
110 psxSendServers.add(linda);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
111 } catch (IOException e) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
112 e.printStackTrace();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
113 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
114 System.out.println("Connect to " + hostName);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
115 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
116
e8b757d7d0af (no commit message)
one
parents:
diff changeset
117 }