view src/fdl/multiengine/TupleClassLoader.java @ 115:847b864b1c89

multiengine
author kazz
date Tue, 12 Oct 2010 18:13:45 +0900
parents
children
line wrap: on
line source

package fdl.multiengine;

import java.nio.ByteBuffer;

import com.google.protobuf.InvalidProtocolBufferException;

import fdl.MetaEngine;
import fdl.MetaLinda;
import fdl.protobuf.TupleClass.ClassFile;

public class TupleClassLoader extends ClassLoader implements MetaEngine {
	public String name;
	private byte[] file;
	private Class<MetaEngine> clazz;
	
	@SuppressWarnings("unchecked")
	public TupleClassLoader(ByteBuffer protoc) {
		try {
			ClassFile classFile = ClassFile.parseFrom(protoc.array());
			name = classFile.getName();
			file = classFile.getFile().toByteArray();
			clazz = (Class<MetaEngine>) findClass(name);
		} catch (InvalidProtocolBufferException e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public Class<?> findClass(String name) {
		return defineClass(name, file, 0, file.length);
	}

	public void mainLoop(MetaLinda ml) {
		@SuppressWarnings("rawtypes")
		Class[] parameter = { MetaLinda.class };
		try {
			clazz.getMethod("mainLoop", parameter);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
	}
	
}