view src/fdl/test/transfer/cluster/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 5336bafaaf48
children
line wrap: on
line source

package fdl.test.transfer.cluster;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.text.SimpleDateFormat;
import java.util.Date;

import fdl.MetaEngine;
import fdl.MetaLinda;
import fdl.PSXLinda;
import fdl.PSXReply;

public class MetaProtocolEngine implements MetaEngine {
	private int id = 10;

	private PSXLinda psxget;
	MetaLinda fdlmeta;
	String host;
	int port = 10000;
	private PSXLinda psxsend;
	private int chknum;

	SimpleDateFormat DF = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");

	private int bufsize;

	private String time;
	private long timelong;
	private String start;
	private String txt;
	private String transfer;
	private long transferlong;

	public MetaProtocolEngine(MetaLinda ml, String host, int chknum, int bufsize, String txt) {
		this.host = host;
		this.fdlmeta = ml;
		this.chknum = chknum;
		this.bufsize = bufsize;
		this.txt = txt;
	}

	public void mainLoop(MetaLinda ml){
		psxget = fdlmeta;
		if (chknum == 1) {
			try {
				sendData();
				start = DF.format(new Date());
				System.out.println("Start Time => "+start);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		boolean connect = true;
		while(connect){
			try {
				initConnect();
				transfer = DF.format(new Date());
				transferlong = new Date().getTime();
				System.out.println("transfer Time => "+transfer);
				for(int l = 0; l < 1000; l++) {
					transfer();
				}
				dataChk();
				write();
				connect = false;
			} catch (IOException e) {
				try {
					Thread.sleep(40);
				} catch (InterruptedException e1) {
				}
			}
		}
	}

	private void initConnect(){
		boolean connectpsx = true;
		while(connectpsx){
			try {
				psxsend = fdlmeta.open(host, port);
				connectpsx = false;
			} catch (IOException e) {
				try {
					Thread.sleep(40);
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				}
			}
		}
	}

	private void sendData() throws IOException{
		boolean connectSend = true;
		ByteBuffer send = ByteBuffer.allocate(bufsize);
		byte[] fdata = new byte[bufsize];
		//		fdata = InetAddress.getLocalHost().getAddress();
		for(int n=0; n < fdata.length; n++ ){
			fdata[n] = 1;
		}
		send.put(fdata);
		send.flip();
		while(connectSend){
			psxget.out(id, send);
			psxget.sync(1);
			System.out.println("Send Data");
			connectSend = false;
		}
	}

	public void transfer() throws IOException {
		ByteBuffer data = ByteBuffer.allocate(bufsize);
		boolean running = true;
		PSXReply in = psxget.in(id);
		while (running) {
			if(in.ready()){
				data = in.getData();
				psxsend.out(id,data);
				System.out.println("connect to => "+host);
				psxsend.sync(1);
				running = false;
				break;
			}
			fdlmeta.sync(0);
		}
	}

	public void dataChk() throws IOException{
		fdlmeta.sync(1);
		boolean running2 = true;
		//		ByteBuffer data2 = ByteBuffer.allocate(bufsize);
		PSXReply in2 = psxget.in(id);
		//		byte[] fdata2 = new byte[bufsize];
		//		byte[] fdata3 = new byte[bufsize];
		//		fdata = InetAddress.getLocalHost().getAddress();
		//		for(int n=0; n < fdata2.length; n++ ){
		//			fdata2[n] = 1;
		//		}
		while (running2) {
			psxget.sync(1);
			if(in2.ready()) {
				//				data2 = in2.getData();
				//				data2.get(fdata3);
				//				if (fdata2 == fdata3){
				time = DF.format(new Date());
				timelong = new Date().getTime();
				System.out.println("Around Time => "+time);
				//				}
				running2 = false;
				break;
			}
		}
	}


	public void write() throws IOException{
		long result = (timelong - transferlong);
		String diff = String.valueOf(result);
		File read = new File("resultTime"+bufsize+"_"+txt+".txt");
		read.createNewFile();
		FileWriter filewrite = new FileWriter(read);
		if (start != "null"){
			filewrite.write("ServerStart => "+start+"\r\n");
		}
		if (transfer != "null") {
			filewrite.write("TransferTime => "+transfer+"\r\n");
		}
		if (time != "null"){
			filewrite.write("AroundTime => "+time+"\r\n");
		}
		if (diff != "null"){
			filewrite.write("DiffTime => "+diff+"\r\n");
		}
		filewrite.close();
	}
}