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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/fdl/protobuf/gen.sh	Tue Oct 12 18:13:45 2010 +0900
@@ -0,0 +1,2 @@
+#!/bin/sh
+protoc --java_out=../../ classloader.proto