Author: mdonoughe Date: 2006-06-11 19:03:33 -0700 (Sun, 11 Jun 2006) New Revision: 3006
Added: freeway/src/org/gnu/freeway/util/NativeService.java Modified: freeway/src/org/gnu/freeway/GNUNetDaemon.java freeway/src/org/gnu/freeway/cwrappers/util/CWrapper.java freeway/src/org/gnu/freeway/cwrappers/util/SwitchTableGenerator.java freeway/src/org/gnu/freeway/server/CPluginLoader.java freeway/src/org/gnu/freeway/services/impl/StatsService.java freeway/src/org/gnu/freeway/util/AbstractService.java Log: services.impl types now extend NativeService and implement Service so that they can be loaded from the existing code. some fixes in SwitchTableGenerator AbstractService now supports a constructor without arguments so NativeService can create instances without hardcoding names in. Modified: freeway/src/org/gnu/freeway/GNUNetDaemon.java =================================================================== --- freeway/src/org/gnu/freeway/GNUNetDaemon.java 2006-06-11 21:06:07 UTC (rev 3005) +++ freeway/src/org/gnu/freeway/GNUNetDaemon.java 2006-06-12 02:03:33 UTC (rev 3006) @@ -8,6 +8,7 @@ import org.gnu.freeway.util.*; import org.gnu.freeway.util.io.*; import org.gnu.freeway.util.net.*; +import org.gnu.freeway.services.impl.StatsService; import java.util.logging.*; @@ -140,6 +141,7 @@ service(HelloExchangeService.class); service(PingPongService.class); service(ConnectionService.class); + service(StatsService.class); ((CoreService) service(CoreService.class)).loadProtocols(); if (firstStart || download) { Modified: freeway/src/org/gnu/freeway/cwrappers/util/CWrapper.java =================================================================== --- freeway/src/org/gnu/freeway/cwrappers/util/CWrapper.java 2006-06-11 21:06:07 UTC (rev 3005) +++ freeway/src/org/gnu/freeway/cwrappers/util/CWrapper.java 2006-06-12 02:03:33 UTC (rev 3006) @@ -44,7 +44,8 @@ //void can only exist where a 0 makes a difference public static final int VOID_KIND = 0; - public static final String[] CTYPES = {"void", "int", "void *", "float", "long long", "double"}; + public static final String[] CTYPES = {"void", "int", "PointerObject *", "float", "long long", "double"}; + public static final String[] CARGTYPES = {"void", "int", "void *", "float", "long long", "double"}; public void deserializeFromByteArray(byte[] serializedData); } Modified: freeway/src/org/gnu/freeway/cwrappers/util/SwitchTableGenerator.java =================================================================== --- freeway/src/org/gnu/freeway/cwrappers/util/SwitchTableGenerator.java 2006-06-11 21:06:07 UTC (rev 3005) +++ freeway/src/org/gnu/freeway/cwrappers/util/SwitchTableGenerator.java 2006-06-12 02:03:33 UTC (rev 3006) @@ -37,6 +37,7 @@ import java.io.BufferedInputStream; import org.gnu.freeway.support.javaparser.ParseException; import org.gnu.freeway.support.javaparser.visitors.DepthFirstVisitor; +import org.gnu.freeway.server.CPluginLoader; /** * @file SwitchTableGenerator.java @@ -91,7 +92,7 @@ break; //use defaults if(clsPrefix.length() == 0) - clsPrefix.append("build"); + clsPrefix.append("build" + File.separator + "classes"); if(srcPrefix.length() == 0) srcPrefix.append("src"); if(natPrefix.length() == 0) @@ -102,7 +103,7 @@ System.err.println("a source code generator for Freeway"); System.err.println(); System.err.println("usage: SwitchTableGenerator [-c <directory>] [-s <directory>] [-n <directory>]"); - System.err.println(" -c path to class files (default: build)"); + System.err.println(" -c path to class files (default: build" + File.separator + "classes)"); System.err.println(" -s path to java source files (default: src)"); System.err.println(" -n path to c source files (default: native)"); return; @@ -528,7 +529,7 @@ return; //can't have a void argument if(maxA - a > 0) typedef.append(", "); - typedef.append(CWrapper.CTYPES[b] + " arg" + (maxA - a)); + typedef.append(CWrapper.CARGTYPES[b] + " arg" + (maxA - a)); functionType -= b * Math.pow(CWrapper.MAX_KIND, a--); } writer.write(typedef.toString() + ");\n"); @@ -579,6 +580,10 @@ methodList.put(methods[i].getName(), buffer.toString()); } + //put these here since they are only used once + String nativeServiceString = cleanClassName("org.gnu.freeway.util.NativeService", imports); + String serviceString = cleanClassName("org.gnu.freeway.util.Service", imports); + writer.write("// This class was autogenerated by SwitchTableGenerator\n"); writer.write("package org.gnu.freeway.services.impl;\n"); writer.write("\n"); @@ -586,31 +591,17 @@ for(Iterator i = importSet.iterator(); i.hasNext(); ) writer.write("import " + (String) i.next() + ";\n"); writer.write("\n"); - writer.write("public class " + stripPackage(c.getName()) + " implements " + c.getName() + " {\n"); - writer.write(" private CPluginLoader loader;\n"); - writer.write(" private CPluginLoader.Handle handle;\n"); + writer.write("public class " + stripPackage(c.getName()) + " extends " + nativeServiceString + " implements " + serviceString + ", " + c.getName() + " {\n"); writer.write("\n"); int ic = 0; for(Iterator i = order.iterator(); i.hasNext(); ) writer.write(((String) methodList.get(i.next())).replace("__FUNCTIONINDEX__", Integer.toString(ic++)) + "\n\n"); - writer.write(" public " + stripPackage(c.getName()) + "(CPluginLoader loader) {\n"); - writer.write(" this.loader = loader;\n"); - writer.write(" handle = loader.loadService(\"" + classToLibraryName(c.getName()) + "\");\n"); + writer.write(" public " + stripPackage(c.getName()) + "() {\n"); + writer.write(" super();\n"); writer.write(" }\n"); - writer.write("\n"); - writer.write(" protected void finalize() {\n"); - writer.write(" loader.unloadService(handle);\n"); - writer.write(" }\n"); writer.write("}\n"); } - public static String classToLibraryName(String className) { - className = stripPackage(className); - if(className.endsWith("Service")) - className = className.substring(0, className.length() - "Service".length()); - return "module_" + className.toLowerCase(); - } - public static String cleanClassName(String input, HashMap importMap) { int lastDot = input.lastIndexOf("."); if(lastDot <= 1) Modified: freeway/src/org/gnu/freeway/server/CPluginLoader.java =================================================================== --- freeway/src/org/gnu/freeway/server/CPluginLoader.java 2006-06-11 21:06:07 UTC (rev 3005) +++ freeway/src/org/gnu/freeway/server/CPluginLoader.java 2006-06-12 02:03:33 UTC (rev 3006) @@ -140,12 +140,19 @@ assert libhandle != null; cUnloadDynamicLibrary(libhandle._); } - + /** - * @file CLibraryHandle.java - * @brief - * @author mdonoughe + * Converts a class name to a module name. StatsService -> module_stats + * @param className + * @return */ + public static String classToLibraryName(String className) { + if(className.endsWith("Service")) + className = className.substring(0, className.length() - "Service".length()); + return "module_" + className.toLowerCase(); + } + + public static final class Handle { final long _; Modified: freeway/src/org/gnu/freeway/services/impl/StatsService.java =================================================================== --- freeway/src/org/gnu/freeway/services/impl/StatsService.java 2006-06-11 21:06:07 UTC (rev 3005) +++ freeway/src/org/gnu/freeway/services/impl/StatsService.java 2006-06-12 02:03:33 UTC (rev 3006) @@ -1,6 +1,8 @@ // This class was autogenerated by SwitchTableGenerator package org.gnu.freeway.services.impl; +import org.gnu.freeway.util.Service; +import org.gnu.freeway.util.NativeService; import org.gnu.freeway.cwrappers.CInt; import org.gnu.freeway.cwrappers.ConstCLong; import org.gnu.freeway.cwrappers.CLong; @@ -8,9 +10,7 @@ import org.gnu.freeway.cwrappers.ConstCString; import org.gnu.freeway.server.CPluginLoader; -public class StatsService implements org.gnu.freeway.services.StatsService { - private CPluginLoader loader; - private CPluginLoader.Handle handle; +public class StatsService extends NativeService implements Service, org.gnu.freeway.services.StatsService { public CInt create(ConstCString arg0) { return (CInt) loader.callC(handle, 0, 13, new Object[] {arg0}); @@ -28,12 +28,7 @@ loader.callC(handle, 3, 42, new Object[] {arg0, arg1}); } - public StatsService(CPluginLoader loader) { - this.loader = loader; - handle = loader.loadService("module_stats"); + public StatsService() { + super(); } - - protected void finalize() { - loader.unloadService(handle); - } } Modified: freeway/src/org/gnu/freeway/util/AbstractService.java =================================================================== --- freeway/src/org/gnu/freeway/util/AbstractService.java 2006-06-11 21:06:07 UTC (rev 3005) +++ freeway/src/org/gnu/freeway/util/AbstractService.java 2006-06-12 02:03:33 UTC (rev 3006) @@ -27,6 +27,18 @@ name=str; state=0; } + + /** + * This is for NativeService. calling super(this.getName()) + * is not allowed. + */ + protected AbstractService() + { + super(true); + manager=null; + name=this.getName(); + state=0; + } public String toString() { Added: freeway/src/org/gnu/freeway/util/NativeService.java =================================================================== --- freeway/src/org/gnu/freeway/util/NativeService.java 2006-06-11 21:06:07 UTC (rev 3005) +++ freeway/src/org/gnu/freeway/util/NativeService.java 2006-06-12 02:03:33 UTC (rev 3006) @@ -0,0 +1,96 @@ + /* + This file is part of Freeway + + Freeway is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 2, or (at your + option) any later version. + + Freeway is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Freeway; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + */ + +package org.gnu.freeway.util; + +import org.gnu.freeway.server.CPluginLoader; + +/** + * @file NativeService.java + * @brief an abstract class to make org.gnu.freeway.services types fit + * @author mdonoughe + */ +public abstract class NativeService extends AbstractService implements Service { + + protected CPluginLoader loader; + protected CPluginLoader.Handle handle; + + protected NativeService() { + super(); + setDebug(true); + loader = new CPluginLoader(); + } + + protected void finalize() throws Throwable { + super.finalize(); + done(); + } + + /* (non-Javadoc) + * @see org.gnu.freeway.util.Service#getName() + */ + public String getName() { + return this.getClass().getSimpleName(); + } + + /* (non-Javadoc) + * @see org.gnu.freeway.util.Service#attach(org.gnu.freeway.util.ServiceManager) + */ + public void attach(ServiceManager s) { + super.attach(s); + } + + /* (non-Javadoc) + * @see org.gnu.freeway.util.Service#detach() + */ + public void detach() { + super.detach(); + } + + /* (non-Javadoc) + * @see org.gnu.freeway.util.Service#init() + */ + public void init() throws ServiceException { + super.init(); + handle = loader.loadService(CPluginLoader.classToLibraryName(getName())); + } + + /* (non-Javadoc) + * @see org.gnu.freeway.util.Service#start() + */ + public void start() throws ServiceException { + super.start(); + } + + /* (non-Javadoc) + * @see org.gnu.freeway.util.Service#stop() + */ + public void stop() throws ServiceException { + super.stop(); + } + + /* (non-Javadoc) + * @see org.gnu.freeway.util.Service#done() + */ + public void done() throws ServiceException { + super.done(); + loader.unloadService(handle); + } + +} _______________________________________________ GNUnet-SVN mailing list GNUnet-SVN@gnu.org http://lists.gnu.org/mailman/listinfo/gnunet-svn