view src/fdl/test/debug2/NodeProperty.java @ 92:ea4ee892baf5

commit
author kazz <kazz@cr.ie.u-ryukyu.ac.jp>
date Thu, 22 Apr 2010 16:13:03 +0900
parents
children
line wrap: on
line source

package fdl.test.debug2;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.HashMap;

import fdl.MetaLinda;
import fdl.PSXLinda;

public class NodeProperty {
	public static int DEFAULTPORT = 10000;
	
	public String localHostName;
	public int localPort;
	public PSXLinda manager;
	public String managerHostName;
	public int managerPort = DEFAULTPORT;

	public int nodeId;
	public boolean running = true;
	public boolean connected = false;
	public boolean debugConnected = false;
	public HashMap<TupleId, Routing> nodes = new HashMap<TupleId, Routing>();
	public MetaLinda ml;
	
	public NodeProperty(int port, MetaLinda ml, String managerHostName, int managerPort) {
		this.ml = ml;
		this.localPort = port;
		this.managerHostName = managerHostName;
		this.managerPort = managerPort;
		try {
			this.localHostName = InetAddress.getLocalHost().getHostName();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		manager = connectServer(this.managerHostName, this.managerPort);
		sendLocalHostName();
	}
	
	protected void sendLocalHostName() {
		// TopologyManager に自分のホストネームを送信して、起動を伝える
		ByteBuffer local = ByteBuffer.wrap((localHostName + ":" + localPort).getBytes());
		manager.out(TupleId.MANAGE.id, local);
	}
	
	protected PSXLinda connectServer(String hostName, int port) {
		PSXLinda linda = null;
		boolean connectPSX = true;
		while (connectPSX) {
			try {
				linda = ml.open(hostName, port);
				connectPSX = false;
			} catch (IOException e) {
				try {
					Thread.sleep(40);
				} catch (InterruptedException e1) {
				}
			}
		}
		Debug.print("Connect to " + hostName);
		return linda;
	}
	
}