/** * GamerConfiguration handles machine/OS-specific details, so that these * details don't end up hard-coded into the gamer itself. Currently, these * details include: * * > Locations of the "java" and "javac" binaries, independent of OS. * * > Amounts of RAM to allocate to the gamer when running in Proxy mode, * based on the name of the system it's running on. * * Machine-specific profiles are stored in an optional "gamerProfiles" file, * which has the following format: * * (system name) <tab> (allocated RAM in MB) <tab> (proper name) * * When the program begins, GamerConfiguration will automatically determine * which profile is applicable, and which operating system is running. From * then on, it can be called upon to provide information. If you want to add * a default profile, add an entry with (system name) equal to "*", and when * none of the earlier profiles match, that profile will be used. * * @author Sam Schreiber */ package org.ggp.base.util.configuration; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.net.InetAddress; public class GamerConfiguration { private static String strSystemOS; private static String strProfileName; private static int nMemoryForGamer; // in MB private static int nOperatingSystem; private static final int OS_WINDOWS = 1; private static final int OS_MACOS = 2; private static final int OS_LINUX = 3; public static void showConfiguration() { String osType = "Unknown"; if(runningOnLinux()) osType = "Linux"; if(runningOnMacOS()) osType = "MacOS"; if(runningOnWindows()) osType = "Windows"; System.out.println(String.format("Configured according to the %s Profile, running on %s which is a variety of %s, allocating %d MB of memory to the gaming process.", strProfileName, strSystemOS, osType, nMemoryForGamer)); } private static String getComputerName() { try { return InetAddress.getLocalHost().getHostName().toLowerCase(); } catch (Exception e) { return null; } } static { strProfileName = getComputerName(); boolean foundProfile = false; try { String line; BufferedReader in = new BufferedReader(new FileReader("src/org/ggp/base/util/configuration/gamerProfiles")); while((line = in.readLine()) != null) { if(line.length() == 0) continue; if(line.charAt(0) == '#') continue; String[] splitLine = line.split("\\s+"); if(splitLine[0].equals(strProfileName)) { nMemoryForGamer = Integer.parseInt(splitLine[1]); strProfileName = splitLine[2]; foundProfile = true; break; } else if(splitLine[0].equals("*")) { nMemoryForGamer = Integer.parseInt(splitLine[1]); strProfileName = splitLine[2]; foundProfile = true; break; } } in.close(); } catch (FileNotFoundException fe) { ; } catch (Exception e) { e.printStackTrace(); } if(!foundProfile) { nMemoryForGamer = 1000; strProfileName = "Default"; } strSystemOS = System.getProperty("os.name"); if(strSystemOS.contains("Linux")) { nOperatingSystem = OS_LINUX; } else if(strSystemOS.contains("Mac OS")) { nOperatingSystem = OS_MACOS; } else if(strSystemOS.contains("Windows")) { nOperatingSystem = OS_WINDOWS; } else { ; } } // OS-neutral accessors public static String getCommandForJava() { if(nOperatingSystem == OS_MACOS) { return "/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands/java"; } else { return "java"; } } public static String getCommandForJavac() { if(nOperatingSystem == OS_MACOS) { return "/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Commands/javac"; } else { return "javac"; } } // Accessors public static boolean runningOnLinux () { return nOperatingSystem == OS_LINUX; } public static boolean runningOnMacOS () { return nOperatingSystem == OS_MACOS; } public static boolean runningOnWindows () { return nOperatingSystem == OS_WINDOWS; } public static String getOperatingSystemName() { return strSystemOS; } public static String getProfileName() { return strProfileName; } public static int getMemoryForGamer() { return nMemoryForGamer; } public static void main(String args[]) { System.out.println("Computer name: " + getComputerName()); GamerConfiguration.showConfiguration(); } }