diff src/main/java/alice/topology/manager/SearchHostName.java @ 429:1b32ea1263f3 dispose

work but have bug
author sugi
date Tue, 22 Jul 2014 18:44:18 +0900 (2014-07-22)
parents
children 59e84cd75403
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/topology/manager/SearchHostName.java	Tue Jul 22 18:44:18 2014 +0900
@@ -0,0 +1,71 @@
+package alice.topology.manager;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.DataSegment;
+import alice.datasegment.Receiver;
+import alice.topology.HostMessage;
+
+public class SearchHostName extends CodeSegment {
+
+    private Receiver info = ids.create(CommandType.TAKE);  // reconnect NodeInfo
+    private Receiver info1 = ids.create(CommandType.TAKE); // topology recode (HashMap)
+
+    public SearchHostName(){
+        info.setKey("reconnect");
+        info1.setKey("topology");
+    }
+
+    @Override
+    public void run() {
+        HostMessage hostInfo = info.asClass(HostMessage.class);
+        @SuppressWarnings("unchecked")
+        HashMap<String, LinkedList<HostMessage>> topology = info1.asClass(HashMap.class);
+
+        DataSegment.remove(hostInfo.absName);
+        DataSegment.connect(hostInfo.absName, "", hostInfo.name, hostInfo.port);
+        ods.put(hostInfo.absName, "host", hostInfo.absName);
+        
+        // put Host dataSegment on reconnect node 
+        if (topology.containsKey(hostInfo.absName)) {
+            LinkedList<HostMessage> clist = topology.get(hostInfo.absName);
+            for (HostMessage node : clist)
+                ods.put(hostInfo.absName, node);
+
+        }
+
+        // update topology information
+        for (LinkedList<HostMessage> list :topology.values()){
+            for (HostMessage host : list){
+
+                // find and update old info 
+                if (hostInfo.absName.equals(host.absName)){ 
+                    if (!hostInfo.name.equals(host.name) || (hostInfo.port != host.port)){ 
+                        list.remove(host);
+                        HostMessage newHost = new HostMessage(hostInfo.name, hostInfo.port, host.connectionName, host.reverseName);
+                        newHost.absName = host.absName;
+                        newHost.remoteAbsName = host.remoteAbsName;
+
+                        ods.put(host.remoteAbsName, newHost);
+                        list.add(newHost);
+                    } else {
+                        // nothing to do ?
+                    }
+                }
+            }
+        }
+        
+        for (LinkedList<HostMessage> list :topology.values()){
+            System.out.print(list.get(0).remoteAbsName+" : ");
+            for (HostMessage host : list){
+                System.out.print("[ "+host.absName+" "+host.name+" "+host.port+" "+host.connectionName+" "+host.reverseName+" "+host.remoteAbsName+" ]");
+            }
+            System.out.println();
+        }
+        ods.put("topology", topology);
+    }
+
+}