Mercurial > hg > FederatedLinda
changeset 115:847b864b1c89
multiengine
author | kazz |
---|---|
date | Tue, 12 Oct 2010 18:13:45 +0900 |
parents | 3b877c9a44f5 |
children | 4150c16e93fd |
files | src/fdl/multiengine/MetaEngineExecutor.java src/fdl/multiengine/MultiEngineServer.java src/fdl/multiengine/StopServerEngine.java src/fdl/multiengine/TupleClassLoader.java src/fdl/multiengine/meta/MetaEngineExecutor.java src/fdl/multiengine/meta/StopServerEngine.java src/fdl/protobuf/TupleClass.java src/fdl/protobuf/classloader.proto src/fdl/protobuf/gen.sh |
diffstat | 9 files changed, 500 insertions(+), 57 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fdl/multiengine/MetaEngineExecutor.java Mon Oct 11 14:29:37 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -package fdl.multiengine; - -import java.util.LinkedList; - -import fdl.MetaEngine; -import fdl.MetaLinda; - -public class MetaEngineExecutor implements MetaEngine { - private LinkedList<MetaEngine> engines; - public boolean running = true; - - public MetaEngineExecutor() { - engines = new LinkedList<MetaEngine>(); - } - - public void mainLoop(MetaLinda ml) { - while (running) { - for (MetaEngine engine : engines) { - engine.mainLoop(ml); - } - ml.sync(0); - } - } - - public void addMetaEngine(MetaEngine engine) { - engines.add(engine); - } - - public void removeMetaEngine(MetaEngine engine) { - engines.remove(engine); - } - -}
--- a/src/fdl/multiengine/MultiEngineServer.java Mon Oct 11 14:29:37 2010 +0900 +++ b/src/fdl/multiengine/MultiEngineServer.java Tue Oct 12 18:13:45 2010 +0900 @@ -1,10 +1,12 @@ package fdl.multiengine; import fdl.FDLindaServ; +import fdl.multiengine.meta.MetaEngineExecutor; +import fdl.multiengine.meta.StopServerEngine; public class MultiEngineServer { - static int DEFAULTPORT = 10000; static MetaEngineExecutor mee; + /** * @param args */
--- a/src/fdl/multiengine/StopServerEngine.java Mon Oct 11 14:29:37 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -package fdl.multiengine; - -import java.nio.ByteBuffer; - -import fdl.MetaEngine; -import fdl.MetaLinda; -import fdl.PSXCallback; - -public class StopServerEngine implements MetaEngine { - MetaEngineExecutor mee; - - public StopServerEngine(MetaEngineExecutor mee) { - this.mee = mee; - } - - public void mainLoop(MetaLinda ml) { - ml.in(TupleId.STOP.id, - new PSXCallback() { public void callback(ByteBuffer reply) { - mee.running = false; }}); - mee.removeMetaEngine(this); - } - -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fdl/multiengine/TupleClassLoader.java Tue Oct 12 18:13:45 2010 +0900 @@ -0,0 +1,45 @@ +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(); + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fdl/multiengine/meta/MetaEngineExecutor.java Tue Oct 12 18:13:45 2010 +0900 @@ -0,0 +1,33 @@ +package fdl.multiengine.meta; + +import java.util.LinkedList; + +import fdl.MetaEngine; +import fdl.MetaLinda; + +public class MetaEngineExecutor implements MetaEngine { + private LinkedList<MetaEngine> engines; + public boolean running = true; + + public MetaEngineExecutor() { + engines = new LinkedList<MetaEngine>(); + } + + public void mainLoop(MetaLinda ml) { + while (running) { + for (MetaEngine engine : engines) { + engine.mainLoop(ml); + } + ml.sync(0); + } + } + + public void addMetaEngine(MetaEngine engine) { + engines.add(engine); + } + + public void removeMetaEngine(MetaEngine engine) { + engines.remove(engine); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fdl/multiengine/meta/StopServerEngine.java Tue Oct 12 18:13:45 2010 +0900 @@ -0,0 +1,24 @@ +package fdl.multiengine.meta; + +import java.nio.ByteBuffer; + +import fdl.MetaEngine; +import fdl.MetaLinda; +import fdl.PSXCallback; +import fdl.multiengine.TupleId; + +public class StopServerEngine implements MetaEngine { + MetaEngineExecutor mee; + + public StopServerEngine(MetaEngineExecutor mee) { + this.mee = mee; + } + + public void mainLoop(MetaLinda ml) { + ml.in(TupleId.STOP.id, + new PSXCallback() { public void callback(ByteBuffer reply) { + mee.running = false; }}); + mee.removeMetaEngine(this); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fdl/protobuf/TupleClass.java Tue Oct 12 18:13:45 2010 +0900 @@ -0,0 +1,385 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: classloader.proto + +package fdl.protobuf; + +public final class TupleClass { + private TupleClass() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public static final class ClassFile extends + com.google.protobuf.GeneratedMessage { + // Use ClassFile.newBuilder() to construct. + private ClassFile() { + initFields(); + } + private ClassFile(boolean noInit) {} + + private static final ClassFile defaultInstance; + public static ClassFile getDefaultInstance() { + return defaultInstance; + } + + public ClassFile getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return fdl.protobuf.TupleClass.internal_static_tupleclassloader_ClassFile_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return fdl.protobuf.TupleClass.internal_static_tupleclassloader_ClassFile_fieldAccessorTable; + } + + // required string name = 1; + public static final int NAME_FIELD_NUMBER = 1; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // required bytes file = 2; + public static final int FILE_FIELD_NUMBER = 2; + private boolean hasFile; + private com.google.protobuf.ByteString file_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasFile() { return hasFile; } + public com.google.protobuf.ByteString getFile() { return file_; } + + private void initFields() { + } + public final boolean isInitialized() { + if (!hasName) return false; + if (!hasFile) return false; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasName()) { + output.writeString(1, getName()); + } + if (hasFile()) { + output.writeBytes(2, getFile()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getName()); + } + if (hasFile()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getFile()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + public static fdl.protobuf.TupleClass.ClassFile parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static fdl.protobuf.TupleClass.ClassFile parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static fdl.protobuf.TupleClass.ClassFile parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static fdl.protobuf.TupleClass.ClassFile parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static fdl.protobuf.TupleClass.ClassFile parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static fdl.protobuf.TupleClass.ClassFile parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static fdl.protobuf.TupleClass.ClassFile parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static fdl.protobuf.TupleClass.ClassFile parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static fdl.protobuf.TupleClass.ClassFile parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static fdl.protobuf.TupleClass.ClassFile parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(fdl.protobuf.TupleClass.ClassFile prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder<Builder> { + private fdl.protobuf.TupleClass.ClassFile result; + + // Construct using fdl.protobuf.TupleClass.ClassFile.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new fdl.protobuf.TupleClass.ClassFile(); + return builder; + } + + protected fdl.protobuf.TupleClass.ClassFile internalGetResult() { + return result; + } + + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new fdl.protobuf.TupleClass.ClassFile(); + return this; + } + + public Builder clone() { + return create().mergeFrom(result); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return fdl.protobuf.TupleClass.ClassFile.getDescriptor(); + } + + public fdl.protobuf.TupleClass.ClassFile getDefaultInstanceForType() { + return fdl.protobuf.TupleClass.ClassFile.getDefaultInstance(); + } + + public boolean isInitialized() { + return result.isInitialized(); + } + public fdl.protobuf.TupleClass.ClassFile build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private fdl.protobuf.TupleClass.ClassFile buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + public fdl.protobuf.TupleClass.ClassFile buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + fdl.protobuf.TupleClass.ClassFile returnMe = result; + result = null; + return returnMe; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof fdl.protobuf.TupleClass.ClassFile) { + return mergeFrom((fdl.protobuf.TupleClass.ClassFile)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(fdl.protobuf.TupleClass.ClassFile other) { + if (other == fdl.protobuf.TupleClass.ClassFile.getDefaultInstance()) return this; + if (other.hasName()) { + setName(other.getName()); + } + if (other.hasFile()) { + setFile(other.getFile()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + return this; + } + break; + } + case 10: { + setName(input.readString()); + break; + } + case 18: { + setFile(input.readBytes()); + break; + } + } + } + } + + + // required string name = 1; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // required bytes file = 2; + public boolean hasFile() { + return result.hasFile(); + } + public com.google.protobuf.ByteString getFile() { + return result.getFile(); + } + public Builder setFile(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasFile = true; + result.file_ = value; + return this; + } + public Builder clearFile() { + result.hasFile = false; + result.file_ = getDefaultInstance().getFile(); + return this; + } + + // @@protoc_insertion_point(builder_scope:tupleclassloader.ClassFile) + } + + static { + defaultInstance = new ClassFile(true); + fdl.protobuf.TupleClass.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:tupleclassloader.ClassFile) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_tupleclassloader_ClassFile_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_tupleclassloader_ClassFile_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\021classloader.proto\022\020tupleclassloader\"\'\n" + + "\tClassFile\022\014\n\004name\030\001 \002(\t\022\014\n\004file\030\002 \002(\014B\032" + + "\n\014fdl.protobufB\nTupleClass" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + internal_static_tupleclassloader_ClassFile_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_tupleclassloader_ClassFile_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_tupleclassloader_ClassFile_descriptor, + new java.lang.String[] { "Name", "File", }, + fdl.protobuf.TupleClass.ClassFile.class, + fdl.protobuf.TupleClass.ClassFile.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + } + + public static void internalForceInit() {} + + // @@protoc_insertion_point(outer_class_scope) +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fdl/protobuf/classloader.proto Tue Oct 12 18:13:45 2010 +0900 @@ -0,0 +1,8 @@ +package tupleclassloader; +option java_package = "fdl.protobuf"; +option java_outer_classname = "TupleClass"; + +message ClassFile { + required string name = 1; + required bytes file = 2; +} \ No newline at end of file