view src/fdl/test/api/update/UpdateMetaEngine.java @ 112:27874f473d48

modify update()
author kazz
date Fri, 27 Aug 2010 22:00:58 +0900
parents 29ed7feebf2a
children
line wrap: on
line source

package fdl.test.api.update;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Date;

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

public class UpdateMetaEngine implements MetaEngine {
	private final static int targetId = 1001;

	private String host;
	private int port;
	private int maxCount, count = 0;
	private MetaLinda ml;
	private PSXLinda linda;
	private PSXReply reply;
	private Date startTime, endTime;
	
	private UpdateMetaEngine(MetaLinda metaLinda, String host, int port, int count) {
		this.ml = metaLinda;
		this.host = host;
		this.port = port;
		this.maxCount = count;
	}

	private void connect() {
		try {
			linda = ml.open(host, port);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void mainLoop(MetaLinda ml) {
		if (count >= maxCount) {
			endTime = new Date();
			Long resultTime = new Long(endTime.getTime() - startTime.getTime());
			linda.out(PSX.META_STOP, ByteBuffer.wrap("".getBytes()));
			try {
				linda.sync();
			} catch (IOException e) {
				e.printStackTrace();
			}
			System.out.println(maxCount + " " + resultTime);
			System.exit(0);
		}
		if (reply == null) {
			reply = linda.update(targetId, ByteBuffer.wrap("test".getBytes()));
			return;
		}
		if (reply.ready()) {
			reply = null;
			count++;
		}
	}
	
	public static UpdateMetaEngine create(MetaLinda metaLinda, String host, int port, int count) {
		UpdateMetaEngine iome = new UpdateMetaEngine(metaLinda, host, port, count);
		iome.connect();
		iome.linda.out(targetId, ByteBuffer.wrap("test".getBytes()));
		try {
			iome.linda.sync();
		} catch (IOException e) {
			e.printStackTrace();
		}
		iome.startTime = new Date();
		return iome;
	} 
}