view src/fdl/test/metaTransfer/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 82a292aa41ad
children
line wrap: on
line source

package fdl.test.metaTransfer;

import static org.junit.Assert.assertEquals;

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

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

public class MetaProtocolEngine implements MetaEngine {
	private int id = 10;
	private boolean running = true;
	
	private PSXLinda psx;
	private String name;
	MetaLinda fdl1;
	String host = "127.0.0.1";
	int port1;
	private PSXLinda psx1;
	private ByteBuffer data2 = ByteBuffer.allocate(10);
	private int count = 1;

	
	public MetaProtocolEngine(MetaLinda ml, String string, int port1) {
		this.name = string;
		this.port1 = port1;
		this.fdl1 = ml;
	}

	public void mainLoop(MetaLinda ml){
		boolean connect = true;
		System.out.println("MetaEngine Start");
		while(connect){
		try {
			initConnect();
			transfer();
			connect = false;
		} catch (IOException e) {
			try {
				Thread.sleep(40);
			} catch (InterruptedException e1) {
			}
		}
		}
	}

	private void initConnect(){
		System.out.println(name);
		boolean connectpsx = true;
		while(connectpsx){
		try {
			psx = fdl1.open(host,port1);
			connectpsx = false;
		} catch (IOException e) {
			try {
				Thread.sleep(40);
			} catch (InterruptedException e1) {
				e1.printStackTrace();
			}
		}
		}
		System.out.println("Connect "+port1);
		psx1 = fdl1;
	}

	private void transfer() throws IOException {
		PSXReply in = psx.in(id);
		System.out.println("PSXReply "+port1);
		while (running) {
			if(in.ready()){
				data2 = in.getData();
				int i = data2.getInt();
				data2.rewind();
				//outしたbytebufferの変更をこれ以降やっちゃいけない
				psx1.out(id,data2);
				
				System.out.println("IntData0 "+port1 +i);
				fdl1.sync(0);
				if (count++>3) {
					running = false;
					break;
				}
				System.out.println("IntData1 "+port1 +i);
			}
			fdl1.sync(0);
		}
		assertEquals(4,count);
	}

	
}