diff --git a/java/application.ibuddy/build.gradle b/java/application.ibuddy/build.gradle new file mode 100644 index 0000000..e69de29 diff --git a/java/application.itunes/build.gradle b/java/application.itunes/build.gradle new file mode 100644 index 0000000..e69de29 diff --git a/java/application.lightroom/build.gradle b/java/application.lightroom/build.gradle new file mode 100644 index 0000000..753ca2a --- /dev/null +++ b/java/application.lightroom/build.gradle @@ -0,0 +1,3 @@ +dependencies { + compile 'com.github.boukefalos:jlibwinapi:0.1' +} \ No newline at end of file diff --git a/java/application.lightroom/src/main/java/winapi/Amount.java b/java/application.lightroom/src/main/java/winapi/Amount.java new file mode 100644 index 0000000..0c52b50 --- /dev/null +++ b/java/application.lightroom/src/main/java/winapi/Amount.java @@ -0,0 +1,14 @@ +package winapi; + +public enum Amount { + DECREASE_MUCH ("--"), + DECREASE_LITTLE ("-"), + INCREASE_LITTLE ("+"), + INCREASE_MUCH ("++"); + + public String value; + + Amount(String value) { + this.value = value; + } +} diff --git a/java/application.lightroom/src/main/java/winapi/Slider.java b/java/application.lightroom/src/main/java/winapi/Slider.java new file mode 100644 index 0000000..c9837ad --- /dev/null +++ b/java/application.lightroom/src/main/java/winapi/Slider.java @@ -0,0 +1,20 @@ +package winapi; +public enum Slider { + EXPOSURE, + CONTRAST, + HIGHLIGHTS, + SHADOWS, + WHITES, + BLACKS, + CLARITY, + VIBRANCE; + + public String getLabel() { + String name = this.name(); + return String.format("%s%s", name.substring(0, 1), name.toLowerCase().substring(1)); + } + + public String getLabel(Amount amount) { + return String.format("%s %s", getLabel(), amount.value); + } +} diff --git a/java/application.lightroom/src/main/java/winapi/Test.java b/java/application.lightroom/src/main/java/winapi/Test.java new file mode 100644 index 0000000..862337c --- /dev/null +++ b/java/application.lightroom/src/main/java/winapi/Test.java @@ -0,0 +1,115 @@ +package winapi; +import java.util.HashMap; +import java.util.Random; + +import org.synthuse.Api; +import org.synthuse.objects.MenuItem; + +import com.sun.jna.platform.win32.WinDef.HWND; + +public class Test { + protected Api api; + + protected HashMap> sliderMap; + protected HashMap valueMap; + + public Test() { + api = new Api(); + sliderMap = new HashMap>(); + valueMap = new HashMap(); + } + + public static void main(String[] args) throws Exception { + Test test = new Test(); + test.start(); + + //test.moveSlider(Slider.CONTRAST, Amount.INCREASE_LITTLE); + + for (int k = 0; k < 5; ++k) { + Slider slider = Slider.values()[new Random().nextInt(Slider.values().length)]; + for (int j = 0; j < 5; ++j) { + for (int i = 0; i < 10; ++i) { + test.moveSlider(slider, Amount.INCREASE_LITTLE); + System.out.println(test.getValue(slider)); + Thread.sleep(200); + } + Thread.sleep(400); + for (int i = 0; i < 10; ++i) { + test.moveSlider(slider, Amount.INCREASE_LITTLE); + Thread.sleep(200); + } + } + } + } + + public Slider[] getSliders() { + return sliderMap.keySet().toArray(new Slider[0]); + } + + public void moveSlider(Slider slider, Amount amount) throws Exception { + MenuItem menuItem = sliderMap.get(slider).get(amount); + api.activateItem(menuItem); + } + + public float getValue(Slider slider) { + if (valueMap.containsKey(slider)) { + HWND hWnd = valueMap.get(slider); + String text = Api.getWindowText(hWnd); + return Float.valueOf(text.replace(" ", "")); + } else { + return 0; + } + } + + public void start() throws Exception { + // Find Lightroom window + HWND hWndTopWindow = api.findTopWindow("Lightroom", "AgWinMainFrame"); + if (hWndTopWindow == null) { + throw new Exception("Can't find top window"); + } + + // Find menu options from Keyboard Tamer + String[] path = {"&File", "Pl&ug-in Extras", ""}; + for (Slider slider : Slider.values()) { + HashMap amountMap = new HashMap(); + for (Amount amount : Amount.values()) { + String label = slider.getLabel(amount); + path[2] = String.format(" %s", label); + MenuItem menuItem = api.loadMenuItem(hWndTopWindow, true, path); + amountMap.put(amount, menuItem); + } + sliderMap.put(slider, amountMap); + } + + // Find develop sliders + path = new String[]{"", "Top", "Main", "Panel", "Last Panel", "View", "ClipView", "Accordion", "Accordion"}; + HWND hWnd = api.findChildWindow(hWndTopWindow, path); + if (hWnd == null) { + throw new Exception("Can't find window"); + } + for (HWND hWndLoop : api.findAllChildWindow(hWnd, "Collapsible")) { + path = new String[]{"Basic", "View"}; + hWnd = api.findChildWindow(hWndLoop, path); + if (hWnd != null) { + Slider slider = null; + for (HWND hWndSubLoop : api.findAllChildWindow(hWnd, "")) { + //String className = Api.getWindowClassName(hWndSubLoop); + String text = Api.getWindowText(hWndSubLoop); + if (!text.contains("Bridge") && !text.contains("View") && text.length() > 0) { + if (slider != null) { + System.out.printf("%s = %s (%.2f)\n", slider.getLabel(), text, Float.valueOf(text.replace(" ", ""))); + valueMap.put(slider, hWndSubLoop); + slider = null; + } else { + for (Slider sliderLoop : Slider.values()) { + if (sliderLoop.getLabel().equals(text)) { + slider = sliderLoop; + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/java/base/gradle/wrapper/gradle-wrapper.jar b/java/base/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 3d0dee6..0000000 Binary files a/java/base/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/java/base/gradle/wrapper/gradle-wrapper.properties b/java/base/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index aa2abff..0000000 --- a/java/base/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Sun Jun 14 13:41:53 BST 2015 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-bin.zip diff --git a/java/base/gradlew b/java/base/gradlew deleted file mode 100644 index 91a7e26..0000000 --- a/java/base/gradlew +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/java/build.gradle b/java/build.gradle index 828219b..7cf1618 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -1,7 +1,12 @@ -allprojects { +subprojects { apply plugin: 'java' + apply plugin: 'maven' + apply plugin: 'eclipse' + apply plugin: 'license' - version = '0.1' + task wrapper(type: Wrapper) { + gradleVersion = '2.14' + } repositories { maven { @@ -34,8 +39,37 @@ allprojects { maven { url 'https://github.com/Boukefalos/jlibxinput/raw/mvn-repo/' } + maven { + url 'https://github.com/Boukefalos/jlibxinput/raw/mvn-repo/' + } + maven { + url 'https://github.com/Boukefalos/jlibwinapi/raw/mvn-repo/' + } mavenCentral() } + + license { + header rootProject.file('HEADER.txt') + strictCheck true + + skipExistingHeaders false + ext.year = Calendar.getInstance().get(Calendar.YEAR) + ext.name = 'Rik Veenboer' + ext.email = 'rik.veenboer@gmail.com' + ext.project = 'this program' + ext.Project = 'This program' + include "**/*.java" + } + + group = 'com.github.boukefalos' + version = '0.1' + archivesBaseName = 'mimis-' + project.name + + uploadArchives { + repositories.mavenDeployer { + repository(url: uri('../../.maven')) + } + } } buildscript { diff --git a/java/base/build.gradle b/java/core.legacy/build.gradle similarity index 59% rename from java/base/build.gradle rename to java/core.legacy/build.gradle index 1d70d40..e57c02f 100644 --- a/java/base/build.gradle +++ b/java/core.legacy/build.gradle @@ -1,11 +1,3 @@ -task wrapper(type: Wrapper) { - gradleVersion = '2.2' -} - -repositories { - mavenCentral(); -} - dependencies { compile 'org.slf4j:slf4j-log4j12:1.7.7' compile 'org.picocontainer:picocontainer:2.15' diff --git a/java/mimis/gradlew b/java/core.legacy/gradlew similarity index 94% rename from java/mimis/gradlew rename to java/core.legacy/gradlew index 91a7e26..27309d9 100644 --- a/java/mimis/gradlew +++ b/java/core.legacy/gradlew @@ -6,12 +6,30 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,31 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -114,6 +113,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` diff --git a/java/base/gradlew.bat b/java/core.legacy/gradlew.bat similarity index 93% rename from java/base/gradlew.bat rename to java/core.legacy/gradlew.bat index 8a0b282..f6d5974 100644 --- a/java/base/gradlew.bat +++ b/java/core.legacy/gradlew.bat @@ -1,90 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/java/core.legacy/sources.txt b/java/core.legacy/sources.txt new file mode 100644 index 0000000..5995f29 --- /dev/null +++ b/java/core.legacy/sources.txt @@ -0,0 +1,79 @@ +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\module-info.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\Control.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\Duplex.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\Forwarder.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\Receiver.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\Sender.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\exception\LoaderException.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\exception\WorkerException.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\exception\worker\ActivateException.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\exception\worker\AlreadyActiveException.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\exception\worker\AlreadyRunningException.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\exception\worker\DeactivateException.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\exception\worker\NotActiveException.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\exception\worker\NotRunningException.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\exception\worker\StartException.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\loader\AbstractLoader.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\channel\TcpClient.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\channel\TcpServer.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\channel\TcpServerClient.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\datagram\AbstractUdpClient.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\datagram\UdpDuplexAutoClient.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\datagram\UdpDuplexClient.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\datagram\UdpDuplexHelper.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\datagram\UdpDuplexServer.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\datagram\UdpMulticastClient.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\datagram\UdpMulticastServer.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\datagram\UdpSender.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\datagram\UdpServer.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\forwarder\TcpChannelServerForwarder.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\forwarder\TcpClientChannelForwarder.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\forwarder\TcpClientSocketForwarder.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\forwarder\TcpSocketServerForwarder.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\forwarder\UdpDuplexClientForwarder.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\forwarder\UdpDuplexServerForwarder.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\forwarder\UdpServerForwarder.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\receiver\AbstractReceiver.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\socket\AbstractTcpClient.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\socket\TcpClient.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\socket\TcpServer.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\server\socket\TcpServerClient.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\util\ArrayCycle.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\util\Buffer.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\util\Bufferable.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\util\BufferedArrayCycle.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\util\Dummy.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\work\Listen.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\work\ReflectiveListen.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\work\Work.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\BackgroundListener.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\DirectIntervalWorker.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\DirectWorker.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\ForegroundListener.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\IntervalWork.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\ThreadIntervalWorker.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\ThreadWorker.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\Worker.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\pool\Listener.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\pool\ListenerPool.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\pool\ListenerPoolRunnable.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\pool\PooledListener.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\pool\PooledWorker.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\pool\WorkerPool.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\pool\WorkerPoolRunnable.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\main\java\base\worker\pool\Wrapper.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\junit\AllTests.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\junit\TestTcpChannelCommunication.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\junit\TestTcpSocketCommunication.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\junit\TestUdpDuplexCommunication.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\junit\TestUdpMulticastCommunication.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\junit\TestUdpUnicastCommunication.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\test\Test.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\worker\TestDirectWork.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\worker\TestIntervalWork.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\worker\TestListen.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\worker\TestPooledListen.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\worker\TestPooledWork.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\worker\dummy\DummyIntervalWork.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\worker\dummy\DummyListen.java +C:\Users\Rik\Git\github\mimis\java\core.legacy\src\test\java\worker\dummy\DummyWork.java diff --git a/java/base/src/main/java/base/Control.java b/java/core.legacy/src/main/java/base/Control.java similarity index 94% rename from java/base/src/main/java/base/Control.java rename to java/core.legacy/src/main/java/base/Control.java index e48caa9..e127db6 100644 --- a/java/base/src/main/java/base/Control.java +++ b/java/core.legacy/src/main/java/base/Control.java @@ -1,7 +1,7 @@ -package base; - -public interface Control { - public void start(); - public void stop(); - public void exit(); -} +package base; + +public interface Control { + public void start(); + public void stop(); + public void exit(); +} diff --git a/java/base/src/main/java/base/Duplex.java b/java/core.legacy/src/main/java/base/Duplex.java similarity index 95% rename from java/base/src/main/java/base/Duplex.java rename to java/core.legacy/src/main/java/base/Duplex.java index 9e9c91c..82c014e 100644 --- a/java/base/src/main/java/base/Duplex.java +++ b/java/core.legacy/src/main/java/base/Duplex.java @@ -1,3 +1,3 @@ -package base; - -public interface Duplex extends Forwarder, Sender {} +package base; + +public interface Duplex extends Forwarder, Sender {} diff --git a/java/base/src/main/java/base/Forwarder.java b/java/core.legacy/src/main/java/base/Forwarder.java similarity index 96% rename from java/base/src/main/java/base/Forwarder.java rename to java/core.legacy/src/main/java/base/Forwarder.java index ccd7e62..4d5a20c 100644 --- a/java/base/src/main/java/base/Forwarder.java +++ b/java/core.legacy/src/main/java/base/Forwarder.java @@ -1,6 +1,6 @@ -package base; - -public interface Forwarder extends Control { - public void register(Receiver receiver); - public void remove(Receiver receiver); +package base; + +public interface Forwarder extends Control { + public void register(Receiver receiver); + public void remove(Receiver receiver); } \ No newline at end of file diff --git a/java/base/src/main/java/base/Receiver.java b/java/core.legacy/src/main/java/base/Receiver.java similarity index 94% rename from java/base/src/main/java/base/Receiver.java rename to java/core.legacy/src/main/java/base/Receiver.java index ceb1170..effb45c 100644 --- a/java/base/src/main/java/base/Receiver.java +++ b/java/core.legacy/src/main/java/base/Receiver.java @@ -1,5 +1,5 @@ -package base; - -public interface Receiver { - public void receive(byte[] buffer); -} +package base; + +public interface Receiver { + public void receive(byte[] buffer); +} diff --git a/java/base/src/main/java/base/Sender.java b/java/core.legacy/src/main/java/base/Sender.java similarity index 95% rename from java/base/src/main/java/base/Sender.java rename to java/core.legacy/src/main/java/base/Sender.java index baaee04..a866472 100644 --- a/java/base/src/main/java/base/Sender.java +++ b/java/core.legacy/src/main/java/base/Sender.java @@ -1,7 +1,7 @@ -package base; - -import java.io.IOException; - -public interface Sender extends Control { - public void send(byte[] buffer) throws IOException; -} +package base; + +import java.io.IOException; + +public interface Sender extends Control { + public void send(byte[] buffer) throws IOException; +} diff --git a/java/base/src/main/java/base/exception/LoaderException.java b/java/core.legacy/src/main/java/base/exception/LoaderException.java similarity index 95% rename from java/base/src/main/java/base/exception/LoaderException.java rename to java/core.legacy/src/main/java/base/exception/LoaderException.java index d0146fa..0eae4c9 100644 --- a/java/base/src/main/java/base/exception/LoaderException.java +++ b/java/core.legacy/src/main/java/base/exception/LoaderException.java @@ -1,9 +1,9 @@ -package base.exception; - -public class LoaderException extends Exception { - protected static final long serialVersionUID = 1L; - - public LoaderException(String message) { - super(message); - } -} +package base.exception; + +public class LoaderException extends Exception { + protected static final long serialVersionUID = 1L; + + public LoaderException(String message) { + super(message); + } +} diff --git a/java/base/src/main/java/base/exception/WorkerException.java b/java/core.legacy/src/main/java/base/exception/WorkerException.java similarity index 96% rename from java/base/src/main/java/base/exception/WorkerException.java rename to java/core.legacy/src/main/java/base/exception/WorkerException.java index 10a0701..c548a5c 100644 --- a/java/base/src/main/java/base/exception/WorkerException.java +++ b/java/core.legacy/src/main/java/base/exception/WorkerException.java @@ -1,5 +1,5 @@ -package base.exception; - -public class WorkerException extends Exception { - protected static final long serialVersionUID = 1L; -} +package base.exception; + +public class WorkerException extends Exception { + protected static final long serialVersionUID = 1L; +} diff --git a/java/base/src/main/java/base/exception/worker/ActivateException.java b/java/core.legacy/src/main/java/base/exception/worker/ActivateException.java similarity index 96% rename from java/base/src/main/java/base/exception/worker/ActivateException.java rename to java/core.legacy/src/main/java/base/exception/worker/ActivateException.java index 158b0a6..1783892 100644 --- a/java/base/src/main/java/base/exception/worker/ActivateException.java +++ b/java/core.legacy/src/main/java/base/exception/worker/ActivateException.java @@ -1,7 +1,7 @@ -package base.exception.worker; - -import base.exception.WorkerException; - -public class ActivateException extends WorkerException { - protected static final long serialVersionUID = 1L; -} +package base.exception.worker; + +import base.exception.WorkerException; + +public class ActivateException extends WorkerException { + protected static final long serialVersionUID = 1L; +} diff --git a/java/base/src/main/java/base/exception/worker/AlreadyActiveException.java b/java/core.legacy/src/main/java/base/exception/worker/AlreadyActiveException.java similarity index 96% rename from java/base/src/main/java/base/exception/worker/AlreadyActiveException.java rename to java/core.legacy/src/main/java/base/exception/worker/AlreadyActiveException.java index 8c594a7..a4b3fd7 100644 --- a/java/base/src/main/java/base/exception/worker/AlreadyActiveException.java +++ b/java/core.legacy/src/main/java/base/exception/worker/AlreadyActiveException.java @@ -1,7 +1,7 @@ -package base.exception.worker; - -import base.exception.WorkerException; - -public class AlreadyActiveException extends WorkerException { - protected static final long serialVersionUID = 1L; -} +package base.exception.worker; + +import base.exception.WorkerException; + +public class AlreadyActiveException extends WorkerException { + protected static final long serialVersionUID = 1L; +} diff --git a/java/base/src/main/java/base/exception/worker/AlreadyRunningException.java b/java/core.legacy/src/main/java/base/exception/worker/AlreadyRunningException.java similarity index 96% rename from java/base/src/main/java/base/exception/worker/AlreadyRunningException.java rename to java/core.legacy/src/main/java/base/exception/worker/AlreadyRunningException.java index 3a92fc3..e153001 100644 --- a/java/base/src/main/java/base/exception/worker/AlreadyRunningException.java +++ b/java/core.legacy/src/main/java/base/exception/worker/AlreadyRunningException.java @@ -1,7 +1,7 @@ -package base.exception.worker; - -import base.exception.WorkerException; - -public class AlreadyRunningException extends WorkerException { - protected static final long serialVersionUID = 1L; -} +package base.exception.worker; + +import base.exception.WorkerException; + +public class AlreadyRunningException extends WorkerException { + protected static final long serialVersionUID = 1L; +} diff --git a/java/base/src/main/java/base/exception/worker/DeactivateException.java b/java/core.legacy/src/main/java/base/exception/worker/DeactivateException.java similarity index 96% rename from java/base/src/main/java/base/exception/worker/DeactivateException.java rename to java/core.legacy/src/main/java/base/exception/worker/DeactivateException.java index d5bf7fa..b05eacc 100644 --- a/java/base/src/main/java/base/exception/worker/DeactivateException.java +++ b/java/core.legacy/src/main/java/base/exception/worker/DeactivateException.java @@ -1,7 +1,7 @@ -package base.exception.worker; - -import base.exception.WorkerException; - -public class DeactivateException extends WorkerException { - protected static final long serialVersionUID = 1L; +package base.exception.worker; + +import base.exception.WorkerException; + +public class DeactivateException extends WorkerException { + protected static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/java/base/src/main/java/base/exception/worker/NotActiveException.java b/java/core.legacy/src/main/java/base/exception/worker/NotActiveException.java similarity index 96% rename from java/base/src/main/java/base/exception/worker/NotActiveException.java rename to java/core.legacy/src/main/java/base/exception/worker/NotActiveException.java index 9d97bff..45b0b20 100644 --- a/java/base/src/main/java/base/exception/worker/NotActiveException.java +++ b/java/core.legacy/src/main/java/base/exception/worker/NotActiveException.java @@ -1,7 +1,7 @@ -package base.exception.worker; - -import base.exception.WorkerException; - -public class NotActiveException extends WorkerException { - protected static final long serialVersionUID = 1L; -} +package base.exception.worker; + +import base.exception.WorkerException; + +public class NotActiveException extends WorkerException { + protected static final long serialVersionUID = 1L; +} diff --git a/java/base/src/main/java/base/exception/worker/NotRunningException.java b/java/core.legacy/src/main/java/base/exception/worker/NotRunningException.java similarity index 96% rename from java/base/src/main/java/base/exception/worker/NotRunningException.java rename to java/core.legacy/src/main/java/base/exception/worker/NotRunningException.java index 9859322..376bee6 100644 --- a/java/base/src/main/java/base/exception/worker/NotRunningException.java +++ b/java/core.legacy/src/main/java/base/exception/worker/NotRunningException.java @@ -1,7 +1,7 @@ -package base.exception.worker; - -import base.exception.WorkerException; - -public class NotRunningException extends WorkerException { - protected static final long serialVersionUID = 1L; -} +package base.exception.worker; + +import base.exception.WorkerException; + +public class NotRunningException extends WorkerException { + protected static final long serialVersionUID = 1L; +} diff --git a/java/base/src/main/java/base/exception/worker/StartException.java b/java/core.legacy/src/main/java/base/exception/worker/StartException.java similarity index 96% rename from java/base/src/main/java/base/exception/worker/StartException.java rename to java/core.legacy/src/main/java/base/exception/worker/StartException.java index 6f52162..299f955 100644 --- a/java/base/src/main/java/base/exception/worker/StartException.java +++ b/java/core.legacy/src/main/java/base/exception/worker/StartException.java @@ -1,7 +1,7 @@ -package base.exception.worker; - -import base.exception.WorkerException; - -public class StartException extends WorkerException { - protected static final long serialVersionUID = 1L; -} +package base.exception.worker; + +import base.exception.WorkerException; + +public class StartException extends WorkerException { + protected static final long serialVersionUID = 1L; +} diff --git a/java/base/src/main/java/base/loader/AbstractLoader.java b/java/core.legacy/src/main/java/base/loader/AbstractLoader.java similarity index 97% rename from java/base/src/main/java/base/loader/AbstractLoader.java rename to java/core.legacy/src/main/java/base/loader/AbstractLoader.java index 5dc9775..ffe6b3e 100644 --- a/java/base/src/main/java/base/loader/AbstractLoader.java +++ b/java/core.legacy/src/main/java/base/loader/AbstractLoader.java @@ -1,146 +1,146 @@ -package base.loader; - -import java.io.IOException; -import java.util.Properties; - -import org.picocontainer.DefaultPicoContainer; -import org.picocontainer.MutablePicoContainer; -import org.picocontainer.Parameter; -import org.picocontainer.parameters.ConstantParameter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import base.Duplex; -import base.Forwarder; -import base.Sender; -import base.exception.LoaderException; -import base.server.datagram.UdpSender; -import base.server.forwarder.UdpDuplexClientForwarder; -import base.server.forwarder.UdpDuplexServerForwarder; - -public class AbstractLoader { - protected static final String PROPERTIES_FILE = "loader.properties"; - protected static final Properties SERVER = null; - - protected Logger logger = LoggerFactory.getLogger(AbstractLoader.class); - protected MutablePicoContainer pico; - - public AbstractLoader() { - /* Initialise container */ - pico = new DefaultPicoContainer(); - } - - public AbstractLoader(Properties properties) { - this(); - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - public static T getLoader() throws LoaderException { - return (T) new AbstractLoader(readProperties(PROPERTIES_FILE)); - } - - public static Properties readProperties(String propertiesFile) throws LoaderException { - /* Read properties file */ - Properties properties = new Properties(); - try { - properties.load(AbstractLoader.class.getClassLoader().getResourceAsStream(propertiesFile)); - } catch (IOException e) { - throw new LoaderException("Faield to read properties file: " + PROPERTIES_FILE); - } - return properties; - } - - protected Class getSenderClass(String protocol, String implementation) throws LoaderException { - switch (protocol) { - case "tcp": - switch (implementation) { - case "channel": - return base.server.channel.TcpClient.class; - default: - case "socket": - return base.server.socket.TcpClient.class; - } - case "udp": - return UdpSender.class; - } - throw new LoaderException("Failed to determine "); - } - - protected Class getClientForwarderClass(String protocol, String implementation) throws LoaderException { - switch (protocol) { - case "tcp": - switch (implementation) { - case "channel": - return base.server.forwarder.TcpClientChannelForwarder.class; - default: - case "socket": - return base.server.forwarder.TcpClientSocketForwarder.class; - } - case "udp": - return UdpDuplexClientForwarder.class; - } - throw new LoaderException("Failed to determine "); - } - - protected Class getServerForwarderClass(String protocol, String implementation) throws LoaderException { - switch (protocol) { - case "tcp": - switch (implementation) { - case "channel": - return base.server.forwarder.TcpChannelServerForwarder.class; - default: - case "socket": - return base.server.forwarder.TcpSocketServerForwarder.class; - } - case "udp": - return UdpDuplexServerForwarder.class; - } - throw new LoaderException("Failed to determine "); - } - - protected void addClientSender(String protocol, String implementation, String host, int port) throws LoaderException { - Class senderClass = getSenderClass(protocol, implementation); - logger.debug("Adding " + senderClass); - pico.addComponent(Sender.class, senderClass, new Parameter[]{ - new ConstantParameter(host), - new ConstantParameter(port)}); - } - - protected void addServerSender(String protocol, String implementation, int port) throws LoaderException { - Class senderClass = getSenderClass(protocol, implementation); - logger.debug("Adding " + senderClass); - pico.addComponent(Sender.class, senderClass, new Parameter[]{ - new ConstantParameter(port)}); - } - - protected void addClientForwarder(String protocol, String implementation, String host, int port) throws LoaderException { - Class forwarderClass = getClientForwarderClass(protocol, implementation); - logger.debug("Adding " + forwarderClass); - pico.addComponent(Forwarder.class, forwarderClass, new Parameter[]{ - new ConstantParameter(host), - new ConstantParameter(port)}); - } - - protected void addClientDuplex(String protocol, String implementation, String host, int port) throws LoaderException { - Class duplexClass = getClientForwarderClass(protocol, implementation); - logger.debug("Adding " + duplexClass); - pico.addComponent(Duplex.class, duplexClass, new Parameter[]{ - new ConstantParameter(host), - new ConstantParameter(port)}); - - } - - protected void addServerForwarder(String protocol, String implementation, int port) throws LoaderException { - Class forwarderClass = getServerForwarderClass(protocol, implementation); - logger.debug("Adding " + forwarderClass); - pico.addComponent(Forwarder.class, forwarderClass, new Parameter[]{ - new ConstantParameter(port)}); - } - - protected void addServerDuplex(String protocol, String implementation, int port) throws LoaderException { - Class duplexClass = getServerForwarderClass(protocol, implementation); - logger.debug("Adding " + duplexClass); - pico.addComponent(Duplex.class, duplexClass, new Parameter[]{ - new ConstantParameter(port)}); - } -} +package base.loader; + +import java.io.IOException; +import java.util.Properties; + +import org.picocontainer.DefaultPicoContainer; +import org.picocontainer.MutablePicoContainer; +import org.picocontainer.Parameter; +import org.picocontainer.parameters.ConstantParameter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import base.Duplex; +import base.Forwarder; +import base.Sender; +import base.exception.LoaderException; +import base.server.datagram.UdpSender; +import base.server.forwarder.UdpDuplexClientForwarder; +import base.server.forwarder.UdpDuplexServerForwarder; + +public class AbstractLoader { + protected static final String PROPERTIES_FILE = "loader.properties"; + protected static final Properties SERVER = null; + + protected Logger logger = LoggerFactory.getLogger(AbstractLoader.class); + protected MutablePicoContainer pico; + + public AbstractLoader() { + /* Initialise container */ + pico = new DefaultPicoContainer(); + } + + public AbstractLoader(Properties properties) { + this(); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public static T getLoader() throws LoaderException { + return (T) new AbstractLoader(readProperties(PROPERTIES_FILE)); + } + + public static Properties readProperties(String propertiesFile) throws LoaderException { + /* Read properties file */ + Properties properties = new Properties(); + try { + properties.load(AbstractLoader.class.getClassLoader().getResourceAsStream(propertiesFile)); + } catch (IOException e) { + throw new LoaderException("Faield to read properties file: " + PROPERTIES_FILE); + } + return properties; + } + + protected Class getSenderClass(String protocol, String implementation) throws LoaderException { + switch (protocol) { + case "tcp": + switch (implementation) { + case "channel": + return base.server.channel.TcpClient.class; + default: + case "socket": + return base.server.socket.TcpClient.class; + } + case "udp": + return UdpSender.class; + } + throw new LoaderException("Failed to determine "); + } + + protected Class getClientForwarderClass(String protocol, String implementation) throws LoaderException { + switch (protocol) { + case "tcp": + switch (implementation) { + case "channel": + return base.server.forwarder.TcpClientChannelForwarder.class; + default: + case "socket": + return base.server.forwarder.TcpClientSocketForwarder.class; + } + case "udp": + return UdpDuplexClientForwarder.class; + } + throw new LoaderException("Failed to determine "); + } + + protected Class getServerForwarderClass(String protocol, String implementation) throws LoaderException { + switch (protocol) { + case "tcp": + switch (implementation) { + case "channel": + return base.server.forwarder.TcpChannelServerForwarder.class; + default: + case "socket": + return base.server.forwarder.TcpSocketServerForwarder.class; + } + case "udp": + return UdpDuplexServerForwarder.class; + } + throw new LoaderException("Failed to determine "); + } + + protected void addClientSender(String protocol, String implementation, String host, int port) throws LoaderException { + Class senderClass = getSenderClass(protocol, implementation); + logger.debug("Adding " + senderClass); + pico.addComponent(Sender.class, senderClass, new Parameter[]{ + new ConstantParameter(host), + new ConstantParameter(port)}); + } + + protected void addServerSender(String protocol, String implementation, int port) throws LoaderException { + Class senderClass = getSenderClass(protocol, implementation); + logger.debug("Adding " + senderClass); + pico.addComponent(Sender.class, senderClass, new Parameter[]{ + new ConstantParameter(port)}); + } + + protected void addClientForwarder(String protocol, String implementation, String host, int port) throws LoaderException { + Class forwarderClass = getClientForwarderClass(protocol, implementation); + logger.debug("Adding " + forwarderClass); + pico.addComponent(Forwarder.class, forwarderClass, new Parameter[]{ + new ConstantParameter(host), + new ConstantParameter(port)}); + } + + protected void addClientDuplex(String protocol, String implementation, String host, int port) throws LoaderException { + Class duplexClass = getClientForwarderClass(protocol, implementation); + logger.debug("Adding " + duplexClass); + pico.addComponent(Duplex.class, duplexClass, new Parameter[]{ + new ConstantParameter(host), + new ConstantParameter(port)}); + + } + + protected void addServerForwarder(String protocol, String implementation, int port) throws LoaderException { + Class forwarderClass = getServerForwarderClass(protocol, implementation); + logger.debug("Adding " + forwarderClass); + pico.addComponent(Forwarder.class, forwarderClass, new Parameter[]{ + new ConstantParameter(port)}); + } + + protected void addServerDuplex(String protocol, String implementation, int port) throws LoaderException { + Class duplexClass = getServerForwarderClass(protocol, implementation); + logger.debug("Adding " + duplexClass); + pico.addComponent(Duplex.class, duplexClass, new Parameter[]{ + new ConstantParameter(port)}); + } +} diff --git a/java/base/src/main/java/base/server/channel/TcpClient.java b/java/core.legacy/src/main/java/base/server/channel/TcpClient.java similarity index 97% rename from java/base/src/main/java/base/server/channel/TcpClient.java rename to java/core.legacy/src/main/java/base/server/channel/TcpClient.java index 3c6075d..0c8ae71 100644 --- a/java/base/src/main/java/base/server/channel/TcpClient.java +++ b/java/core.legacy/src/main/java/base/server/channel/TcpClient.java @@ -1,137 +1,137 @@ -package base.server.channel; - -import java.io.IOException; -import java.net.InetSocketAddress; -import java.nio.ByteBuffer; -import java.nio.channels.SelectionKey; -import java.nio.channels.Selector; -import java.nio.channels.SocketChannel; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Set; - -import base.Sender; -import base.exception.worker.ActivateException; -import base.exception.worker.DeactivateException; -import base.work.Listen; -import base.work.Work; -import base.worker.Worker; - -public class TcpClient extends Work implements Sender { - protected static final String HOST = "localhost"; - protected static final int BUFFER_SIZE = 1024; - - protected String host; - protected int port; - protected int bufferSize; - protected SocketChannel socketChannel; - protected Selector selector; - protected ArrayList> listenList = new ArrayList>(); - - public TcpClient(int port) { - this(HOST, port); - } - - public TcpClient(String host, int port) { - this(host, port, BUFFER_SIZE); - } - - public TcpClient(String host, int port, int bufferSize) { - this.host = host; - this.port = port; - this.bufferSize = bufferSize; - } - - public void activate() throws ActivateException { - System.out.println("Client: Activate!"); - try { - InetSocketAddress hostAddress = new InetSocketAddress(host, port); - socketChannel = SocketChannel.open(hostAddress); - socketChannel.configureBlocking(false); - while (!socketChannel.finishConnect()) { - sleep(Worker.SLEEP); - } - selector = Selector.open(); - socketChannel.register(selector, SelectionKey.OP_READ); - synchronized (host) { - host.notifyAll(); - } - } catch (Exception e) { - logger.error("", e); - throw new ActivateException(); - } - super.activate(); - } - - public void deactivate() throws DeactivateException { - System.out.println("Client: Deactivate!"); - try { - selector.close(); - socketChannel.close(); - } catch (IOException e) { - throw new DeactivateException(); - } - } - - public void stop() { - super.stop(); - if (selector != null) { - selector.wakeup(); - } - } - - public final void work() { - try { - logger.debug("Client: Waiting for select... "); - logger.debug("Client: Number of selected keys: " + selector.select()); - Set selectionKeySet = selector.selectedKeys(); - Iterator selectionKeyIterator = selectionKeySet.iterator(); - - while (selectionKeyIterator.hasNext()) { - SelectionKey selectionKey = selectionKeyIterator.next(); - if (selectionKey.isReadable()) { - ByteBuffer byteBuffer = ByteBuffer.allocate(bufferSize); - socketChannel.read(byteBuffer); - byte[] buffer = byteBuffer.array(); - input(buffer); - } else if (selectionKey.isWritable()) { - byte[] buffer; - buffer = (byte[]) selectionKey.attachment(); - ByteBuffer byteBuffer = ByteBuffer.wrap(buffer); - socketChannel.write(byteBuffer); - //selectionKey.cancel(); - socketChannel.register(selector, SelectionKey.OP_READ); - } - selectionKeyIterator.remove(); - } - } catch (Exception e) { - logger.error("", e); - } - } - - protected void input(byte[] buffer) {} - - public void send(byte[] buffer) throws IOException { - if (selector == null) { - try { - synchronized (host) { - host.wait(); - } - } catch (InterruptedException e) {} - } - selector.wakeup(); - socketChannel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE, buffer); - } - - public void close() throws IOException { - socketChannel.close(); - } - - /*public void register(Listen listen) { - listenList.add(listen); - } - - public void remove(Listen listen) { - listenList.remove(listen); - }*/ +package base.server.channel; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.SocketChannel; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Set; + +import base.Sender; +import base.exception.worker.ActivateException; +import base.exception.worker.DeactivateException; +import base.work.Listen; +import base.work.Work; +import base.worker.Worker; + +public class TcpClient extends Work implements Sender { + protected static final String HOST = "localhost"; + protected static final int BUFFER_SIZE = 1024; + + protected String host; + protected int port; + protected int bufferSize; + protected SocketChannel socketChannel; + protected Selector selector; + protected ArrayList> listenList = new ArrayList>(); + + public TcpClient(int port) { + this(HOST, port); + } + + public TcpClient(String host, int port) { + this(host, port, BUFFER_SIZE); + } + + public TcpClient(String host, int port, int bufferSize) { + this.host = host; + this.port = port; + this.bufferSize = bufferSize; + } + + public void activate() throws ActivateException { + System.out.println("Client: Activate!"); + try { + InetSocketAddress hostAddress = new InetSocketAddress(host, port); + socketChannel = SocketChannel.open(hostAddress); + socketChannel.configureBlocking(false); + while (!socketChannel.finishConnect()) { + sleep(Worker.SLEEP); + } + selector = Selector.open(); + socketChannel.register(selector, SelectionKey.OP_READ); + synchronized (host) { + host.notifyAll(); + } + } catch (Exception e) { + logger.error("", e); + throw new ActivateException(); + } + super.activate(); + } + + public void deactivate() throws DeactivateException { + System.out.println("Client: Deactivate!"); + try { + selector.close(); + socketChannel.close(); + } catch (IOException e) { + throw new DeactivateException(); + } + } + + public void stop() { + super.stop(); + if (selector != null) { + selector.wakeup(); + } + } + + public final void work() { + try { + logger.debug("Client: Waiting for select... "); + logger.debug("Client: Number of selected keys: " + selector.select()); + Set selectionKeySet = selector.selectedKeys(); + Iterator selectionKeyIterator = selectionKeySet.iterator(); + + while (selectionKeyIterator.hasNext()) { + SelectionKey selectionKey = selectionKeyIterator.next(); + if (selectionKey.isReadable()) { + ByteBuffer byteBuffer = ByteBuffer.allocate(bufferSize); + socketChannel.read(byteBuffer); + byte[] buffer = byteBuffer.array(); + input(buffer); + } else if (selectionKey.isWritable()) { + byte[] buffer; + buffer = (byte[]) selectionKey.attachment(); + ByteBuffer byteBuffer = ByteBuffer.wrap(buffer); + socketChannel.write(byteBuffer); + //selectionKey.cancel(); + socketChannel.register(selector, SelectionKey.OP_READ); + } + selectionKeyIterator.remove(); + } + } catch (Exception e) { + logger.error("", e); + } + } + + protected void input(byte[] buffer) {} + + public void send(byte[] buffer) throws IOException { + if (selector == null) { + try { + synchronized (host) { + host.wait(); + } + } catch (InterruptedException e) {} + } + selector.wakeup(); + socketChannel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE, buffer); + } + + public void close() throws IOException { + socketChannel.close(); + } + + /*public void register(Listen listen) { + listenList.add(listen); + } + + public void remove(Listen listen) { + listenList.remove(listen); + }*/ } \ No newline at end of file diff --git a/java/base/src/main/java/base/server/channel/TcpServer.java b/java/core.legacy/src/main/java/base/server/channel/TcpServer.java similarity index 97% rename from java/base/src/main/java/base/server/channel/TcpServer.java rename to java/core.legacy/src/main/java/base/server/channel/TcpServer.java index c39379b..a5fec1d 100644 --- a/java/base/src/main/java/base/server/channel/TcpServer.java +++ b/java/core.legacy/src/main/java/base/server/channel/TcpServer.java @@ -1,158 +1,158 @@ -package base.server.channel; - -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.net.BindException; -import java.net.InetSocketAddress; -import java.nio.ByteBuffer; -import java.nio.channels.SelectionKey; -import java.nio.channels.Selector; -import java.nio.channels.ServerSocketChannel; -import java.nio.channels.SocketChannel; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Set; - -import base.Sender; -import base.exception.worker.ActivateException; -import base.exception.worker.DeactivateException; -import base.server.channel.TcpServerClient; -import base.work.Work; - -public class TcpServer extends Work implements Sender { - protected static final Class CLIENT_CLASS = TcpServerClient.class; - protected static final int BUFFER_SIZE = 1024; - - protected int port; - protected int bufferSize; - protected Constructor clientConstructor; - protected Selector selector; - protected ServerSocketChannel serverSocket; - protected ArrayList clientList; - - public TcpServer(int port) { - this(port, CLIENT_CLASS); - } - - public TcpServer(int port, Class clientClass) { - this(port, clientClass, BUFFER_SIZE); - } - - public TcpServer(int port, Class clientClass, int bufferSize) { - this.port = port; - this.bufferSize = bufferSize; - try { - // Allow dependency injection, constructor arguments - clientConstructor = Class.forName(clientClass.getName()).getConstructor(TcpServer.class, SocketChannel.class, Integer.class); - } catch (NoSuchMethodException | SecurityException | ClassNotFoundException e) { - logger.error("Failed to initialise client constructor", e); - } - clientList = new ArrayList(); - } - - public void activate() throws ActivateException { - System.out.println("Server: Activate!"); - try { - // Get selector - selector = Selector.open(); - - // Get server socket channel and register with selector - serverSocket = ServerSocketChannel.open(); - InetSocketAddress hostAddress = new InetSocketAddress(port); - serverSocket.bind(hostAddress); - serverSocket.configureBlocking(false); - serverSocket.register(selector, SelectionKey.OP_ACCEPT); - synchronized (clientConstructor) { - clientConstructor.notifyAll(); - } - return; - } catch (BindException e) { - logger.error("Address already in use", e); - } catch (IOException e) { - logger.error("", e); - } - throw new ActivateException(); - } - - public void deactivate() throws DeactivateException { - System.out.println("Server: Deactivate!"); - try { - selector.close(); - serverSocket.close(); - } catch (IOException e) { - throw new DeactivateException(); - } finally { - for (TcpServerClient client : clientList) { - client.stop(); - } - } - } - - public void stop() { - super.stop(); - if (selector != null) { - selector.wakeup(); - } - } - - public void work() { - try { - System.out.println("Server: Waiting for select... "); - System.out.println("Server: Number of selected keys: " + selector.select()); - - Set selectionKeySet = selector.selectedKeys(); - Iterator selectionKeyIterator = selectionKeySet.iterator(); - - while (selectionKeyIterator.hasNext()) { - SelectionKey selectionKey = selectionKeyIterator.next(); - if (selectionKey.isAcceptable()) { - // Accept the new client connection - SocketChannel socketChannel = serverSocket.accept(); - socketChannel.configureBlocking(false); - - // Add the new connection to the selector - TcpServerClient client = (TcpServerClient) clientConstructor.newInstance(this, socketChannel, bufferSize); - clientList.add(client); - socketChannel.register(selector, SelectionKey.OP_READ, client); - //initClient(client); - System.out.println("Accepted new connection from client: " + socketChannel); - } else if (selectionKey.isReadable()) { - // Read the data from client - TcpServerClient serverClient = (TcpServerClient) selectionKey.attachment(); - serverClient.readable(); - } else if (selectionKey.isWritable()) { - // Write to client? - } - selectionKeyIterator.remove(); - } - }/* catch (IOException e) {} catch (InstantiationException e) { - logger.error("", e); - } catch (IllegalAccessException e) { - logger.error("", e); - } catch (IllegalArgumentException e) { - logger.error("", e); - } catch (InvocationTargetException e) { - logger.error("", e); - } */catch (Exception e) { - e.printStackTrace(); - } - } - - protected void initClient(TcpServerClient client) { - try { - client.write(ByteBuffer.wrap(new String("Hi there!").getBytes())); - } catch (IOException e) { - logger.error("", e); - } - } - - public void send(byte[] buffer) throws IOException { - logger.debug("Number of clients = " + clientList.size()); - for (TcpServerClient client : clientList) { - // Should be dealt with in clients own thread - client.send(buffer); - } - } - - public void input(TcpServerClient client, byte[] buffer) {} +package base.server.channel; + +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.net.BindException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Set; + +import base.Sender; +import base.exception.worker.ActivateException; +import base.exception.worker.DeactivateException; +import base.server.channel.TcpServerClient; +import base.work.Work; + +public class TcpServer extends Work implements Sender { + protected static final Class CLIENT_CLASS = TcpServerClient.class; + protected static final int BUFFER_SIZE = 1024; + + protected int port; + protected int bufferSize; + protected Constructor clientConstructor; + protected Selector selector; + protected ServerSocketChannel serverSocket; + protected ArrayList clientList; + + public TcpServer(int port) { + this(port, CLIENT_CLASS); + } + + public TcpServer(int port, Class clientClass) { + this(port, clientClass, BUFFER_SIZE); + } + + public TcpServer(int port, Class clientClass, int bufferSize) { + this.port = port; + this.bufferSize = bufferSize; + try { + // Allow dependency injection, constructor arguments + clientConstructor = Class.forName(clientClass.getName()).getConstructor(TcpServer.class, SocketChannel.class, Integer.class); + } catch (NoSuchMethodException | SecurityException | ClassNotFoundException e) { + logger.error("Failed to initialise client constructor", e); + } + clientList = new ArrayList(); + } + + public void activate() throws ActivateException { + System.out.println("Server: Activate!"); + try { + // Get selector + selector = Selector.open(); + + // Get server socket channel and register with selector + serverSocket = ServerSocketChannel.open(); + InetSocketAddress hostAddress = new InetSocketAddress(port); + serverSocket.bind(hostAddress); + serverSocket.configureBlocking(false); + serverSocket.register(selector, SelectionKey.OP_ACCEPT); + synchronized (clientConstructor) { + clientConstructor.notifyAll(); + } + return; + } catch (BindException e) { + logger.error("Address already in use", e); + } catch (IOException e) { + logger.error("", e); + } + throw new ActivateException(); + } + + public void deactivate() throws DeactivateException { + System.out.println("Server: Deactivate!"); + try { + selector.close(); + serverSocket.close(); + } catch (IOException e) { + throw new DeactivateException(); + } finally { + for (TcpServerClient client : clientList) { + client.stop(); + } + } + } + + public void stop() { + super.stop(); + if (selector != null) { + selector.wakeup(); + } + } + + public void work() { + try { + System.out.println("Server: Waiting for select... "); + System.out.println("Server: Number of selected keys: " + selector.select()); + + Set selectionKeySet = selector.selectedKeys(); + Iterator selectionKeyIterator = selectionKeySet.iterator(); + + while (selectionKeyIterator.hasNext()) { + SelectionKey selectionKey = selectionKeyIterator.next(); + if (selectionKey.isAcceptable()) { + // Accept the new client connection + SocketChannel socketChannel = serverSocket.accept(); + socketChannel.configureBlocking(false); + + // Add the new connection to the selector + TcpServerClient client = (TcpServerClient) clientConstructor.newInstance(this, socketChannel, bufferSize); + clientList.add(client); + socketChannel.register(selector, SelectionKey.OP_READ, client); + //initClient(client); + System.out.println("Accepted new connection from client: " + socketChannel); + } else if (selectionKey.isReadable()) { + // Read the data from client + TcpServerClient serverClient = (TcpServerClient) selectionKey.attachment(); + serverClient.readable(); + } else if (selectionKey.isWritable()) { + // Write to client? + } + selectionKeyIterator.remove(); + } + }/* catch (IOException e) {} catch (InstantiationException e) { + logger.error("", e); + } catch (IllegalAccessException e) { + logger.error("", e); + } catch (IllegalArgumentException e) { + logger.error("", e); + } catch (InvocationTargetException e) { + logger.error("", e); + } */catch (Exception e) { + e.printStackTrace(); + } + } + + protected void initClient(TcpServerClient client) { + try { + client.write(ByteBuffer.wrap(new String("Hi there!").getBytes())); + } catch (IOException e) { + logger.error("", e); + } + } + + public void send(byte[] buffer) throws IOException { + logger.debug("Number of clients = " + clientList.size()); + for (TcpServerClient client : clientList) { + // Should be dealt with in clients own thread + client.send(buffer); + } + } + + public void input(TcpServerClient client, byte[] buffer) {} } \ No newline at end of file diff --git a/java/base/src/main/java/base/server/channel/TcpServerClient.java b/java/core.legacy/src/main/java/base/server/channel/TcpServerClient.java similarity index 96% rename from java/base/src/main/java/base/server/channel/TcpServerClient.java rename to java/core.legacy/src/main/java/base/server/channel/TcpServerClient.java index 6082754..405948c 100644 --- a/java/base/src/main/java/base/server/channel/TcpServerClient.java +++ b/java/core.legacy/src/main/java/base/server/channel/TcpServerClient.java @@ -1,54 +1,54 @@ -package base.server.channel; - -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.channels.SocketChannel; - -import base.Sender; -import base.work.Listen; - -public class TcpServerClient extends Listen implements Sender { - protected static final int BUFFER_SIZE = 1024; - - protected TcpServer server; - protected SocketChannel socketChannel; - protected int bufferSize; - protected ByteBuffer byteBuffer; - - public TcpServerClient(TcpServer server, SocketChannel socketChannel) { - this(server, socketChannel, BUFFER_SIZE); - } - - public TcpServerClient(TcpServer server, SocketChannel socketChannel, Integer bufferSize) { - super(); - this.server = server; - this.socketChannel = socketChannel; - this.bufferSize = bufferSize; - byteBuffer = ByteBuffer.allocate(bufferSize); - } - - public void write(ByteBuffer byteBuffer) throws IOException { - socketChannel.write(byteBuffer); - } - - public void readable() throws IOException { - int read; - while (( read = socketChannel.read(byteBuffer)) > 0) { - byteBuffer.flip(); - byte[] buffer = byteBuffer.array(); - input(buffer); - byteBuffer.clear(); - } - if (read < 0) { - socketChannel.close(); - } - } - - public void input(byte[] buffer) { - server.input(this, buffer); - } - - public void send(byte[] buffer) throws IOException { - write(ByteBuffer.wrap(buffer)); - } -} +package base.server.channel; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; + +import base.Sender; +import base.work.Listen; + +public class TcpServerClient extends Listen implements Sender { + protected static final int BUFFER_SIZE = 1024; + + protected TcpServer server; + protected SocketChannel socketChannel; + protected int bufferSize; + protected ByteBuffer byteBuffer; + + public TcpServerClient(TcpServer server, SocketChannel socketChannel) { + this(server, socketChannel, BUFFER_SIZE); + } + + public TcpServerClient(TcpServer server, SocketChannel socketChannel, Integer bufferSize) { + super(); + this.server = server; + this.socketChannel = socketChannel; + this.bufferSize = bufferSize; + byteBuffer = ByteBuffer.allocate(bufferSize); + } + + public void write(ByteBuffer byteBuffer) throws IOException { + socketChannel.write(byteBuffer); + } + + public void readable() throws IOException { + int read; + while (( read = socketChannel.read(byteBuffer)) > 0) { + byteBuffer.flip(); + byte[] buffer = byteBuffer.array(); + input(buffer); + byteBuffer.clear(); + } + if (read < 0) { + socketChannel.close(); + } + } + + public void input(byte[] buffer) { + server.input(this, buffer); + } + + public void send(byte[] buffer) throws IOException { + write(ByteBuffer.wrap(buffer)); + } +} diff --git a/java/base/src/main/java/base/server/datagram/AbstractUdpClient.java b/java/core.legacy/src/main/java/base/server/datagram/AbstractUdpClient.java similarity index 96% rename from java/base/src/main/java/base/server/datagram/AbstractUdpClient.java rename to java/core.legacy/src/main/java/base/server/datagram/AbstractUdpClient.java index 9108676..e66597e 100644 --- a/java/base/src/main/java/base/server/datagram/AbstractUdpClient.java +++ b/java/core.legacy/src/main/java/base/server/datagram/AbstractUdpClient.java @@ -1,46 +1,46 @@ -package base.server.datagram; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.MulticastSocket; - -import base.work.Work; - -public abstract class AbstractUdpClient extends Work { - protected static final int BUFFER_SIZE = 2048; - - protected int bufferSize; - protected MulticastSocket socket; - protected DatagramPacket datagramPacket; - - public AbstractUdpClient() {} - - public AbstractUdpClient(MulticastSocket socket) { - this(socket, BUFFER_SIZE); - } - - public AbstractUdpClient(MulticastSocket socket, int bufferSize) { - this.socket = socket; - this.bufferSize = bufferSize; - byte[] buffer = new byte[bufferSize]; - datagramPacket = new DatagramPacket(buffer, buffer.length); - } - - public void work() { - try { - byte[] buffer = new byte[bufferSize]; - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); - socket.receive(packet); - System.out.println("iets ontvangen!!!!!"); - buffer = packet.getData(); - input(buffer); - } catch (IOException e) {} - } - - public void stop() { - socket.close(); - super.stop(); - } - - protected abstract void input(byte[] buffer); -} +package base.server.datagram; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.MulticastSocket; + +import base.work.Work; + +public abstract class AbstractUdpClient extends Work { + protected static final int BUFFER_SIZE = 2048; + + protected int bufferSize; + protected MulticastSocket socket; + protected DatagramPacket datagramPacket; + + public AbstractUdpClient() {} + + public AbstractUdpClient(MulticastSocket socket) { + this(socket, BUFFER_SIZE); + } + + public AbstractUdpClient(MulticastSocket socket, int bufferSize) { + this.socket = socket; + this.bufferSize = bufferSize; + byte[] buffer = new byte[bufferSize]; + datagramPacket = new DatagramPacket(buffer, buffer.length); + } + + public void work() { + try { + byte[] buffer = new byte[bufferSize]; + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + socket.receive(packet); + System.out.println("iets ontvangen!!!!!"); + buffer = packet.getData(); + input(buffer); + } catch (IOException e) {} + } + + public void stop() { + socket.close(); + super.stop(); + } + + protected abstract void input(byte[] buffer); +} diff --git a/java/base/src/main/java/base/server/datagram/UdpDuplexAutoClient.java b/java/core.legacy/src/main/java/base/server/datagram/UdpDuplexAutoClient.java similarity index 97% rename from java/base/src/main/java/base/server/datagram/UdpDuplexAutoClient.java rename to java/core.legacy/src/main/java/base/server/datagram/UdpDuplexAutoClient.java index a3763d5..641a210 100644 --- a/java/base/src/main/java/base/server/datagram/UdpDuplexAutoClient.java +++ b/java/core.legacy/src/main/java/base/server/datagram/UdpDuplexAutoClient.java @@ -1,17 +1,17 @@ -package base.server.datagram; - -import java.net.UnknownHostException; - -public class UdpDuplexAutoClient extends UdpDuplexClient { - public UdpDuplexAutoClient(int bindPort, int sendPort) throws UnknownHostException { - super(HOST, bindPort, null, sendPort); - } - - public UdpDuplexAutoClient(String bindHost, int bindPort, int sendPort) throws UnknownHostException { - super(bindHost, bindPort, null, sendPort); - } - - public UdpDuplexAutoClient(String bindHost, int bindPort, int sendPort, int bufferSize) throws UnknownHostException { - super(bindHost, bindPort, null, sendPort, bufferSize); - } -} +package base.server.datagram; + +import java.net.UnknownHostException; + +public class UdpDuplexAutoClient extends UdpDuplexClient { + public UdpDuplexAutoClient(int bindPort, int sendPort) throws UnknownHostException { + super(HOST, bindPort, null, sendPort); + } + + public UdpDuplexAutoClient(String bindHost, int bindPort, int sendPort) throws UnknownHostException { + super(bindHost, bindPort, null, sendPort); + } + + public UdpDuplexAutoClient(String bindHost, int bindPort, int sendPort, int bufferSize) throws UnknownHostException { + super(bindHost, bindPort, null, sendPort, bufferSize); + } +} diff --git a/java/base/src/main/java/base/server/datagram/UdpDuplexClient.java b/java/core.legacy/src/main/java/base/server/datagram/UdpDuplexClient.java similarity index 97% rename from java/base/src/main/java/base/server/datagram/UdpDuplexClient.java rename to java/core.legacy/src/main/java/base/server/datagram/UdpDuplexClient.java index 0b8ada8..f4f7f95 100644 --- a/java/base/src/main/java/base/server/datagram/UdpDuplexClient.java +++ b/java/core.legacy/src/main/java/base/server/datagram/UdpDuplexClient.java @@ -1,51 +1,51 @@ -package base.server.datagram; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.UnknownHostException; - -import base.Sender; - -public class UdpDuplexClient extends UdpMulticastClient implements Sender { - protected int sendPort; - protected Sender sender; - - public UdpDuplexClient(int bindPort, String sendHost, int sendPort) throws UnknownHostException { - this(HOST, bindPort, sendHost, sendPort); - } - - public UdpDuplexClient(String bindHost, int bindPort, String sendHost, int sendPort) throws UnknownHostException { - this(bindHost, bindPort, sendHost, sendPort, BUFFER_SIZE); - } - - public UdpDuplexClient(String bindHost, int bindPort, String sendHost, int sendPort, int bufferSize) throws UnknownHostException { - super(bindHost, bindPort, bufferSize); - this.sendPort = sendPort; - if (sendHost != null) { - sender = new UdpSender(sendHost, sendPort); - } - } - - public void work() { - try { - byte[] buffer = new byte[bufferSize]; - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); - socket.receive(packet); - buffer = packet.getData(); - System.out.println("Receive from " + packet.getAddress().getHostAddress()); - if (sender == null) { - String sendHost = packet.getAddress().getHostAddress(); - sender = new UdpSender(sendHost, sendPort); - } - input(buffer); - } catch (IOException e) {} - } - - public void send(byte[] buffer) throws IOException { - if (sender != null) { - sender.send(buffer); - } - } - - public void input(byte[] buffer) {} -} +package base.server.datagram; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.UnknownHostException; + +import base.Sender; + +public class UdpDuplexClient extends UdpMulticastClient implements Sender { + protected int sendPort; + protected Sender sender; + + public UdpDuplexClient(int bindPort, String sendHost, int sendPort) throws UnknownHostException { + this(HOST, bindPort, sendHost, sendPort); + } + + public UdpDuplexClient(String bindHost, int bindPort, String sendHost, int sendPort) throws UnknownHostException { + this(bindHost, bindPort, sendHost, sendPort, BUFFER_SIZE); + } + + public UdpDuplexClient(String bindHost, int bindPort, String sendHost, int sendPort, int bufferSize) throws UnknownHostException { + super(bindHost, bindPort, bufferSize); + this.sendPort = sendPort; + if (sendHost != null) { + sender = new UdpSender(sendHost, sendPort); + } + } + + public void work() { + try { + byte[] buffer = new byte[bufferSize]; + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + socket.receive(packet); + buffer = packet.getData(); + System.out.println("Receive from " + packet.getAddress().getHostAddress()); + if (sender == null) { + String sendHost = packet.getAddress().getHostAddress(); + sender = new UdpSender(sendHost, sendPort); + } + input(buffer); + } catch (IOException e) {} + } + + public void send(byte[] buffer) throws IOException { + if (sender != null) { + sender.send(buffer); + } + } + + public void input(byte[] buffer) {} +} diff --git a/java/base/src/main/java/base/server/datagram/UdpDuplexHelper.java b/java/core.legacy/src/main/java/base/server/datagram/UdpDuplexHelper.java similarity index 95% rename from java/base/src/main/java/base/server/datagram/UdpDuplexHelper.java rename to java/core.legacy/src/main/java/base/server/datagram/UdpDuplexHelper.java index a2c5267..c2453df 100644 --- a/java/base/src/main/java/base/server/datagram/UdpDuplexHelper.java +++ b/java/core.legacy/src/main/java/base/server/datagram/UdpDuplexHelper.java @@ -1,19 +1,19 @@ -package base.server.datagram; - -import java.net.MulticastSocket; - -import base.work.Listen; - -public class UdpDuplexHelper extends AbstractUdpClient { - protected Listen listen; - - public UdpDuplexHelper(Listen listen, MulticastSocket socket) { - super(socket); - this.listen = listen; - } - - public void input(byte[] buffer) { - System.out.println("jajajaja"); - listen.add(buffer); - } -} +package base.server.datagram; + +import java.net.MulticastSocket; + +import base.work.Listen; + +public class UdpDuplexHelper extends AbstractUdpClient { + protected Listen listen; + + public UdpDuplexHelper(Listen listen, MulticastSocket socket) { + super(socket); + this.listen = listen; + } + + public void input(byte[] buffer) { + System.out.println("jajajaja"); + listen.add(buffer); + } +} diff --git a/java/base/src/main/java/base/server/datagram/UdpDuplexServer.java b/java/core.legacy/src/main/java/base/server/datagram/UdpDuplexServer.java similarity index 96% rename from java/base/src/main/java/base/server/datagram/UdpDuplexServer.java rename to java/core.legacy/src/main/java/base/server/datagram/UdpDuplexServer.java index cd5d6d9..d5e451a 100644 --- a/java/base/src/main/java/base/server/datagram/UdpDuplexServer.java +++ b/java/core.legacy/src/main/java/base/server/datagram/UdpDuplexServer.java @@ -1,59 +1,59 @@ -package base.server.datagram; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.InetAddress; -import java.net.MulticastSocket; - -import base.exception.worker.ActivateException; -import base.exception.worker.DeactivateException; - -public class UdpDuplexServer extends UdpMulticastServer { - protected int bindPort; - protected UdpDuplexHelper helper; - - public UdpDuplexServer(int sendPort, int bindPort) { - super(sendPort); - this.bindPort = bindPort; - } - - public void activate() throws ActivateException { - try { - socket = new MulticastSocket(bindPort); - synchronized (this) { - notifyAll(); - } - helper = new UdpDuplexHelper(this, socket); - helper.start(); - } catch (IOException e) { - throw new ActivateException(); - } - super.activate(); - } - - public void deactivate() throws DeactivateException { - helper.stop(); - super.deactivate(); - } - - public void send(byte[] buffer) throws IOException { - if (socket == null) { - synchronized (this) { - try { - wait(); - } catch (InterruptedException e) { - return; - } - } - } - try { - InetAddress group = InetAddress.getByName(host); - System.out.println("Send to " + host + " " + port); - DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group, port); - socket.send(packet); - } - catch (IOException e) { - logger.error("", e); - } - } -} +package base.server.datagram; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.InetAddress; +import java.net.MulticastSocket; + +import base.exception.worker.ActivateException; +import base.exception.worker.DeactivateException; + +public class UdpDuplexServer extends UdpMulticastServer { + protected int bindPort; + protected UdpDuplexHelper helper; + + public UdpDuplexServer(int sendPort, int bindPort) { + super(sendPort); + this.bindPort = bindPort; + } + + public void activate() throws ActivateException { + try { + socket = new MulticastSocket(bindPort); + synchronized (this) { + notifyAll(); + } + helper = new UdpDuplexHelper(this, socket); + helper.start(); + } catch (IOException e) { + throw new ActivateException(); + } + super.activate(); + } + + public void deactivate() throws DeactivateException { + helper.stop(); + super.deactivate(); + } + + public void send(byte[] buffer) throws IOException { + if (socket == null) { + synchronized (this) { + try { + wait(); + } catch (InterruptedException e) { + return; + } + } + } + try { + InetAddress group = InetAddress.getByName(host); + System.out.println("Send to " + host + " " + port); + DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group, port); + socket.send(packet); + } + catch (IOException e) { + logger.error("", e); + } + } +} diff --git a/java/base/src/main/java/base/server/datagram/UdpMulticastClient.java b/java/core.legacy/src/main/java/base/server/datagram/UdpMulticastClient.java similarity index 96% rename from java/base/src/main/java/base/server/datagram/UdpMulticastClient.java rename to java/core.legacy/src/main/java/base/server/datagram/UdpMulticastClient.java index f8ced26..7238326 100644 --- a/java/base/src/main/java/base/server/datagram/UdpMulticastClient.java +++ b/java/core.legacy/src/main/java/base/server/datagram/UdpMulticastClient.java @@ -1,42 +1,42 @@ -package base.server.datagram; - -import java.io.IOException; -import java.net.InetAddress; -import java.net.MulticastSocket; - -import base.exception.worker.ActivateException; - -public class UdpMulticastClient extends AbstractUdpClient { - protected static final String HOST = "239.255.255.255"; - - protected String host; - protected int port; - - public UdpMulticastClient(int port) { - this(HOST, port); - } - - public UdpMulticastClient(String host, int port) { - this(host, port, BUFFER_SIZE); - } - - public UdpMulticastClient(String host, int port, int bufferSize) { - this.host = host; - this.port = port; - this.bufferSize = BUFFER_SIZE; - System.out.println("Client bind: " + host + " " + port); - } - - public void activate() throws ActivateException { - try { - socket = new MulticastSocket(port); - InetAddress group = InetAddress.getByName(host); - socket.joinGroup(group); - } catch (IOException e) { - logger.error("", e); - throw new ActivateException(); - } - } - - protected void input(byte[] buffer) {} -} +package base.server.datagram; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.MulticastSocket; + +import base.exception.worker.ActivateException; + +public class UdpMulticastClient extends AbstractUdpClient { + protected static final String HOST = "239.255.255.255"; + + protected String host; + protected int port; + + public UdpMulticastClient(int port) { + this(HOST, port); + } + + public UdpMulticastClient(String host, int port) { + this(host, port, BUFFER_SIZE); + } + + public UdpMulticastClient(String host, int port, int bufferSize) { + this.host = host; + this.port = port; + this.bufferSize = BUFFER_SIZE; + System.out.println("Client bind: " + host + " " + port); + } + + public void activate() throws ActivateException { + try { + socket = new MulticastSocket(port); + InetAddress group = InetAddress.getByName(host); + socket.joinGroup(group); + } catch (IOException e) { + logger.error("", e); + throw new ActivateException(); + } + } + + protected void input(byte[] buffer) {} +} diff --git a/java/base/src/main/java/base/server/datagram/UdpMulticastServer.java b/java/core.legacy/src/main/java/base/server/datagram/UdpMulticastServer.java similarity index 96% rename from java/base/src/main/java/base/server/datagram/UdpMulticastServer.java rename to java/core.legacy/src/main/java/base/server/datagram/UdpMulticastServer.java index 621d1b9..ad984cc 100644 --- a/java/base/src/main/java/base/server/datagram/UdpMulticastServer.java +++ b/java/core.legacy/src/main/java/base/server/datagram/UdpMulticastServer.java @@ -1,61 +1,61 @@ -package base.server.datagram; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.InetAddress; -import java.net.MulticastSocket; - -import base.Sender; -import base.exception.worker.ActivateException; -import base.exception.worker.DeactivateException; -import base.work.Listen; -import base.worker.Worker; - -public class UdpMulticastServer extends Listen implements Sender { - protected static final String HOST = "239.255.255.255"; - protected static final int BUFFER_SIZE = 2048; - - protected String host; - protected int port; - protected MulticastSocket socket; - - public UdpMulticastServer(int port) { - this(HOST, port); - } - - public UdpMulticastServer(String host, int port) { - super(Worker.Type.BACKGROUND); - this.host = host; - this.port = port; - System.out.println("Server send: " + host + " " + port); - } - - public void activate() throws ActivateException { - try { - socket = new MulticastSocket(); - } catch (IOException e) { - throw new ActivateException(); - } - super.activate(); - } - - public void deactivate() throws DeactivateException { - socket.close(); - super.deactivate(); - } - - public void input(byte[] buffer) { - try { - InetAddress group = InetAddress.getByName(host); - DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group, port); - socket.send(packet); - } - catch (IOException e) { - logger.error("", e); - } - } - - public void send(byte[] buffer) throws IOException { - add(buffer); - } -} +package base.server.datagram; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.InetAddress; +import java.net.MulticastSocket; + +import base.Sender; +import base.exception.worker.ActivateException; +import base.exception.worker.DeactivateException; +import base.work.Listen; +import base.worker.Worker; + +public class UdpMulticastServer extends Listen implements Sender { + protected static final String HOST = "239.255.255.255"; + protected static final int BUFFER_SIZE = 2048; + + protected String host; + protected int port; + protected MulticastSocket socket; + + public UdpMulticastServer(int port) { + this(HOST, port); + } + + public UdpMulticastServer(String host, int port) { + super(Worker.Type.BACKGROUND); + this.host = host; + this.port = port; + System.out.println("Server send: " + host + " " + port); + } + + public void activate() throws ActivateException { + try { + socket = new MulticastSocket(); + } catch (IOException e) { + throw new ActivateException(); + } + super.activate(); + } + + public void deactivate() throws DeactivateException { + socket.close(); + super.deactivate(); + } + + public void input(byte[] buffer) { + try { + InetAddress group = InetAddress.getByName(host); + DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group, port); + socket.send(packet); + } + catch (IOException e) { + logger.error("", e); + } + } + + public void send(byte[] buffer) throws IOException { + add(buffer); + } +} diff --git a/java/base/src/main/java/base/server/datagram/UdpSender.java b/java/core.legacy/src/main/java/base/server/datagram/UdpSender.java similarity index 96% rename from java/base/src/main/java/base/server/datagram/UdpSender.java rename to java/core.legacy/src/main/java/base/server/datagram/UdpSender.java index afb5802..a71ff84 100644 --- a/java/base/src/main/java/base/server/datagram/UdpSender.java +++ b/java/core.legacy/src/main/java/base/server/datagram/UdpSender.java @@ -1,56 +1,56 @@ -package base.server.datagram; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; -import java.net.SocketException; -import java.net.UnknownHostException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import base.Sender; - -public class UdpSender implements Sender { - protected static final String HOST = "localhost"; - protected Logger logger = LoggerFactory.getLogger(getClass()); - - protected DatagramSocket datagramSocket; - protected InetAddress inetAddress; - protected int port; - - public UdpSender(int port) throws UnknownHostException { - this(HOST, port); - } - - public UdpSender(String host, int port) throws UnknownHostException { - System.out.println("Sender use: " + host + " " + port); - inetAddress = InetAddress.getByName(host); - this.port = port; - try { - datagramSocket = new DatagramSocket(); - } catch (SocketException e) { - logger.error("Failed to create socket", e); - } - } - - public void start() {} - - public void stop() { - datagramSocket.close(); - } - - public void exit() { - stop(); - } - - public void send(byte[] buffer) { - try { - DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length, inetAddress, port); - datagramSocket.send(datagramPacket); - } catch (IOException e) { - logger.error("Failed to send buffer", e); - } - } -} +package base.server.datagram; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.SocketException; +import java.net.UnknownHostException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import base.Sender; + +public class UdpSender implements Sender { + protected static final String HOST = "localhost"; + protected Logger logger = LoggerFactory.getLogger(getClass()); + + protected DatagramSocket datagramSocket; + protected InetAddress inetAddress; + protected int port; + + public UdpSender(int port) throws UnknownHostException { + this(HOST, port); + } + + public UdpSender(String host, int port) throws UnknownHostException { + System.out.println("Sender use: " + host + " " + port); + inetAddress = InetAddress.getByName(host); + this.port = port; + try { + datagramSocket = new DatagramSocket(); + } catch (SocketException e) { + logger.error("Failed to create socket", e); + } + } + + public void start() {} + + public void stop() { + datagramSocket.close(); + } + + public void exit() { + stop(); + } + + public void send(byte[] buffer) { + try { + DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length, inetAddress, port); + datagramSocket.send(datagramPacket); + } catch (IOException e) { + logger.error("Failed to send buffer", e); + } + } +} diff --git a/java/base/src/main/java/base/server/datagram/UdpServer.java b/java/core.legacy/src/main/java/base/server/datagram/UdpServer.java similarity index 96% rename from java/base/src/main/java/base/server/datagram/UdpServer.java rename to java/core.legacy/src/main/java/base/server/datagram/UdpServer.java index 2ebe303..a3919db 100644 --- a/java/base/src/main/java/base/server/datagram/UdpServer.java +++ b/java/core.legacy/src/main/java/base/server/datagram/UdpServer.java @@ -1,64 +1,64 @@ -package base.server.datagram; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.SocketException; - -import base.exception.worker.ActivateException; -import base.work.Work; - -public class UdpServer extends Work { - protected static final int BUFFER_SIZE = 1024; - protected static final int TIMEOUT = 1000; - - protected int port; - protected int bufferSize; - protected DatagramSocket diagramSocket; - - public UdpServer(int port) { - this(port, BUFFER_SIZE); - } - - public UdpServer(int port, int bufferSize) { - super(); - this.port = port; - this.bufferSize = bufferSize; - } - - public void activate() throws ActivateException { - try { - logger.debug("Starting datagram socket on port " + port); - diagramSocket = new DatagramSocket(port); - diagramSocket.setSoTimeout(TIMEOUT); - super.activate(); - } catch (SocketException e) { - logger.error("Failed to initialize socket", e); - throw new ActivateException(); - } - } - - public void stop() { - super.stop(); - if (diagramSocket != null) { - diagramSocket.close(); - } - } - - public void work() { - byte[] buffer = new byte[bufferSize]; - DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length); - try { - diagramSocket.receive(datagramPacket); - } catch (SocketException e) { - stop(); - } catch (IOException e) { - logger.error("Failed to receive packet", e); - stop(); - return; - } - input(buffer); - } - - protected void input(byte[] buffer) {} -} +package base.server.datagram; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.SocketException; + +import base.exception.worker.ActivateException; +import base.work.Work; + +public class UdpServer extends Work { + protected static final int BUFFER_SIZE = 1024; + protected static final int TIMEOUT = 1000; + + protected int port; + protected int bufferSize; + protected DatagramSocket diagramSocket; + + public UdpServer(int port) { + this(port, BUFFER_SIZE); + } + + public UdpServer(int port, int bufferSize) { + super(); + this.port = port; + this.bufferSize = bufferSize; + } + + public void activate() throws ActivateException { + try { + logger.debug("Starting datagram socket on port " + port); + diagramSocket = new DatagramSocket(port); + diagramSocket.setSoTimeout(TIMEOUT); + super.activate(); + } catch (SocketException e) { + logger.error("Failed to initialize socket", e); + throw new ActivateException(); + } + } + + public void stop() { + super.stop(); + if (diagramSocket != null) { + diagramSocket.close(); + } + } + + public void work() { + byte[] buffer = new byte[bufferSize]; + DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length); + try { + diagramSocket.receive(datagramPacket); + } catch (SocketException e) { + stop(); + } catch (IOException e) { + logger.error("Failed to receive packet", e); + stop(); + return; + } + input(buffer); + } + + protected void input(byte[] buffer) {} +} diff --git a/java/base/src/main/java/base/server/forwarder/TcpChannelServerForwarder.java b/java/core.legacy/src/main/java/base/server/forwarder/TcpChannelServerForwarder.java similarity index 96% rename from java/base/src/main/java/base/server/forwarder/TcpChannelServerForwarder.java rename to java/core.legacy/src/main/java/base/server/forwarder/TcpChannelServerForwarder.java index e118225..701fe2f 100644 --- a/java/base/src/main/java/base/server/forwarder/TcpChannelServerForwarder.java +++ b/java/core.legacy/src/main/java/base/server/forwarder/TcpChannelServerForwarder.java @@ -1,31 +1,31 @@ -package base.server.forwarder; - -import java.util.ArrayList; - -import base.Duplex; -import base.Receiver; -import base.server.channel.TcpServer; -import base.server.channel.TcpServerClient; - -public class TcpChannelServerForwarder extends TcpServer implements Duplex { - protected ArrayList receiverList; - - public TcpChannelServerForwarder(int port) { - super(port); - receiverList = new ArrayList(); - } - - public void register(Receiver receiver) { - receiverList.add(receiver); - } - - public void remove(Receiver receiver) { - receiverList.remove(receiver); - } - - public void input(TcpServerClient client, byte[] buffer) { - for (Receiver receiver: receiverList) { - receiver.receive(buffer); - } - } -} +package base.server.forwarder; + +import java.util.ArrayList; + +import base.Duplex; +import base.Receiver; +import base.server.channel.TcpServer; +import base.server.channel.TcpServerClient; + +public class TcpChannelServerForwarder extends TcpServer implements Duplex { + protected ArrayList receiverList; + + public TcpChannelServerForwarder(int port) { + super(port); + receiverList = new ArrayList(); + } + + public void register(Receiver receiver) { + receiverList.add(receiver); + } + + public void remove(Receiver receiver) { + receiverList.remove(receiver); + } + + public void input(TcpServerClient client, byte[] buffer) { + for (Receiver receiver: receiverList) { + receiver.receive(buffer); + } + } +} diff --git a/java/base/src/main/java/base/server/forwarder/TcpClientChannelForwarder.java b/java/core.legacy/src/main/java/base/server/forwarder/TcpClientChannelForwarder.java similarity index 96% rename from java/base/src/main/java/base/server/forwarder/TcpClientChannelForwarder.java rename to java/core.legacy/src/main/java/base/server/forwarder/TcpClientChannelForwarder.java index 35d3f9b..3e2aa9c 100644 --- a/java/base/src/main/java/base/server/forwarder/TcpClientChannelForwarder.java +++ b/java/core.legacy/src/main/java/base/server/forwarder/TcpClientChannelForwarder.java @@ -1,31 +1,31 @@ -package base.server.forwarder; - -import java.util.ArrayList; - -import base.Duplex; -import base.Receiver; -import base.server.socket.TcpClient; -import base.server.socket.TcpServerClient; - -public class TcpClientChannelForwarder extends TcpClient implements Duplex { - protected ArrayList receiverList; - - public TcpClientChannelForwarder(String host, int port) { - super(host, port); - receiverList = new ArrayList(); - } - - public void register(Receiver receiver) { - receiverList.add(receiver); - } - - public void remove(Receiver receiver) { - receiverList.remove(receiver); - } - - public void input(TcpServerClient client, byte[] buffer) { - for (Receiver receiver: receiverList) { - receiver.receive(buffer); - } - } -} +package base.server.forwarder; + +import java.util.ArrayList; + +import base.Duplex; +import base.Receiver; +import base.server.socket.TcpClient; +import base.server.socket.TcpServerClient; + +public class TcpClientChannelForwarder extends TcpClient implements Duplex { + protected ArrayList receiverList; + + public TcpClientChannelForwarder(String host, int port) { + super(host, port); + receiverList = new ArrayList(); + } + + public void register(Receiver receiver) { + receiverList.add(receiver); + } + + public void remove(Receiver receiver) { + receiverList.remove(receiver); + } + + public void input(TcpServerClient client, byte[] buffer) { + for (Receiver receiver: receiverList) { + receiver.receive(buffer); + } + } +} diff --git a/java/base/src/main/java/base/server/forwarder/TcpClientSocketForwarder.java b/java/core.legacy/src/main/java/base/server/forwarder/TcpClientSocketForwarder.java similarity index 96% rename from java/base/src/main/java/base/server/forwarder/TcpClientSocketForwarder.java rename to java/core.legacy/src/main/java/base/server/forwarder/TcpClientSocketForwarder.java index 42cc5f9..2001246 100644 --- a/java/base/src/main/java/base/server/forwarder/TcpClientSocketForwarder.java +++ b/java/core.legacy/src/main/java/base/server/forwarder/TcpClientSocketForwarder.java @@ -1,31 +1,31 @@ -package base.server.forwarder; - -import java.util.ArrayList; - -import base.Duplex; -import base.Receiver; -import base.server.channel.TcpClient; -import base.server.channel.TcpServerClient; - -public class TcpClientSocketForwarder extends TcpClient implements Duplex { - protected ArrayList receiverList; - - public TcpClientSocketForwarder(String host, int port) { - super(host, port); - receiverList = new ArrayList(); - } - - public void register(Receiver receiver) { - receiverList.add(receiver); - } - - public void remove(Receiver receiver) { - receiverList.remove(receiver); - } - - public void input(TcpServerClient client, byte[] buffer) { - for (Receiver receiver: receiverList) { - receiver.receive(buffer); - } - } -} +package base.server.forwarder; + +import java.util.ArrayList; + +import base.Duplex; +import base.Receiver; +import base.server.channel.TcpClient; +import base.server.channel.TcpServerClient; + +public class TcpClientSocketForwarder extends TcpClient implements Duplex { + protected ArrayList receiverList; + + public TcpClientSocketForwarder(String host, int port) { + super(host, port); + receiverList = new ArrayList(); + } + + public void register(Receiver receiver) { + receiverList.add(receiver); + } + + public void remove(Receiver receiver) { + receiverList.remove(receiver); + } + + public void input(TcpServerClient client, byte[] buffer) { + for (Receiver receiver: receiverList) { + receiver.receive(buffer); + } + } +} diff --git a/java/base/src/main/java/base/server/forwarder/TcpSocketServerForwarder.java b/java/core.legacy/src/main/java/base/server/forwarder/TcpSocketServerForwarder.java similarity index 96% rename from java/base/src/main/java/base/server/forwarder/TcpSocketServerForwarder.java rename to java/core.legacy/src/main/java/base/server/forwarder/TcpSocketServerForwarder.java index 10d4bfb..5ebef5a 100644 --- a/java/base/src/main/java/base/server/forwarder/TcpSocketServerForwarder.java +++ b/java/core.legacy/src/main/java/base/server/forwarder/TcpSocketServerForwarder.java @@ -1,31 +1,31 @@ -package base.server.forwarder; - -import java.util.ArrayList; - -import base.Duplex; -import base.Receiver; -import base.server.socket.TcpServer; -import base.server.socket.TcpServerClient; - -public class TcpSocketServerForwarder extends TcpServer implements Duplex { - protected ArrayList receiverList; - - public TcpSocketServerForwarder(int port) { - super(port); - receiverList = new ArrayList(); - } - - public void register(Receiver receiver) { - receiverList.add(receiver); - } - - public void remove(Receiver receiver) { - receiverList.remove(receiver); - } - - public void input(TcpServerClient client, byte[] buffer) { - for (Receiver receiver: receiverList) { - receiver.receive(buffer); - } - } -} +package base.server.forwarder; + +import java.util.ArrayList; + +import base.Duplex; +import base.Receiver; +import base.server.socket.TcpServer; +import base.server.socket.TcpServerClient; + +public class TcpSocketServerForwarder extends TcpServer implements Duplex { + protected ArrayList receiverList; + + public TcpSocketServerForwarder(int port) { + super(port); + receiverList = new ArrayList(); + } + + public void register(Receiver receiver) { + receiverList.add(receiver); + } + + public void remove(Receiver receiver) { + receiverList.remove(receiver); + } + + public void input(TcpServerClient client, byte[] buffer) { + for (Receiver receiver: receiverList) { + receiver.receive(buffer); + } + } +} diff --git a/java/base/src/main/java/base/server/forwarder/UdpDuplexClientForwarder.java b/java/core.legacy/src/main/java/base/server/forwarder/UdpDuplexClientForwarder.java similarity index 96% rename from java/base/src/main/java/base/server/forwarder/UdpDuplexClientForwarder.java rename to java/core.legacy/src/main/java/base/server/forwarder/UdpDuplexClientForwarder.java index 01ee002..15e7a0a 100644 --- a/java/base/src/main/java/base/server/forwarder/UdpDuplexClientForwarder.java +++ b/java/core.legacy/src/main/java/base/server/forwarder/UdpDuplexClientForwarder.java @@ -1,31 +1,31 @@ -package base.server.forwarder; - -import java.net.UnknownHostException; -import java.util.ArrayList; - -import base.Duplex; -import base.Receiver; -import base.server.datagram.UdpDuplexClient; - -public class UdpDuplexClientForwarder extends UdpDuplexClient implements Duplex { - protected ArrayList receiverList; - - public UdpDuplexClientForwarder(String bindHost, int bindPort, String sendHost, int sendPort) throws UnknownHostException { - super(bindHost, bindPort, sendHost, sendPort); - receiverList = new ArrayList(); - } - - public void register(Receiver receiver) { - receiverList.add(receiver); - } - - public void remove(Receiver receiver) { - receiverList.remove(receiver); - } - - public void input(byte[] buffer) { - for (Receiver receiver: receiverList) { - receiver.receive(buffer); - } - } -} +package base.server.forwarder; + +import java.net.UnknownHostException; +import java.util.ArrayList; + +import base.Duplex; +import base.Receiver; +import base.server.datagram.UdpDuplexClient; + +public class UdpDuplexClientForwarder extends UdpDuplexClient implements Duplex { + protected ArrayList receiverList; + + public UdpDuplexClientForwarder(String bindHost, int bindPort, String sendHost, int sendPort) throws UnknownHostException { + super(bindHost, bindPort, sendHost, sendPort); + receiverList = new ArrayList(); + } + + public void register(Receiver receiver) { + receiverList.add(receiver); + } + + public void remove(Receiver receiver) { + receiverList.remove(receiver); + } + + public void input(byte[] buffer) { + for (Receiver receiver: receiverList) { + receiver.receive(buffer); + } + } +} diff --git a/java/base/src/main/java/base/server/forwarder/UdpDuplexServerForwarder.java b/java/core.legacy/src/main/java/base/server/forwarder/UdpDuplexServerForwarder.java similarity index 96% rename from java/base/src/main/java/base/server/forwarder/UdpDuplexServerForwarder.java rename to java/core.legacy/src/main/java/base/server/forwarder/UdpDuplexServerForwarder.java index 57afc3b..9197810 100644 --- a/java/base/src/main/java/base/server/forwarder/UdpDuplexServerForwarder.java +++ b/java/core.legacy/src/main/java/base/server/forwarder/UdpDuplexServerForwarder.java @@ -1,30 +1,30 @@ -package base.server.forwarder; - -import java.util.ArrayList; - -import base.Duplex; -import base.Receiver; -import base.server.datagram.UdpDuplexServer; - -public class UdpDuplexServerForwarder extends UdpDuplexServer implements Duplex { - protected ArrayList receiverList; - - public UdpDuplexServerForwarder(int port, int listenPort) { - super(port, listenPort); - receiverList = new ArrayList(); - } - - public void register(Receiver receiver) { - receiverList.add(receiver); - } - - public void remove(Receiver receiver) { - receiverList.remove(receiver); - } - - public void input(byte[] buffer) { - for (Receiver receiver: receiverList) { - receiver.receive(buffer); - } - } -} +package base.server.forwarder; + +import java.util.ArrayList; + +import base.Duplex; +import base.Receiver; +import base.server.datagram.UdpDuplexServer; + +public class UdpDuplexServerForwarder extends UdpDuplexServer implements Duplex { + protected ArrayList receiverList; + + public UdpDuplexServerForwarder(int port, int listenPort) { + super(port, listenPort); + receiverList = new ArrayList(); + } + + public void register(Receiver receiver) { + receiverList.add(receiver); + } + + public void remove(Receiver receiver) { + receiverList.remove(receiver); + } + + public void input(byte[] buffer) { + for (Receiver receiver: receiverList) { + receiver.receive(buffer); + } + } +} diff --git a/java/base/src/main/java/base/server/forwarder/UdpServerForwarder.java b/java/core.legacy/src/main/java/base/server/forwarder/UdpServerForwarder.java similarity index 95% rename from java/base/src/main/java/base/server/forwarder/UdpServerForwarder.java rename to java/core.legacy/src/main/java/base/server/forwarder/UdpServerForwarder.java index 5359b88..b4589d4 100644 --- a/java/base/src/main/java/base/server/forwarder/UdpServerForwarder.java +++ b/java/core.legacy/src/main/java/base/server/forwarder/UdpServerForwarder.java @@ -1,30 +1,30 @@ -package base.server.forwarder; - -import java.util.ArrayList; - -import base.Forwarder; -import base.Receiver; -import base.server.datagram.UdpServer; - -public class UdpServerForwarder extends UdpServer implements Forwarder { - protected ArrayList receiverList; - - public UdpServerForwarder(int port) { - super(port); - receiverList = new ArrayList(); - } - - public void register(Receiver receiver) { - receiverList.add(receiver); - } - - public void remove(Receiver receiver) { - receiverList.remove(receiver); - } - - public void input(byte[] buffer) { - for (Receiver receiver: receiverList) { - receiver.receive(buffer); - } - } -} +package base.server.forwarder; + +import java.util.ArrayList; + +import base.Forwarder; +import base.Receiver; +import base.server.datagram.UdpServer; + +public class UdpServerForwarder extends UdpServer implements Forwarder { + protected ArrayList receiverList; + + public UdpServerForwarder(int port) { + super(port); + receiverList = new ArrayList(); + } + + public void register(Receiver receiver) { + receiverList.add(receiver); + } + + public void remove(Receiver receiver) { + receiverList.remove(receiver); + } + + public void input(byte[] buffer) { + for (Receiver receiver: receiverList) { + receiver.receive(buffer); + } + } +} diff --git a/java/base/src/main/java/base/server/receiver/AbstractReceiver.java b/java/core.legacy/src/main/java/base/server/receiver/AbstractReceiver.java similarity index 95% rename from java/base/src/main/java/base/server/receiver/AbstractReceiver.java rename to java/core.legacy/src/main/java/base/server/receiver/AbstractReceiver.java index e444e30..f9f14fd 100644 --- a/java/base/src/main/java/base/server/receiver/AbstractReceiver.java +++ b/java/core.legacy/src/main/java/base/server/receiver/AbstractReceiver.java @@ -1,33 +1,33 @@ -package base.server.receiver; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import base.Control; -import base.Forwarder; -import base.Receiver; - -public abstract class AbstractReceiver implements Receiver, Control { - protected Logger logger = LoggerFactory.getLogger(getClass()); - - protected Forwarder forwarder; - - public AbstractReceiver(Forwarder forwarder) { - this.forwarder = forwarder; - forwarder.register(this); - } - - public void start() { - forwarder.start(); - } - - public void stop() { - forwarder.stop(); - } - - public void exit() { - forwarder.exit(); - } - - abstract public void receive(byte[] buffer); -} +package base.server.receiver; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import base.Control; +import base.Forwarder; +import base.Receiver; + +public abstract class AbstractReceiver implements Receiver, Control { + protected Logger logger = LoggerFactory.getLogger(getClass()); + + protected Forwarder forwarder; + + public AbstractReceiver(Forwarder forwarder) { + this.forwarder = forwarder; + forwarder.register(this); + } + + public void start() { + forwarder.start(); + } + + public void stop() { + forwarder.stop(); + } + + public void exit() { + forwarder.exit(); + } + + abstract public void receive(byte[] buffer); +} diff --git a/java/base/src/main/java/base/server/socket/AbstractTcpClient.java b/java/core.legacy/src/main/java/base/server/socket/AbstractTcpClient.java similarity index 96% rename from java/base/src/main/java/base/server/socket/AbstractTcpClient.java rename to java/core.legacy/src/main/java/base/server/socket/AbstractTcpClient.java index 36a537e..ceb7d51 100644 --- a/java/base/src/main/java/base/server/socket/AbstractTcpClient.java +++ b/java/core.legacy/src/main/java/base/server/socket/AbstractTcpClient.java @@ -1,72 +1,72 @@ -package base.server.socket; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.Socket; - -import base.Sender; -import base.exception.worker.DeactivateException; -import base.work.Work; - -public abstract class AbstractTcpClient extends Work implements Sender { - protected static final int BUFFER_SIZE = 1024; - - protected Object object = new Object(); - protected int bufferSize; - protected Socket socket; - protected InputStream inputStream; - protected OutputStream outputStream; - - public AbstractTcpClient(Integer bufferSize) { - this.bufferSize = bufferSize; - } - - public boolean active() { - return super.active() && socket.isConnected(); - } - - public void deactivate() throws DeactivateException { - super.deactivate(); - try { - inputStream.close(); - outputStream.close(); - socket.close(); - } catch (IOException e) { - logger.error("", e); - } - } - - public void exit() { - super.exit(); - try { - socket.close(); - } catch (IOException e) { - logger.error("", e); - } - } - - public void work() { - byte[] buffer = new byte[bufferSize]; - try { - while (inputStream.read(buffer) > 0) { - input(buffer); - } - } catch (IOException e) { - stop(); - } - } - - protected abstract void input(byte[] buffer); - - public void send(byte[] buffer) throws IOException { - if (outputStream == null) { - try { - synchronized (object) { - object.wait(); - } - } catch (InterruptedException e) {} - } - outputStream.write(buffer); - } -} +package base.server.socket; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; + +import base.Sender; +import base.exception.worker.DeactivateException; +import base.work.Work; + +public abstract class AbstractTcpClient extends Work implements Sender { + protected static final int BUFFER_SIZE = 1024; + + protected Object object = new Object(); + protected int bufferSize; + protected Socket socket; + protected InputStream inputStream; + protected OutputStream outputStream; + + public AbstractTcpClient(Integer bufferSize) { + this.bufferSize = bufferSize; + } + + public boolean active() { + return super.active() && socket.isConnected(); + } + + public void deactivate() throws DeactivateException { + super.deactivate(); + try { + inputStream.close(); + outputStream.close(); + socket.close(); + } catch (IOException e) { + logger.error("", e); + } + } + + public void exit() { + super.exit(); + try { + socket.close(); + } catch (IOException e) { + logger.error("", e); + } + } + + public void work() { + byte[] buffer = new byte[bufferSize]; + try { + while (inputStream.read(buffer) > 0) { + input(buffer); + } + } catch (IOException e) { + stop(); + } + } + + protected abstract void input(byte[] buffer); + + public void send(byte[] buffer) throws IOException { + if (outputStream == null) { + try { + synchronized (object) { + object.wait(); + } + } catch (InterruptedException e) {} + } + outputStream.write(buffer); + } +} diff --git a/java/base/src/main/java/base/server/socket/TcpClient.java b/java/core.legacy/src/main/java/base/server/socket/TcpClient.java similarity index 96% rename from java/base/src/main/java/base/server/socket/TcpClient.java rename to java/core.legacy/src/main/java/base/server/socket/TcpClient.java index 16f97ae..f863ce5 100644 --- a/java/base/src/main/java/base/server/socket/TcpClient.java +++ b/java/core.legacy/src/main/java/base/server/socket/TcpClient.java @@ -1,49 +1,49 @@ -package base.server.socket; - -import java.io.IOException; -import java.net.Socket; -import java.net.UnknownHostException; - -import base.Sender; -import base.exception.worker.ActivateException; - -public class TcpClient extends AbstractTcpClient implements Sender { - protected static final String HOST = "localhost"; - - protected String host; - protected int port; - - public TcpClient(int port) { - this(HOST, port); - } - - public TcpClient(String host, int port) { - this(host, port, BUFFER_SIZE); - } - - public TcpClient(String host, int port, int bufferSize) { - super(bufferSize); - this.host = host; - this.port = port; - } - - public void activate() throws ActivateException { - try { - socket = new Socket(host, port); - inputStream = socket.getInputStream(); - outputStream = socket.getOutputStream(); - synchronized (object) { - object.notifyAll(); - } - } catch (UnknownHostException e) { - logger.error("", e); - throw new ActivateException(); - } catch (IOException e) { - logger.error("", e); - throw new ActivateException(); - } - super.activate(); - } - - protected void input(byte[] buffer) {} +package base.server.socket; + +import java.io.IOException; +import java.net.Socket; +import java.net.UnknownHostException; + +import base.Sender; +import base.exception.worker.ActivateException; + +public class TcpClient extends AbstractTcpClient implements Sender { + protected static final String HOST = "localhost"; + + protected String host; + protected int port; + + public TcpClient(int port) { + this(HOST, port); + } + + public TcpClient(String host, int port) { + this(host, port, BUFFER_SIZE); + } + + public TcpClient(String host, int port, int bufferSize) { + super(bufferSize); + this.host = host; + this.port = port; + } + + public void activate() throws ActivateException { + try { + socket = new Socket(host, port); + inputStream = socket.getInputStream(); + outputStream = socket.getOutputStream(); + synchronized (object) { + object.notifyAll(); + } + } catch (UnknownHostException e) { + logger.error("", e); + throw new ActivateException(); + } catch (IOException e) { + logger.error("", e); + throw new ActivateException(); + } + super.activate(); + } + + protected void input(byte[] buffer) {} } \ No newline at end of file diff --git a/java/base/src/main/java/base/server/socket/TcpServer.java b/java/core.legacy/src/main/java/base/server/socket/TcpServer.java similarity index 96% rename from java/base/src/main/java/base/server/socket/TcpServer.java rename to java/core.legacy/src/main/java/base/server/socket/TcpServer.java index 449cc97..732955e 100644 --- a/java/base/src/main/java/base/server/socket/TcpServer.java +++ b/java/core.legacy/src/main/java/base/server/socket/TcpServer.java @@ -1,86 +1,86 @@ -package base.server.socket; - -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.net.ServerSocket; -import java.net.Socket; -import java.util.ArrayList; - -import base.Sender; -import base.exception.worker.ActivateException; -import base.exception.worker.DeactivateException; -import base.work.Work; - -public class TcpServer extends Work implements Sender { - protected static final Class CLIENT_CLASS = TcpServerClient.class; - - protected int port; - protected ServerSocket serverSocket; - protected Constructor clientConstructor; - protected ArrayList clientList; - - public TcpServer(int port) { - this(port, CLIENT_CLASS); - } - - public TcpServer(int port, Class clientClass) { - this.port = port; - try { - clientConstructor = Class.forName(clientClass.getName()).getConstructor(TcpServer.class, Socket.class); - } catch (NoSuchMethodException | SecurityException | ClassNotFoundException e) { - logger.error("Failed to initialise client constructor"); - } - clientList = new ArrayList(); - } - - public void activate() throws ActivateException { - try { - serverSocket = new ServerSocket(port); - } catch (IOException e) { - logger.error("", e); - throw new ActivateException(); - } - } - - public void deactivate() throws DeactivateException { - for (TcpServerClient client : clientList) { - client.stop(); - } - } - - public void exit() { - super.exit(); - try { - serverSocket.close(); - for (TcpServerClient client : clientList) { - client.exit(); - } - } catch (IOException e) { - logger.error("", e); - } - } - - public void work() { - try { - Socket socket = serverSocket.accept(); - TcpServerClient client = (TcpServerClient) clientConstructor.newInstance(this, socket); - clientList.add(client); - client.start(); - System.out.println("Accepted new connection from client: " + socket); - } catch (IOException e) { - stop(); - } catch (Exception e) { - logger.error("", e); - } - } - - public void send(byte[] buffer) throws IOException { - logger.debug("Number of clients = " + clientList.size()); - for (TcpServerClient client : clientList) { - // Should be dealt with in clients own thread? - client.send(buffer); - } - } - - public void input(TcpServerClient client, byte[] buffer) {} -} +package base.server.socket; + +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.ArrayList; + +import base.Sender; +import base.exception.worker.ActivateException; +import base.exception.worker.DeactivateException; +import base.work.Work; + +public class TcpServer extends Work implements Sender { + protected static final Class CLIENT_CLASS = TcpServerClient.class; + + protected int port; + protected ServerSocket serverSocket; + protected Constructor clientConstructor; + protected ArrayList clientList; + + public TcpServer(int port) { + this(port, CLIENT_CLASS); + } + + public TcpServer(int port, Class clientClass) { + this.port = port; + try { + clientConstructor = Class.forName(clientClass.getName()).getConstructor(TcpServer.class, Socket.class); + } catch (NoSuchMethodException | SecurityException | ClassNotFoundException e) { + logger.error("Failed to initialise client constructor"); + } + clientList = new ArrayList(); + } + + public void activate() throws ActivateException { + try { + serverSocket = new ServerSocket(port); + } catch (IOException e) { + logger.error("", e); + throw new ActivateException(); + } + } + + public void deactivate() throws DeactivateException { + for (TcpServerClient client : clientList) { + client.stop(); + } + } + + public void exit() { + super.exit(); + try { + serverSocket.close(); + for (TcpServerClient client : clientList) { + client.exit(); + } + } catch (IOException e) { + logger.error("", e); + } + } + + public void work() { + try { + Socket socket = serverSocket.accept(); + TcpServerClient client = (TcpServerClient) clientConstructor.newInstance(this, socket); + clientList.add(client); + client.start(); + System.out.println("Accepted new connection from client: " + socket); + } catch (IOException e) { + stop(); + } catch (Exception e) { + logger.error("", e); + } + } + + public void send(byte[] buffer) throws IOException { + logger.debug("Number of clients = " + clientList.size()); + for (TcpServerClient client : clientList) { + // Should be dealt with in clients own thread? + client.send(buffer); + } + } + + public void input(TcpServerClient client, byte[] buffer) {} +} diff --git a/java/base/src/main/java/base/server/socket/TcpServerClient.java b/java/core.legacy/src/main/java/base/server/socket/TcpServerClient.java similarity index 96% rename from java/base/src/main/java/base/server/socket/TcpServerClient.java rename to java/core.legacy/src/main/java/base/server/socket/TcpServerClient.java index 1c3f1c2..9cf6b33 100644 --- a/java/base/src/main/java/base/server/socket/TcpServerClient.java +++ b/java/core.legacy/src/main/java/base/server/socket/TcpServerClient.java @@ -1,37 +1,37 @@ -package base.server.socket; - -import java.io.IOException; -import java.net.Socket; - -import base.exception.worker.ActivateException; - -public class TcpServerClient extends AbstractTcpClient { - private TcpServer server; - - public TcpServerClient(TcpServer server, Socket socket) { - this(server, socket, BUFFER_SIZE); - } - - public TcpServerClient(TcpServer server, Socket socket, Integer bufferSize) { - super(bufferSize); - this.server = server; - this.socket = socket; - } - - public void activate() throws ActivateException { - try { - inputStream = socket.getInputStream(); - outputStream = socket.getOutputStream(); - synchronized (object) { - object.notifyAll(); - } - } catch (IOException e) { - logger.error("", e); - throw new ActivateException(); - } - } - - public void input(byte[] buffer) { - server.input(this, buffer); - } -} +package base.server.socket; + +import java.io.IOException; +import java.net.Socket; + +import base.exception.worker.ActivateException; + +public class TcpServerClient extends AbstractTcpClient { + private TcpServer server; + + public TcpServerClient(TcpServer server, Socket socket) { + this(server, socket, BUFFER_SIZE); + } + + public TcpServerClient(TcpServer server, Socket socket, Integer bufferSize) { + super(bufferSize); + this.server = server; + this.socket = socket; + } + + public void activate() throws ActivateException { + try { + inputStream = socket.getInputStream(); + outputStream = socket.getOutputStream(); + synchronized (object) { + object.notifyAll(); + } + } catch (IOException e) { + logger.error("", e); + throw new ActivateException(); + } + } + + public void input(byte[] buffer) { + server.input(this, buffer); + } +} diff --git a/java/base/src/main/java/base/util/ArrayCycle.java b/java/core.legacy/src/main/java/base/util/ArrayCycle.java similarity index 95% rename from java/base/src/main/java/base/util/ArrayCycle.java rename to java/core.legacy/src/main/java/base/util/ArrayCycle.java index 3de85c7..bc95175 100644 --- a/java/base/src/main/java/base/util/ArrayCycle.java +++ b/java/core.legacy/src/main/java/base/util/ArrayCycle.java @@ -1,40 +1,40 @@ -package base.util; - -import java.util.concurrent.CopyOnWriteArrayList; - -public class ArrayCycle extends CopyOnWriteArrayList { - protected static final long serialVersionUID = 1L; - - protected int index = 0; - - @SuppressWarnings("unchecked") - public ArrayCycle(E... elementArray) { - if (elementArray != null) { - for (E element : elementArray) { - add(element); - } - } - } - - public E current() { - return this.get(index); - } - - public synchronized E previous() { - if (--index < 0) { - index = Math.max(0, size() - 1); - } - return get(index); - } - - public synchronized E next() { - if (++index >= size()) { - index = 0; - } - return size() == 0 ? null : get(index); - } - - public E reset() { - return get(index = 0); - } -} +package base.util; + +import java.util.concurrent.CopyOnWriteArrayList; + +public class ArrayCycle extends CopyOnWriteArrayList { + protected static final long serialVersionUID = 1L; + + protected int index = 0; + + @SuppressWarnings("unchecked") + public ArrayCycle(E... elementArray) { + if (elementArray != null) { + for (E element : elementArray) { + add(element); + } + } + } + + public E current() { + return this.get(index); + } + + public synchronized E previous() { + if (--index < 0) { + index = Math.max(0, size() - 1); + } + return get(index); + } + + public synchronized E next() { + if (++index >= size()) { + index = 0; + } + return size() == 0 ? null : get(index); + } + + public E reset() { + return get(index = 0); + } +} diff --git a/java/base/src/main/java/base/util/Buffer.java b/java/core.legacy/src/main/java/base/util/Buffer.java similarity index 96% rename from java/base/src/main/java/base/util/Buffer.java rename to java/core.legacy/src/main/java/base/util/Buffer.java index c210967..4521766 100644 --- a/java/base/src/main/java/base/util/Buffer.java +++ b/java/core.legacy/src/main/java/base/util/Buffer.java @@ -1,41 +1,41 @@ -package base.util; - -public class Buffer { - protected byte[] elements; - protected int capacity; - protected int index; - protected int size; - - public Buffer(int capacity) { - this.elements = new byte[capacity]; - this.capacity = capacity; - index = 0; - size = 0; - } - - public synchronized void add(byte... elements) { - for (byte element : elements) { - this.elements[index++ % capacity] = element; - if (size < capacity) { - ++size; - } - } - } - - public synchronized void write(byte[] elements, int offset, int length) { - for (int i = offset; i < length; ++i) { - this.elements[index++ % capacity] = elements[i]; - if (size < capacity) { - ++size; - } - } - } - - public synchronized byte[] get() { - byte[] elements = new byte[size]; - for (int i = 0; i < size; i++) { - elements[i] = this.elements[(index + i) % size]; - } - return elements; - } -} +package base.util; + +public class Buffer { + protected byte[] elements; + protected int capacity; + protected int index; + protected int size; + + public Buffer(int capacity) { + this.elements = new byte[capacity]; + this.capacity = capacity; + index = 0; + size = 0; + } + + public synchronized void add(byte... elements) { + for (byte element : elements) { + this.elements[index++ % capacity] = element; + if (size < capacity) { + ++size; + } + } + } + + public synchronized void write(byte[] elements, int offset, int length) { + for (int i = offset; i < length; ++i) { + this.elements[index++ % capacity] = elements[i]; + if (size < capacity) { + ++size; + } + } + } + + public synchronized byte[] get() { + byte[] elements = new byte[size]; + for (int i = 0; i < size; i++) { + elements[i] = this.elements[(index + i) % size]; + } + return elements; + } +} diff --git a/java/base/src/main/java/base/util/Bufferable.java b/java/core.legacy/src/main/java/base/util/Bufferable.java similarity index 94% rename from java/base/src/main/java/base/util/Bufferable.java rename to java/core.legacy/src/main/java/base/util/Bufferable.java index 0479817..ab41b7f 100644 --- a/java/base/src/main/java/base/util/Bufferable.java +++ b/java/core.legacy/src/main/java/base/util/Bufferable.java @@ -1,6 +1,6 @@ -package base.util; - -public interface Bufferable { - public void load(); - public void unload(); -} +package base.util; + +public interface Bufferable { + public void load(); + public void unload(); +} diff --git a/java/base/src/main/java/base/util/BufferedArrayCycle.java b/java/core.legacy/src/main/java/base/util/BufferedArrayCycle.java similarity index 96% rename from java/base/src/main/java/base/util/BufferedArrayCycle.java rename to java/core.legacy/src/main/java/base/util/BufferedArrayCycle.java index 0bcc11b..5bb2e30 100644 --- a/java/base/src/main/java/base/util/BufferedArrayCycle.java +++ b/java/core.legacy/src/main/java/base/util/BufferedArrayCycle.java @@ -1,74 +1,74 @@ -package base.util; - -public class BufferedArrayCycle extends ArrayCycle { - protected static final long serialVersionUID = 1L; - - protected ArrayCycle buffer; - protected int before; - protected int after; - protected int indexFirst; - protected int indexLast; - //protected int indexBuffer; - //protected Bufferable[] bufferableArray; - - @SuppressWarnings("unchecked") - public BufferedArrayCycle(int before, int after) { - this.before = before; - this.after = after; - indexFirst = 0; - indexLast = 0; - //bufferableArray = new Bufferable[before + after + 1]; - //buffer = new ArrayCycle(); - - } - - public E previous() { - get(indexFirst).unload(); - indexFirst = previous(indexFirst); - indexLast = previous(indexLast); - get(indexLast).load(); - // eerste before weg - - // eerste after wordt huidig - - // voeg laatste after toe - - return current(); - } - - public E next() { - - // eerste before weg - - // eerste after wordt huidig - - // voeg laatste after toe - - return size() == 0 ? null : get(index); - } - - protected int previous(int index) { - if (--index < 0) { - index = Math.max(0, size() - 1); - } - return index; - } - - protected int next(int index) { - System.out.println(index); - if (++index >= size()) { - index = 0; - - } - return index; - } - - public static void main(String[] args) { - BufferedArrayCycle bac = new BufferedArrayCycle(2, 3); - for (int i = 1; i <= 10; ++i) { - bac.add(new Dummy(i)); - } - bac.remove(0); - System.out.println(bac.get(2).id); - } +package base.util; + +public class BufferedArrayCycle extends ArrayCycle { + protected static final long serialVersionUID = 1L; + + protected ArrayCycle buffer; + protected int before; + protected int after; + protected int indexFirst; + protected int indexLast; + //protected int indexBuffer; + //protected Bufferable[] bufferableArray; + + @SuppressWarnings("unchecked") + public BufferedArrayCycle(int before, int after) { + this.before = before; + this.after = after; + indexFirst = 0; + indexLast = 0; + //bufferableArray = new Bufferable[before + after + 1]; + //buffer = new ArrayCycle(); + + } + + public E previous() { + get(indexFirst).unload(); + indexFirst = previous(indexFirst); + indexLast = previous(indexLast); + get(indexLast).load(); + // eerste before weg + + // eerste after wordt huidig + + // voeg laatste after toe + + return current(); + } + + public E next() { + + // eerste before weg + + // eerste after wordt huidig + + // voeg laatste after toe + + return size() == 0 ? null : get(index); + } + + protected int previous(int index) { + if (--index < 0) { + index = Math.max(0, size() - 1); + } + return index; + } + + protected int next(int index) { + System.out.println(index); + if (++index >= size()) { + index = 0; + + } + return index; + } + + public static void main(String[] args) { + BufferedArrayCycle bac = new BufferedArrayCycle(2, 3); + for (int i = 1; i <= 10; ++i) { + bac.add(new Dummy(i)); + } + bac.remove(0); + System.out.println(bac.get(2).id); + } } \ No newline at end of file diff --git a/java/base/src/main/java/base/util/Dummy.java b/java/core.legacy/src/main/java/base/util/Dummy.java similarity index 94% rename from java/base/src/main/java/base/util/Dummy.java rename to java/core.legacy/src/main/java/base/util/Dummy.java index 911a4ee..6bc305b 100644 --- a/java/base/src/main/java/base/util/Dummy.java +++ b/java/core.legacy/src/main/java/base/util/Dummy.java @@ -1,18 +1,18 @@ -package base.util; - -public class Dummy implements Bufferable { - public int id; - - public Dummy(int id) { - this.id = id; - } - - public void load() { - System.out.println("Dummy #" + id + ": load()"); - } - - public void unload() { - System.out.println("Dummy #" + id + ": load()"); - } - -} +package base.util; + +public class Dummy implements Bufferable { + public int id; + + public Dummy(int id) { + this.id = id; + } + + public void load() { + System.out.println("Dummy #" + id + ": load()"); + } + + public void unload() { + System.out.println("Dummy #" + id + ": load()"); + } + +} diff --git a/java/base/src/main/java/base/work/Listen.java b/java/core.legacy/src/main/java/base/work/Listen.java similarity index 100% rename from java/base/src/main/java/base/work/Listen.java rename to java/core.legacy/src/main/java/base/work/Listen.java diff --git a/java/base/src/main/java/base/work/ReflectiveListen.java b/java/core.legacy/src/main/java/base/work/ReflectiveListen.java similarity index 100% rename from java/base/src/main/java/base/work/ReflectiveListen.java rename to java/core.legacy/src/main/java/base/work/ReflectiveListen.java diff --git a/java/base/src/main/java/base/work/Work.java b/java/core.legacy/src/main/java/base/work/Work.java similarity index 100% rename from java/base/src/main/java/base/work/Work.java rename to java/core.legacy/src/main/java/base/work/Work.java diff --git a/java/base/src/main/java/base/worker/BackgroundListener.java b/java/core.legacy/src/main/java/base/worker/BackgroundListener.java similarity index 100% rename from java/base/src/main/java/base/worker/BackgroundListener.java rename to java/core.legacy/src/main/java/base/worker/BackgroundListener.java diff --git a/java/base/src/main/java/base/worker/DirectIntervalWorker.java b/java/core.legacy/src/main/java/base/worker/DirectIntervalWorker.java similarity index 96% rename from java/base/src/main/java/base/worker/DirectIntervalWorker.java rename to java/core.legacy/src/main/java/base/worker/DirectIntervalWorker.java index b1f9507..d932633 100644 --- a/java/base/src/main/java/base/worker/DirectIntervalWorker.java +++ b/java/core.legacy/src/main/java/base/worker/DirectIntervalWorker.java @@ -1,14 +1,14 @@ -package base.worker; - -import base.work.Work; - -public class DirectIntervalWorker extends ThreadIntervalWorker { - public DirectIntervalWorker(Work work, int interval) { - super(work, false); - this.interval = interval; - } - - public DirectIntervalWorker(IntervalWork intervalWork) { - super(intervalWork); - } -} +package base.worker; + +import base.work.Work; + +public class DirectIntervalWorker extends ThreadIntervalWorker { + public DirectIntervalWorker(Work work, int interval) { + super(work, false); + this.interval = interval; + } + + public DirectIntervalWorker(IntervalWork intervalWork) { + super(intervalWork); + } +} diff --git a/java/base/src/main/java/base/worker/DirectWorker.java b/java/core.legacy/src/main/java/base/worker/DirectWorker.java similarity index 95% rename from java/base/src/main/java/base/worker/DirectWorker.java rename to java/core.legacy/src/main/java/base/worker/DirectWorker.java index e58f529..3945400 100644 --- a/java/base/src/main/java/base/worker/DirectWorker.java +++ b/java/core.legacy/src/main/java/base/worker/DirectWorker.java @@ -1,9 +1,9 @@ -package base.worker; - -import base.work.Work; - -public class DirectWorker extends ThreadWorker { - public DirectWorker(Work work) { - super(work, false); - } +package base.worker; + +import base.work.Work; + +public class DirectWorker extends ThreadWorker { + public DirectWorker(Work work) { + super(work, false); + } } \ No newline at end of file diff --git a/java/base/src/main/java/base/worker/ForegroundListener.java b/java/core.legacy/src/main/java/base/worker/ForegroundListener.java similarity index 96% rename from java/base/src/main/java/base/worker/ForegroundListener.java rename to java/core.legacy/src/main/java/base/worker/ForegroundListener.java index b3696cd..f3c4bde 100644 --- a/java/base/src/main/java/base/worker/ForegroundListener.java +++ b/java/core.legacy/src/main/java/base/worker/ForegroundListener.java @@ -1,10 +1,10 @@ -package base.worker; - -import base.work.Listen; -import base.worker.pool.Listener; - -public class ForegroundListener extends BackgroundListener implements Listener { - public ForegroundListener(Listen listen) { - super(listen, false); - } +package base.worker; + +import base.work.Listen; +import base.worker.pool.Listener; + +public class ForegroundListener extends BackgroundListener implements Listener { + public ForegroundListener(Listen listen) { + super(listen, false); + } } \ No newline at end of file diff --git a/java/base/src/main/java/base/worker/IntervalWork.java b/java/core.legacy/src/main/java/base/worker/IntervalWork.java similarity index 96% rename from java/base/src/main/java/base/worker/IntervalWork.java rename to java/core.legacy/src/main/java/base/worker/IntervalWork.java index fb09f8e..6924555 100644 --- a/java/base/src/main/java/base/worker/IntervalWork.java +++ b/java/core.legacy/src/main/java/base/worker/IntervalWork.java @@ -1,37 +1,37 @@ -package base.worker; - -import base.work.Work; - -public abstract class IntervalWork extends Work { - protected IntervalWork() { - this(WORKER_TYPE); - } - - protected IntervalWork(int interval) { - this(WORKER_TYPE, interval); - } - - protected IntervalWork(Worker.Type workerType) { - switch (workerType) { - case FOREGROUND: - worker = new DirectIntervalWorker(this); - break; - default: - case BACKGROUND: - worker = new ThreadIntervalWorker(this); - break; - } - } - - protected IntervalWork(Worker.Type workerType, int interval) { - switch (workerType) { - case FOREGROUND: - worker = new DirectIntervalWorker(this, interval); - break; - default: - case BACKGROUND: - worker = new ThreadIntervalWorker(this, interval); - break; - } - } -} +package base.worker; + +import base.work.Work; + +public abstract class IntervalWork extends Work { + protected IntervalWork() { + this(WORKER_TYPE); + } + + protected IntervalWork(int interval) { + this(WORKER_TYPE, interval); + } + + protected IntervalWork(Worker.Type workerType) { + switch (workerType) { + case FOREGROUND: + worker = new DirectIntervalWorker(this); + break; + default: + case BACKGROUND: + worker = new ThreadIntervalWorker(this); + break; + } + } + + protected IntervalWork(Worker.Type workerType, int interval) { + switch (workerType) { + case FOREGROUND: + worker = new DirectIntervalWorker(this, interval); + break; + default: + case BACKGROUND: + worker = new ThreadIntervalWorker(this, interval); + break; + } + } +} diff --git a/java/base/src/main/java/base/worker/ThreadIntervalWorker.java b/java/core.legacy/src/main/java/base/worker/ThreadIntervalWorker.java similarity index 100% rename from java/base/src/main/java/base/worker/ThreadIntervalWorker.java rename to java/core.legacy/src/main/java/base/worker/ThreadIntervalWorker.java diff --git a/java/base/src/main/java/base/worker/ThreadWorker.java b/java/core.legacy/src/main/java/base/worker/ThreadWorker.java similarity index 100% rename from java/base/src/main/java/base/worker/ThreadWorker.java rename to java/core.legacy/src/main/java/base/worker/ThreadWorker.java diff --git a/java/base/src/main/java/base/worker/Worker.java b/java/core.legacy/src/main/java/base/worker/Worker.java similarity index 100% rename from java/base/src/main/java/base/worker/Worker.java rename to java/core.legacy/src/main/java/base/worker/Worker.java diff --git a/java/base/src/main/java/base/worker/pool/Listener.java b/java/core.legacy/src/main/java/base/worker/pool/Listener.java similarity index 94% rename from java/base/src/main/java/base/worker/pool/Listener.java rename to java/core.legacy/src/main/java/base/worker/pool/Listener.java index baf7fdc..2c0364c 100644 --- a/java/base/src/main/java/base/worker/pool/Listener.java +++ b/java/core.legacy/src/main/java/base/worker/pool/Listener.java @@ -1,5 +1,5 @@ -package base.worker.pool; - -public interface Listener { - public void add(E element); -} +package base.worker.pool; + +public interface Listener { + public void add(E element); +} diff --git a/java/base/src/main/java/base/worker/pool/ListenerPool.java b/java/core.legacy/src/main/java/base/worker/pool/ListenerPool.java similarity index 96% rename from java/base/src/main/java/base/worker/pool/ListenerPool.java rename to java/core.legacy/src/main/java/base/worker/pool/ListenerPool.java index ddc5d31..f501f17 100644 --- a/java/base/src/main/java/base/worker/pool/ListenerPool.java +++ b/java/core.legacy/src/main/java/base/worker/pool/ListenerPool.java @@ -1,38 +1,38 @@ -package base.worker.pool; - -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.TimeUnit; - -public class ListenerPool { - protected int poolSize; - protected BlockingQueue> queue; - protected ExecutorService executorService; - - public ListenerPool(int poolSize) { - this.poolSize = poolSize; - queue = new LinkedBlockingQueue>(); - executorService = Executors.newFixedThreadPool(poolSize); - } - - public PooledListener add(PooledListener listener) { - listener.setPoolQueue(queue); - return listener; - } - - public void start() { - for (int i = 0; i < poolSize; ++i) { - Runnable runnable = new ListenerPoolRunnable(queue, i); - executorService.execute(runnable); - } - } - - public void await() { - try { - executorService.awaitTermination(0, TimeUnit.SECONDS); - } catch (InterruptedException e) {} - } - -} +package base.worker.pool; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; + +public class ListenerPool { + protected int poolSize; + protected BlockingQueue> queue; + protected ExecutorService executorService; + + public ListenerPool(int poolSize) { + this.poolSize = poolSize; + queue = new LinkedBlockingQueue>(); + executorService = Executors.newFixedThreadPool(poolSize); + } + + public PooledListener add(PooledListener listener) { + listener.setPoolQueue(queue); + return listener; + } + + public void start() { + for (int i = 0; i < poolSize; ++i) { + Runnable runnable = new ListenerPoolRunnable(queue, i); + executorService.execute(runnable); + } + } + + public void await() { + try { + executorService.awaitTermination(0, TimeUnit.SECONDS); + } catch (InterruptedException e) {} + } + +} diff --git a/java/base/src/main/java/base/worker/pool/ListenerPoolRunnable.java b/java/core.legacy/src/main/java/base/worker/pool/ListenerPoolRunnable.java similarity index 96% rename from java/base/src/main/java/base/worker/pool/ListenerPoolRunnable.java rename to java/core.legacy/src/main/java/base/worker/pool/ListenerPoolRunnable.java index 4de651e..8b06b62 100644 --- a/java/base/src/main/java/base/worker/pool/ListenerPoolRunnable.java +++ b/java/core.legacy/src/main/java/base/worker/pool/ListenerPoolRunnable.java @@ -1,24 +1,24 @@ -package base.worker.pool; - -import java.util.concurrent.BlockingQueue; - -class ListenerPoolRunnable implements Runnable { - protected BlockingQueue> queue; - protected int id; - - public ListenerPoolRunnable(BlockingQueue> queue, int id) { - this.queue = queue; - this.id = id; - } - - public void run() { - try { - while (true) { - System.out.println("Thread #" + id + " waiting..."); - Wrapper wrapper = queue.take(); - wrapper.deliver(); - Thread.sleep((int) (Math.random() * 1000)); - } - } catch (InterruptedException e) {} - } +package base.worker.pool; + +import java.util.concurrent.BlockingQueue; + +class ListenerPoolRunnable implements Runnable { + protected BlockingQueue> queue; + protected int id; + + public ListenerPoolRunnable(BlockingQueue> queue, int id) { + this.queue = queue; + this.id = id; + } + + public void run() { + try { + while (true) { + System.out.println("Thread #" + id + " waiting..."); + Wrapper wrapper = queue.take(); + wrapper.deliver(); + Thread.sleep((int) (Math.random() * 1000)); + } + } catch (InterruptedException e) {} + } } \ No newline at end of file diff --git a/java/base/src/main/java/base/worker/pool/PooledListener.java b/java/core.legacy/src/main/java/base/worker/pool/PooledListener.java similarity index 96% rename from java/base/src/main/java/base/worker/pool/PooledListener.java rename to java/core.legacy/src/main/java/base/worker/pool/PooledListener.java index 3d79a8f..acc1ad2 100644 --- a/java/base/src/main/java/base/worker/pool/PooledListener.java +++ b/java/core.legacy/src/main/java/base/worker/pool/PooledListener.java @@ -1,28 +1,28 @@ -package base.worker.pool; - -import java.util.concurrent.BlockingQueue; - -import base.work.Listen; - -public class PooledListener extends PooledWorker implements Listener { - protected BlockingQueue> poolQueue; - protected Listen listen; - - public PooledListener(Listen listen) { - super(listen); - this.listen = listen; - } - - public void setPoolQueue(BlockingQueue> poolQueue) { - this.poolQueue = poolQueue; - } - - public synchronized void add(E element) { - Wrapper wrapper = new Wrapper(this, element); - poolQueue.add(wrapper); - } - - void input(E element) { - listen.input(element); - } +package base.worker.pool; + +import java.util.concurrent.BlockingQueue; + +import base.work.Listen; + +public class PooledListener extends PooledWorker implements Listener { + protected BlockingQueue> poolQueue; + protected Listen listen; + + public PooledListener(Listen listen) { + super(listen); + this.listen = listen; + } + + public void setPoolQueue(BlockingQueue> poolQueue) { + this.poolQueue = poolQueue; + } + + public synchronized void add(E element) { + Wrapper wrapper = new Wrapper(this, element); + poolQueue.add(wrapper); + } + + void input(E element) { + listen.input(element); + } } \ No newline at end of file diff --git a/java/base/src/main/java/base/worker/pool/PooledWorker.java b/java/core.legacy/src/main/java/base/worker/pool/PooledWorker.java similarity index 95% rename from java/base/src/main/java/base/worker/pool/PooledWorker.java rename to java/core.legacy/src/main/java/base/worker/pool/PooledWorker.java index a943835..d8493b8 100644 --- a/java/base/src/main/java/base/worker/pool/PooledWorker.java +++ b/java/core.legacy/src/main/java/base/worker/pool/PooledWorker.java @@ -1,49 +1,49 @@ -package base.worker.pool; - -import java.util.concurrent.BlockingQueue; - -import base.work.Work; -import base.worker.Worker; - -public class PooledWorker extends Worker { - protected BlockingQueue activateQueue; - protected BlockingQueue deactivateQueue; - - public PooledWorker(Work work) { - super(work); - } - - public void setActivateQueue(BlockingQueue activateQueue) { - this.activateQueue = activateQueue; - } - - public void setDeactivateQueue(BlockingQueue deactivateQueue) { - this.deactivateQueue = deactivateQueue; - } - - public void start() { - if (!active) { - activate = true; - } - if (!run) { - run = true; - } - try { - deactivateQueue.remove(this); - activateQueue.put(this); - } catch (InterruptedException e) {} - } - - public void stop() { - System.out.println("stop!! " + active); - if (active) { - deactivate = true; - } - activateQueue.remove(this); - deactivateQueue.add(this); - } - - public void exit() { - stop(); - } -} +package base.worker.pool; + +import java.util.concurrent.BlockingQueue; + +import base.work.Work; +import base.worker.Worker; + +public class PooledWorker extends Worker { + protected BlockingQueue activateQueue; + protected BlockingQueue deactivateQueue; + + public PooledWorker(Work work) { + super(work); + } + + public void setActivateQueue(BlockingQueue activateQueue) { + this.activateQueue = activateQueue; + } + + public void setDeactivateQueue(BlockingQueue deactivateQueue) { + this.deactivateQueue = deactivateQueue; + } + + public void start() { + if (!active) { + activate = true; + } + if (!run) { + run = true; + } + try { + deactivateQueue.remove(this); + activateQueue.put(this); + } catch (InterruptedException e) {} + } + + public void stop() { + System.out.println("stop!! " + active); + if (active) { + deactivate = true; + } + activateQueue.remove(this); + deactivateQueue.add(this); + } + + public void exit() { + stop(); + } +} diff --git a/java/base/src/main/java/base/worker/pool/WorkerPool.java b/java/core.legacy/src/main/java/base/worker/pool/WorkerPool.java similarity index 96% rename from java/base/src/main/java/base/worker/pool/WorkerPool.java rename to java/core.legacy/src/main/java/base/worker/pool/WorkerPool.java index cdd880d..1c65620 100644 --- a/java/base/src/main/java/base/worker/pool/WorkerPool.java +++ b/java/core.legacy/src/main/java/base/worker/pool/WorkerPool.java @@ -1,42 +1,42 @@ -package base.worker.pool; - -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.LinkedBlockingQueue; - -import base.util.ArrayCycle; -import base.worker.Worker; - -public class WorkerPool { - protected int poolSize; - protected BlockingQueue activateQueue; - protected BlockingQueue deactivateQueue; - protected ArrayCycle workerCycle; - protected ExecutorService executorService; - - public WorkerPool(int poolSize) { - this.poolSize = poolSize; - activateQueue = new LinkedBlockingQueue(); - deactivateQueue = new LinkedBlockingQueue(); - workerCycle = new ArrayCycle(); - executorService = Executors.newFixedThreadPool(poolSize); - } - - public void start() { - for (int i = 0; i < poolSize; ++i) { - Runnable runnable = new WorkerPoolRunnable(activateQueue, deactivateQueue, workerCycle, i + 1); - executorService.execute(runnable); - } - } - - public void stop() { - // Must be graceful - executorService.shutdownNow(); - } - - public void add(PooledWorker worker) { - worker.setActivateQueue(activateQueue); - worker.setDeactivateQueue(deactivateQueue); - } -} +package base.worker.pool; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; + +import base.util.ArrayCycle; +import base.worker.Worker; + +public class WorkerPool { + protected int poolSize; + protected BlockingQueue activateQueue; + protected BlockingQueue deactivateQueue; + protected ArrayCycle workerCycle; + protected ExecutorService executorService; + + public WorkerPool(int poolSize) { + this.poolSize = poolSize; + activateQueue = new LinkedBlockingQueue(); + deactivateQueue = new LinkedBlockingQueue(); + workerCycle = new ArrayCycle(); + executorService = Executors.newFixedThreadPool(poolSize); + } + + public void start() { + for (int i = 0; i < poolSize; ++i) { + Runnable runnable = new WorkerPoolRunnable(activateQueue, deactivateQueue, workerCycle, i + 1); + executorService.execute(runnable); + } + } + + public void stop() { + // Must be graceful + executorService.shutdownNow(); + } + + public void add(PooledWorker worker) { + worker.setActivateQueue(activateQueue); + worker.setDeactivateQueue(deactivateQueue); + } +} diff --git a/java/base/src/main/java/base/worker/pool/WorkerPoolRunnable.java b/java/core.legacy/src/main/java/base/worker/pool/WorkerPoolRunnable.java similarity index 97% rename from java/base/src/main/java/base/worker/pool/WorkerPoolRunnable.java rename to java/core.legacy/src/main/java/base/worker/pool/WorkerPoolRunnable.java index a843d5b..26ebf3c 100644 --- a/java/base/src/main/java/base/worker/pool/WorkerPoolRunnable.java +++ b/java/core.legacy/src/main/java/base/worker/pool/WorkerPoolRunnable.java @@ -1,41 +1,41 @@ -package base.worker.pool; - -import java.util.concurrent.BlockingQueue; - -import base.util.ArrayCycle; -import base.worker.Worker; - -public class WorkerPoolRunnable implements Runnable { - protected BlockingQueue activateQueue; - protected BlockingQueue deactivateQueue; - protected ArrayCycle workerCycle; - protected int id; - - public WorkerPoolRunnable(BlockingQueue activateQueue, BlockingQueue deactivateQueue, ArrayCycle workerCycle, int id) { - this.activateQueue = activateQueue; - this.deactivateQueue = deactivateQueue; - this.workerCycle = workerCycle; - this.id = id; - } - - public void run() { - while (true) { - if (!deactivateQueue.isEmpty()) { - try { - Worker worker = deactivateQueue.take(); - worker.runDeactivate(); - workerCycle.remove(worker); - } catch (InterruptedException e) {} - } else if (!activateQueue.isEmpty() || workerCycle.isEmpty()) { - try { - Worker worker = activateQueue.take(); - worker.runActivate(); - workerCycle.add(worker); - } catch (InterruptedException e) {} - } else { - Worker worker = workerCycle.next(); - worker.runWork(); - } - } - } -} +package base.worker.pool; + +import java.util.concurrent.BlockingQueue; + +import base.util.ArrayCycle; +import base.worker.Worker; + +public class WorkerPoolRunnable implements Runnable { + protected BlockingQueue activateQueue; + protected BlockingQueue deactivateQueue; + protected ArrayCycle workerCycle; + protected int id; + + public WorkerPoolRunnable(BlockingQueue activateQueue, BlockingQueue deactivateQueue, ArrayCycle workerCycle, int id) { + this.activateQueue = activateQueue; + this.deactivateQueue = deactivateQueue; + this.workerCycle = workerCycle; + this.id = id; + } + + public void run() { + while (true) { + if (!deactivateQueue.isEmpty()) { + try { + Worker worker = deactivateQueue.take(); + worker.runDeactivate(); + workerCycle.remove(worker); + } catch (InterruptedException e) {} + } else if (!activateQueue.isEmpty() || workerCycle.isEmpty()) { + try { + Worker worker = activateQueue.take(); + worker.runActivate(); + workerCycle.add(worker); + } catch (InterruptedException e) {} + } else { + Worker worker = workerCycle.next(); + worker.runWork(); + } + } + } +} diff --git a/java/base/src/main/java/base/worker/pool/Wrapper.java b/java/core.legacy/src/main/java/base/worker/pool/Wrapper.java similarity index 95% rename from java/base/src/main/java/base/worker/pool/Wrapper.java rename to java/core.legacy/src/main/java/base/worker/pool/Wrapper.java index a78dbaa..7084b07 100644 --- a/java/base/src/main/java/base/worker/pool/Wrapper.java +++ b/java/core.legacy/src/main/java/base/worker/pool/Wrapper.java @@ -1,16 +1,16 @@ -package base.worker.pool; - - -class Wrapper { - protected PooledListener listener; - protected E element; - - public Wrapper(PooledListener listener, E element) { - this.listener = listener; - this.element = element; - } - - public void deliver() { - listener.input(element); - } +package base.worker.pool; + + +class Wrapper { + protected PooledListener listener; + protected E element; + + public Wrapper(PooledListener listener, E element) { + this.listener = listener; + this.element = element; + } + + public void deliver() { + listener.input(element); + } } \ No newline at end of file diff --git a/java/base/src/test/java/junit/AllTests.java b/java/core.legacy/src/test/java/junit/AllTests.java similarity index 100% rename from java/base/src/test/java/junit/AllTests.java rename to java/core.legacy/src/test/java/junit/AllTests.java diff --git a/java/base/src/test/java/junit/TestTcpChannelCommunication.java b/java/core.legacy/src/test/java/junit/TestTcpChannelCommunication.java similarity index 96% rename from java/base/src/test/java/junit/TestTcpChannelCommunication.java rename to java/core.legacy/src/test/java/junit/TestTcpChannelCommunication.java index 8ab1ba4..d75a36a 100644 --- a/java/base/src/test/java/junit/TestTcpChannelCommunication.java +++ b/java/core.legacy/src/test/java/junit/TestTcpChannelCommunication.java @@ -1,94 +1,94 @@ -package junit; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import base.server.channel.TcpClient; -import base.server.channel.TcpServer; -import base.server.channel.TcpServerClient; - -public class TestTcpChannelCommunication { - protected TestTcpServer server; - protected TestTcpClient client; - - @Before - public void setUp() throws Exception { - server = new TestTcpServer(1234); - server.start(); - client = new TestTcpClient(1234); - client.start(); - } - - @After - public void tearDown() throws Exception { - client.exit(); - server.exit(); - - // Should add blocking stop and exit to worker - while (client.active() || server.active()) { - Thread.sleep(100); - } - } - - @Test - public void testSendClientToServer() throws Exception { - String message = "test"; - client.send(message.getBytes()); - synchronized (server) { - server.wait(2000); - } - byte[] buffer = server.buffer; - assertNotNull("Received input", buffer); - assertEquals("Message intact", message, new String(buffer).trim()); - } - - @Test - public void testSendServerToClient() throws Exception { - // If client can send, connection has been established - client.send("init".getBytes()); - - String message = "test"; - server.send(message.getBytes()); - synchronized (client) { - client.wait(2000); - } - byte[] buffer = client.buffer; - assertNotNull("Received input", buffer); - assertEquals("Message intact", message, new String(buffer).trim()); - } - - class TestTcpServer extends TcpServer { - public byte[] buffer; - - public TestTcpServer(int port) { - super(port); - } - - public void input(TcpServerClient client, byte[] buffer) { - this.buffer = buffer; - synchronized (this) { - notifyAll(); - } - } - } - - class TestTcpClient extends TcpClient { - public byte[] buffer; - - public TestTcpClient(int port) { - super(port); - } - - protected void input(byte[] buffer) { - this.buffer = buffer; - synchronized (this) { - notifyAll(); - } - } - - } -} +package junit; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import base.server.channel.TcpClient; +import base.server.channel.TcpServer; +import base.server.channel.TcpServerClient; + +public class TestTcpChannelCommunication { + protected TestTcpServer server; + protected TestTcpClient client; + + @Before + public void setUp() throws Exception { + server = new TestTcpServer(1234); + server.start(); + client = new TestTcpClient(1234); + client.start(); + } + + @After + public void tearDown() throws Exception { + client.exit(); + server.exit(); + + // Should add blocking stop and exit to worker + while (client.active() || server.active()) { + Thread.sleep(100); + } + } + + @Test + public void testSendClientToServer() throws Exception { + String message = "test"; + client.send(message.getBytes()); + synchronized (server) { + server.wait(2000); + } + byte[] buffer = server.buffer; + assertNotNull("Received input", buffer); + assertEquals("Message intact", message, new String(buffer).trim()); + } + + @Test + public void testSendServerToClient() throws Exception { + // If client can send, connection has been established + client.send("init".getBytes()); + + String message = "test"; + server.send(message.getBytes()); + synchronized (client) { + client.wait(2000); + } + byte[] buffer = client.buffer; + assertNotNull("Received input", buffer); + assertEquals("Message intact", message, new String(buffer).trim()); + } + + class TestTcpServer extends TcpServer { + public byte[] buffer; + + public TestTcpServer(int port) { + super(port); + } + + public void input(TcpServerClient client, byte[] buffer) { + this.buffer = buffer; + synchronized (this) { + notifyAll(); + } + } + } + + class TestTcpClient extends TcpClient { + public byte[] buffer; + + public TestTcpClient(int port) { + super(port); + } + + protected void input(byte[] buffer) { + this.buffer = buffer; + synchronized (this) { + notifyAll(); + } + } + + } +} diff --git a/java/base/src/test/java/junit/TestTcpSocketCommunication.java b/java/core.legacy/src/test/java/junit/TestTcpSocketCommunication.java similarity index 96% rename from java/base/src/test/java/junit/TestTcpSocketCommunication.java rename to java/core.legacy/src/test/java/junit/TestTcpSocketCommunication.java index 801b86f..398e653 100644 --- a/java/base/src/test/java/junit/TestTcpSocketCommunication.java +++ b/java/core.legacy/src/test/java/junit/TestTcpSocketCommunication.java @@ -1,93 +1,93 @@ -package junit; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import base.server.socket.TcpClient; -import base.server.socket.TcpServer; -import base.server.socket.TcpServerClient; - -public class TestTcpSocketCommunication { - protected TestTcpServer server; - protected TestTcpClient client; - - @Before - public void setUp() throws Exception { - server = new TestTcpServer(1234); - server.start(); - client = new TestTcpClient(1234); - client.start(); - } - - @After - public void tearDown() throws Exception { - client.exit(); - server.exit(); - - // Should add blocking stop and exit to worker - while (client.active() || server.active()) { - Thread.sleep(100); - } - } - - @Test - public void testSendClientToServer() throws Exception { - String message = "test"; - client.send(message.getBytes()); - synchronized (server) { - server.wait(2000); - } - byte[] buffer = server.buffer; - assertNotNull("Received input", buffer); - assertEquals("Message intact", message, new String(buffer).trim()); - } - - @Test - public void testSendServerToClient() throws Exception { - // If client can send, connection has been established - client.send("init".getBytes()); - - String message = "test"; - server.send(message.getBytes()); - synchronized (client) { - client.wait(2000); - } - byte[] buffer = client.buffer; - assertNotNull("Received input", buffer); - assertEquals("Message intact", message, new String(buffer).trim()); - } - - class TestTcpServer extends TcpServer { - public byte[] buffer; - - public TestTcpServer(int port) { - super(port); - } - - public void input(TcpServerClient client, byte[] buffer) { - this.buffer = buffer; - synchronized (this) { - notifyAll(); - } - } - } - - class TestTcpClient extends TcpClient { - public byte[] buffer; - - public TestTcpClient(int port) { - super(port); - } - - protected void input(byte[] buffer) { - this.buffer = buffer; - synchronized (this) { - notifyAll(); - } - } - } -} +package junit; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import base.server.socket.TcpClient; +import base.server.socket.TcpServer; +import base.server.socket.TcpServerClient; + +public class TestTcpSocketCommunication { + protected TestTcpServer server; + protected TestTcpClient client; + + @Before + public void setUp() throws Exception { + server = new TestTcpServer(1234); + server.start(); + client = new TestTcpClient(1234); + client.start(); + } + + @After + public void tearDown() throws Exception { + client.exit(); + server.exit(); + + // Should add blocking stop and exit to worker + while (client.active() || server.active()) { + Thread.sleep(100); + } + } + + @Test + public void testSendClientToServer() throws Exception { + String message = "test"; + client.send(message.getBytes()); + synchronized (server) { + server.wait(2000); + } + byte[] buffer = server.buffer; + assertNotNull("Received input", buffer); + assertEquals("Message intact", message, new String(buffer).trim()); + } + + @Test + public void testSendServerToClient() throws Exception { + // If client can send, connection has been established + client.send("init".getBytes()); + + String message = "test"; + server.send(message.getBytes()); + synchronized (client) { + client.wait(2000); + } + byte[] buffer = client.buffer; + assertNotNull("Received input", buffer); + assertEquals("Message intact", message, new String(buffer).trim()); + } + + class TestTcpServer extends TcpServer { + public byte[] buffer; + + public TestTcpServer(int port) { + super(port); + } + + public void input(TcpServerClient client, byte[] buffer) { + this.buffer = buffer; + synchronized (this) { + notifyAll(); + } + } + } + + class TestTcpClient extends TcpClient { + public byte[] buffer; + + public TestTcpClient(int port) { + super(port); + } + + protected void input(byte[] buffer) { + this.buffer = buffer; + synchronized (this) { + notifyAll(); + } + } + } +} diff --git a/java/base/src/test/java/junit/TestUdpDuplexCommunication.java b/java/core.legacy/src/test/java/junit/TestUdpDuplexCommunication.java similarity index 96% rename from java/base/src/test/java/junit/TestUdpDuplexCommunication.java rename to java/core.legacy/src/test/java/junit/TestUdpDuplexCommunication.java index e406529..edef923 100644 --- a/java/base/src/test/java/junit/TestUdpDuplexCommunication.java +++ b/java/core.legacy/src/test/java/junit/TestUdpDuplexCommunication.java @@ -1,96 +1,96 @@ -package junit; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.net.UnknownHostException; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import base.server.datagram.UdpDuplexAutoClient; -import base.server.datagram.UdpDuplexServer; - -public class TestUdpDuplexCommunication { - protected TestUdpDuplexServer server; - protected TestUdpDuplexClient client; - - @Before - public void setUp() throws Exception { - server = new TestUdpDuplexServer(1234, 1235); - server.start(); - client = new TestUdpDuplexClient(1234, 1235); - client.start(); - } - - @After - public void tearDown() throws Exception { - client.exit(); - server.exit(); - - // Should add blocking stop and exit to worker - while (client.active() || server.active()) { - Thread.sleep(1000); - } - } - - @Test - public void testServerToClientCommunication() throws Exception { - String message = "test"; - server.send(message.getBytes()); - System.err.println("send"); - synchronized (client) { - client.wait(2000); - } - byte[] buffer = client.buffer; - assertNotNull("Received input", buffer); - assertEquals("Message intact", message, new String(buffer).trim()); - } - - @Test - public void testClientToServerCommunication() throws Exception { - // Let client discover server address - testServerToClientCommunication(); - - String message = "test"; - client.send(message.getBytes()); - System.err.println("send"); - synchronized (server) { - server.wait(2000); - } - byte[] buffer = server.buffer; - assertNotNull("Received input", buffer); - assertEquals("Message intact", message, new String(buffer).trim()); - } - - public class TestUdpDuplexServer extends UdpDuplexServer { - public byte[] buffer; - - public TestUdpDuplexServer(int sendPort, int bindPort) { - super(sendPort, bindPort); - } - - public void input(byte[] buffer) { - this.buffer = buffer; - synchronized (this) { - notifyAll(); - } - } - } - - class TestUdpDuplexClient extends UdpDuplexAutoClient { - public byte[] buffer; - - public TestUdpDuplexClient(int bindPort, int sendPort) throws UnknownHostException { - super(bindPort, sendPort); - } - - public void input(byte[] buffer) { - this.buffer = buffer; - synchronized (this) { - notifyAll(); - } - } - } -} +package junit; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.net.UnknownHostException; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import base.server.datagram.UdpDuplexAutoClient; +import base.server.datagram.UdpDuplexServer; + +public class TestUdpDuplexCommunication { + protected TestUdpDuplexServer server; + protected TestUdpDuplexClient client; + + @Before + public void setUp() throws Exception { + server = new TestUdpDuplexServer(1234, 1235); + server.start(); + client = new TestUdpDuplexClient(1234, 1235); + client.start(); + } + + @After + public void tearDown() throws Exception { + client.exit(); + server.exit(); + + // Should add blocking stop and exit to worker + while (client.active() || server.active()) { + Thread.sleep(1000); + } + } + + @Test + public void testServerToClientCommunication() throws Exception { + String message = "test"; + server.send(message.getBytes()); + System.err.println("send"); + synchronized (client) { + client.wait(2000); + } + byte[] buffer = client.buffer; + assertNotNull("Received input", buffer); + assertEquals("Message intact", message, new String(buffer).trim()); + } + + @Test + public void testClientToServerCommunication() throws Exception { + // Let client discover server address + testServerToClientCommunication(); + + String message = "test"; + client.send(message.getBytes()); + System.err.println("send"); + synchronized (server) { + server.wait(2000); + } + byte[] buffer = server.buffer; + assertNotNull("Received input", buffer); + assertEquals("Message intact", message, new String(buffer).trim()); + } + + public class TestUdpDuplexServer extends UdpDuplexServer { + public byte[] buffer; + + public TestUdpDuplexServer(int sendPort, int bindPort) { + super(sendPort, bindPort); + } + + public void input(byte[] buffer) { + this.buffer = buffer; + synchronized (this) { + notifyAll(); + } + } + } + + class TestUdpDuplexClient extends UdpDuplexAutoClient { + public byte[] buffer; + + public TestUdpDuplexClient(int bindPort, int sendPort) throws UnknownHostException { + super(bindPort, sendPort); + } + + public void input(byte[] buffer) { + this.buffer = buffer; + synchronized (this) { + notifyAll(); + } + } + } +} diff --git a/java/base/src/test/java/junit/TestUdpMulticastCommunication.java b/java/core.legacy/src/test/java/junit/TestUdpMulticastCommunication.java similarity index 96% rename from java/base/src/test/java/junit/TestUdpMulticastCommunication.java rename to java/core.legacy/src/test/java/junit/TestUdpMulticastCommunication.java index 4088324..9cc81a8 100644 --- a/java/base/src/test/java/junit/TestUdpMulticastCommunication.java +++ b/java/core.legacy/src/test/java/junit/TestUdpMulticastCommunication.java @@ -1,63 +1,63 @@ -package junit; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import base.server.datagram.UdpMulticastClient; -import base.server.datagram.UdpMulticastServer; - -public class TestUdpMulticastCommunication { - protected UdpMulticastServer server; - protected TestUdpMulticastClient client; - - @Before - public void setUp() throws Exception { - server = new UdpMulticastServer(1234); - server.start(); - client = new TestUdpMulticastClient(1234); - client.start(); - } - - @After - public void tearDown() throws Exception { - client.exit(); - server.exit(); - - // Should add blocking stop and exit to worker - while (client.active() || server.active()) { - Thread.sleep(1000); - } - } - - @Test - public void testServerToClientCommunication() throws Exception { - String message = "test"; - server.send(message.getBytes()); - System.err.println("send"); - synchronized (client) { - client.wait(2000); - } - byte[] buffer = client.buffer; - assertNotNull("Received input", buffer); - assertEquals("Message intact", message, new String(buffer).trim()); - } - - class TestUdpMulticastClient extends UdpMulticastClient { - public byte[] buffer; - - public TestUdpMulticastClient(int port) { - super(port); - } - - public void input(byte[] buffer) { - this.buffer = buffer; - synchronized (this) { - notifyAll(); - } - } - } -} +package junit; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import base.server.datagram.UdpMulticastClient; +import base.server.datagram.UdpMulticastServer; + +public class TestUdpMulticastCommunication { + protected UdpMulticastServer server; + protected TestUdpMulticastClient client; + + @Before + public void setUp() throws Exception { + server = new UdpMulticastServer(1234); + server.start(); + client = new TestUdpMulticastClient(1234); + client.start(); + } + + @After + public void tearDown() throws Exception { + client.exit(); + server.exit(); + + // Should add blocking stop and exit to worker + while (client.active() || server.active()) { + Thread.sleep(1000); + } + } + + @Test + public void testServerToClientCommunication() throws Exception { + String message = "test"; + server.send(message.getBytes()); + System.err.println("send"); + synchronized (client) { + client.wait(2000); + } + byte[] buffer = client.buffer; + assertNotNull("Received input", buffer); + assertEquals("Message intact", message, new String(buffer).trim()); + } + + class TestUdpMulticastClient extends UdpMulticastClient { + public byte[] buffer; + + public TestUdpMulticastClient(int port) { + super(port); + } + + public void input(byte[] buffer) { + this.buffer = buffer; + synchronized (this) { + notifyAll(); + } + } + } +} diff --git a/java/base/src/test/java/junit/TestUdpUnicastCommunication.java b/java/core.legacy/src/test/java/junit/TestUdpUnicastCommunication.java similarity index 96% rename from java/base/src/test/java/junit/TestUdpUnicastCommunication.java rename to java/core.legacy/src/test/java/junit/TestUdpUnicastCommunication.java index 35c6596..013ce5b 100644 --- a/java/base/src/test/java/junit/TestUdpUnicastCommunication.java +++ b/java/core.legacy/src/test/java/junit/TestUdpUnicastCommunication.java @@ -1,61 +1,61 @@ -package junit; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import base.server.datagram.UdpSender; -import base.server.datagram.UdpServer; - -public class TestUdpUnicastCommunication { - protected TestUdpServer server; - protected UdpSender sender; - - @Before - public void setUp() throws Exception { - server = new TestUdpServer(1234); - server.start(); - sender = new UdpSender(1234); - } - - @After - public void tearDown() throws Exception { - server.exit(); - - // Should add blocking stop and exit to worker - while (server.active()) { - Thread.sleep(100); - } - } - - @Test - public void testSendClientToServer() throws Exception { - String message = "test"; - sender.send(message.getBytes()); - synchronized (server) { - server.wait(2000); - } - byte[] buffer = server.buffer; - assertNotNull("Received input", buffer); - assertEquals("Message intact", message, new String(buffer).trim()); - } - - class TestUdpServer extends UdpServer { - public byte[] buffer; - - public TestUdpServer(int port) { - super(port); - } - - @Override - protected void input(byte[] buffer) { - this.buffer = buffer; - synchronized (this) { - notifyAll(); - } - } - } -} +package junit; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import base.server.datagram.UdpSender; +import base.server.datagram.UdpServer; + +public class TestUdpUnicastCommunication { + protected TestUdpServer server; + protected UdpSender sender; + + @Before + public void setUp() throws Exception { + server = new TestUdpServer(1234); + server.start(); + sender = new UdpSender(1234); + } + + @After + public void tearDown() throws Exception { + server.exit(); + + // Should add blocking stop and exit to worker + while (server.active()) { + Thread.sleep(100); + } + } + + @Test + public void testSendClientToServer() throws Exception { + String message = "test"; + sender.send(message.getBytes()); + synchronized (server) { + server.wait(2000); + } + byte[] buffer = server.buffer; + assertNotNull("Received input", buffer); + assertEquals("Message intact", message, new String(buffer).trim()); + } + + class TestUdpServer extends UdpServer { + public byte[] buffer; + + public TestUdpServer(int port) { + super(port); + } + + @Override + protected void input(byte[] buffer) { + this.buffer = buffer; + synchronized (this) { + notifyAll(); + } + } + } +} diff --git a/java/base/src/test/java/test/Test.java b/java/core.legacy/src/test/java/test/Test.java similarity index 96% rename from java/base/src/test/java/test/Test.java rename to java/core.legacy/src/test/java/test/Test.java index 7e1b0b8..4fe4ac7 100644 --- a/java/base/src/test/java/test/Test.java +++ b/java/core.legacy/src/test/java/test/Test.java @@ -1,54 +1,54 @@ -package test; - -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; - -public class Test { - public static void main(String[] args) { - try { - new Test().start(); - } catch (Throwable e) { - e.printStackTrace(); - } - } - - private void start() throws Throwable { - input((Object) new A()); - input((Object) new B()); - input((Object) new String[] {"a", "b"}); - } - - public void input(Object object) throws Throwable { - System.out.println("Object"); - MethodType methodType = MethodType.methodType(void.class, object.getClass()); - MethodHandles.Lookup lookup = MethodHandles.lookup(); - MethodHandle methodHandle = lookup.findVirtual(getClass(), "input", methodType); - try { - methodHandle.invoke(this, object); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - System.exit(1); - } - } - - public void input(A object) { - System.out.println("A"); - } - - public void input(B object) { - System.out.println("B"); - } - - public void input(String[] object) { - System.out.println("String[]"); - } - - public class A { - - } - - public class B { - - } -} +package test; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +public class Test { + public static void main(String[] args) { + try { + new Test().start(); + } catch (Throwable e) { + e.printStackTrace(); + } + } + + private void start() throws Throwable { + input((Object) new A()); + input((Object) new B()); + input((Object) new String[] {"a", "b"}); + } + + public void input(Object object) throws Throwable { + System.out.println("Object"); + MethodType methodType = MethodType.methodType(void.class, object.getClass()); + MethodHandles.Lookup lookup = MethodHandles.lookup(); + MethodHandle methodHandle = lookup.findVirtual(getClass(), "input", methodType); + try { + methodHandle.invoke(this, object); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + System.exit(1); + } + } + + public void input(A object) { + System.out.println("A"); + } + + public void input(B object) { + System.out.println("B"); + } + + public void input(String[] object) { + System.out.println("String[]"); + } + + public class A { + + } + + public class B { + + } +} diff --git a/java/base/src/test/java/worker/TestDirectWork.java b/java/core.legacy/src/test/java/worker/TestDirectWork.java similarity index 95% rename from java/base/src/test/java/worker/TestDirectWork.java rename to java/core.legacy/src/test/java/worker/TestDirectWork.java index 63671d9..984f54d 100644 --- a/java/base/src/test/java/worker/TestDirectWork.java +++ b/java/core.legacy/src/test/java/worker/TestDirectWork.java @@ -1,15 +1,15 @@ -package worker; - -import worker.dummy.DummyWork; - - -public class TestDirectWork { - public static void main(String[] args) { - DummyWork work = new DummyWork(1); - work.setWork(100); - work.start(); - try { - Thread.sleep(10000); - } catch (InterruptedException e) {} - } -} +package worker; + +import worker.dummy.DummyWork; + + +public class TestDirectWork { + public static void main(String[] args) { + DummyWork work = new DummyWork(1); + work.setWork(100); + work.start(); + try { + Thread.sleep(10000); + } catch (InterruptedException e) {} + } +} diff --git a/java/base/src/test/java/worker/TestIntervalWork.java b/java/core.legacy/src/test/java/worker/TestIntervalWork.java similarity index 96% rename from java/base/src/test/java/worker/TestIntervalWork.java rename to java/core.legacy/src/test/java/worker/TestIntervalWork.java index 93ad699..cbc5bd3 100644 --- a/java/base/src/test/java/worker/TestIntervalWork.java +++ b/java/core.legacy/src/test/java/worker/TestIntervalWork.java @@ -1,18 +1,18 @@ -package worker; - -import worker.dummy.DummyIntervalWork; -import base.work.Work; - -public class TestIntervalWork { - public static void main(String[] args) { - Work work = new DummyIntervalWork(500); - for (int i = 0; i < 10; ++i) { - work.start(); - System.out.println("--"); - try { - Thread.sleep(1000); - } catch (InterruptedException e) {} - work.stop(); - } - } -} +package worker; + +import worker.dummy.DummyIntervalWork; +import base.work.Work; + +public class TestIntervalWork { + public static void main(String[] args) { + Work work = new DummyIntervalWork(500); + for (int i = 0; i < 10; ++i) { + work.start(); + System.out.println("--"); + try { + Thread.sleep(1000); + } catch (InterruptedException e) {} + work.stop(); + } + } +} diff --git a/java/base/src/test/java/worker/TestListen.java b/java/core.legacy/src/test/java/worker/TestListen.java similarity index 96% rename from java/base/src/test/java/worker/TestListen.java rename to java/core.legacy/src/test/java/worker/TestListen.java index b9728d6..53a7595 100644 --- a/java/base/src/test/java/worker/TestListen.java +++ b/java/core.legacy/src/test/java/worker/TestListen.java @@ -1,19 +1,19 @@ -package worker; - -import worker.dummy.DummyListen; - -public class TestListen { - public static void main(String[] args) { - DummyListen listen = new DummyListen(0); - listen.start(); - for (int i = 0; i < 10; ++i) { - listen.add(i); - try { - Thread.sleep(1000); - } catch (InterruptedException e) {} - } - try { - Thread.sleep(10000); - } catch (InterruptedException e) {} - } -} +package worker; + +import worker.dummy.DummyListen; + +public class TestListen { + public static void main(String[] args) { + DummyListen listen = new DummyListen(0); + listen.start(); + for (int i = 0; i < 10; ++i) { + listen.add(i); + try { + Thread.sleep(1000); + } catch (InterruptedException e) {} + } + try { + Thread.sleep(10000); + } catch (InterruptedException e) {} + } +} diff --git a/java/base/src/test/java/worker/TestPooledListen.java b/java/core.legacy/src/test/java/worker/TestPooledListen.java similarity index 96% rename from java/base/src/test/java/worker/TestPooledListen.java rename to java/core.legacy/src/test/java/worker/TestPooledListen.java index 32c35a5..d109754 100644 --- a/java/base/src/test/java/worker/TestPooledListen.java +++ b/java/core.legacy/src/test/java/worker/TestPooledListen.java @@ -1,38 +1,38 @@ -package worker; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import worker.dummy.DummyListen; -import base.worker.pool.ListenerPool; - -public class TestPooledListen { - protected int id; - - public TestPooledListen(int id) { - this.id = id; - } - - public void input(Integer element) { - System.out.println("#" + id + ": " + element); - } - - public static void main(String[] args) { - ListenerPool listenerPool = new ListenerPool(5); - List> listenList = new ArrayList>(); - for (int i = 0; i < 20; ++i) { - DummyListen listen = new DummyListen(listenerPool, i + 1); - listenList.add(listen); - } - listenerPool.start(); - - System.out.println("Starting to give out elements!"); - for (int i = 0; i < 100; ++i) { - DummyListen randomListen = listenList.get((new Random()).nextInt(listenList.size())); - randomListen.add(i); - } - - //listenerPool.await(); - } -} +package worker; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import worker.dummy.DummyListen; +import base.worker.pool.ListenerPool; + +public class TestPooledListen { + protected int id; + + public TestPooledListen(int id) { + this.id = id; + } + + public void input(Integer element) { + System.out.println("#" + id + ": " + element); + } + + public static void main(String[] args) { + ListenerPool listenerPool = new ListenerPool(5); + List> listenList = new ArrayList>(); + for (int i = 0; i < 20; ++i) { + DummyListen listen = new DummyListen(listenerPool, i + 1); + listenList.add(listen); + } + listenerPool.start(); + + System.out.println("Starting to give out elements!"); + for (int i = 0; i < 100; ++i) { + DummyListen randomListen = listenList.get((new Random()).nextInt(listenList.size())); + randomListen.add(i); + } + + //listenerPool.await(); + } +} diff --git a/java/base/src/test/java/worker/TestPooledWork.java b/java/core.legacy/src/test/java/worker/TestPooledWork.java similarity index 96% rename from java/base/src/test/java/worker/TestPooledWork.java rename to java/core.legacy/src/test/java/worker/TestPooledWork.java index 04dd8d1..c69f7f4 100644 --- a/java/base/src/test/java/worker/TestPooledWork.java +++ b/java/core.legacy/src/test/java/worker/TestPooledWork.java @@ -1,45 +1,45 @@ -package worker; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import worker.dummy.DummyWork; -import base.work.Work; -import base.worker.pool.WorkerPool; - -public class TestPooledWork { - public static void main(String[] args) { - WorkerPool workerPool = new WorkerPool(3); - - List workList = new ArrayList(); - for (int i = 0; i < 10; ++i) { - DummyWork work = new DummyWork(workerPool, i + 1); - workList.add(work); - } - workerPool.start(); - - System.out.println("Starting work!"); - ArrayList activeWorkList = new ArrayList(); - for (int i = 0; i < 8; ++i) { - DummyWork work = workList.get((new Random()).nextInt(workList.size())); - work.setWork(1000); - work.start(); - activeWorkList.add(work); - } - try { - Thread.sleep(2000); - } catch (InterruptedException e) {} - int i = 0; - for (Work work : activeWorkList) { - if (++i > 5) { - break; - } - work.stop(); - } - try { - Thread.sleep(100000); - } catch (InterruptedException e) {} - System.exit(0); - } -} +package worker; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import worker.dummy.DummyWork; +import base.work.Work; +import base.worker.pool.WorkerPool; + +public class TestPooledWork { + public static void main(String[] args) { + WorkerPool workerPool = new WorkerPool(3); + + List workList = new ArrayList(); + for (int i = 0; i < 10; ++i) { + DummyWork work = new DummyWork(workerPool, i + 1); + workList.add(work); + } + workerPool.start(); + + System.out.println("Starting work!"); + ArrayList activeWorkList = new ArrayList(); + for (int i = 0; i < 8; ++i) { + DummyWork work = workList.get((new Random()).nextInt(workList.size())); + work.setWork(1000); + work.start(); + activeWorkList.add(work); + } + try { + Thread.sleep(2000); + } catch (InterruptedException e) {} + int i = 0; + for (Work work : activeWorkList) { + if (++i > 5) { + break; + } + work.stop(); + } + try { + Thread.sleep(100000); + } catch (InterruptedException e) {} + System.exit(0); + } +} diff --git a/java/base/src/test/java/worker/dummy/DummyIntervalWork.java b/java/core.legacy/src/test/java/worker/dummy/DummyIntervalWork.java similarity index 95% rename from java/base/src/test/java/worker/dummy/DummyIntervalWork.java rename to java/core.legacy/src/test/java/worker/dummy/DummyIntervalWork.java index 706fa08..21b9399 100644 --- a/java/base/src/test/java/worker/dummy/DummyIntervalWork.java +++ b/java/core.legacy/src/test/java/worker/dummy/DummyIntervalWork.java @@ -1,13 +1,13 @@ -package worker.dummy; - -import base.worker.IntervalWork; - -public class DummyIntervalWork extends IntervalWork { - public DummyIntervalWork(int interval) { - super(interval); - } - - public void work() { - System.out.println(":-)"); - } +package worker.dummy; + +import base.worker.IntervalWork; + +public class DummyIntervalWork extends IntervalWork { + public DummyIntervalWork(int interval) { + super(interval); + } + + public void work() { + System.out.println(":-)"); + } } \ No newline at end of file diff --git a/java/base/src/test/java/worker/dummy/DummyListen.java b/java/core.legacy/src/test/java/worker/dummy/DummyListen.java similarity index 95% rename from java/base/src/test/java/worker/dummy/DummyListen.java rename to java/core.legacy/src/test/java/worker/dummy/DummyListen.java index 704cd55..6fe7a93 100644 --- a/java/base/src/test/java/worker/dummy/DummyListen.java +++ b/java/core.legacy/src/test/java/worker/dummy/DummyListen.java @@ -1,26 +1,26 @@ -package worker.dummy; - -import base.work.Listen; -import base.worker.pool.ListenerPool; - -public class DummyListen extends Listen { - protected int id; - - public DummyListen(ListenerPool listenerPool, int id) { - super(listenerPool); - this.id = id; - } - - public DummyListen(int id) { - super(); - this.id = id; - } - - public void input(Integer input) { - System.out.println("#" + id + ", input = " + input); - } - - public void input(byte[] input) { - System.out.println("#" + id + ", input = " + new String(input).trim()); - } -} +package worker.dummy; + +import base.work.Listen; +import base.worker.pool.ListenerPool; + +public class DummyListen extends Listen { + protected int id; + + public DummyListen(ListenerPool listenerPool, int id) { + super(listenerPool); + this.id = id; + } + + public DummyListen(int id) { + super(); + this.id = id; + } + + public void input(Integer input) { + System.out.println("#" + id + ", input = " + input); + } + + public void input(byte[] input) { + System.out.println("#" + id + ", input = " + new String(input).trim()); + } +} diff --git a/java/base/src/test/java/worker/dummy/DummyWork.java b/java/core.legacy/src/test/java/worker/dummy/DummyWork.java similarity index 95% rename from java/base/src/test/java/worker/dummy/DummyWork.java rename to java/core.legacy/src/test/java/worker/dummy/DummyWork.java index e2d9839..4844907 100644 --- a/java/base/src/test/java/worker/dummy/DummyWork.java +++ b/java/core.legacy/src/test/java/worker/dummy/DummyWork.java @@ -1,42 +1,42 @@ -package worker.dummy; - -import base.exception.worker.ActivateException; -import base.exception.worker.DeactivateException; -import base.work.Work; -import base.worker.pool.WorkerPool; - -public class DummyWork extends Work { - protected int id; - protected volatile int work; - - public DummyWork(int id) { - super(); - this.id = id; - } - - public DummyWork(WorkerPool workerPool, int id) { - super(workerPool); - this.id = id; - } - - public void setWork(int work) { - System.out.println("#" + id + ", set work @ " + work); - this.work = work; - } - - public void work() { - System.out.println("#" + id + ", work = " + work); - if (--work < 1) { - stop(); - } - sleep(300); - } - - public void activate() throws ActivateException { - System.out.println("#" + id + ", activating..."); - } - - public void deactivate() throws DeactivateException { - System.out.println("#" + id + ", deactivating..."); - } -} +package worker.dummy; + +import base.exception.worker.ActivateException; +import base.exception.worker.DeactivateException; +import base.work.Work; +import base.worker.pool.WorkerPool; + +public class DummyWork extends Work { + protected int id; + protected volatile int work; + + public DummyWork(int id) { + super(); + this.id = id; + } + + public DummyWork(WorkerPool workerPool, int id) { + super(workerPool); + this.id = id; + } + + public void setWork(int work) { + System.out.println("#" + id + ", set work @ " + work); + this.work = work; + } + + public void work() { + System.out.println("#" + id + ", work = " + work); + if (--work < 1) { + stop(); + } + sleep(300); + } + + public void activate() throws ActivateException { + System.out.println("#" + id + ", activating..."); + } + + public void deactivate() throws DeactivateException { + System.out.println("#" + id + ", deactivating..."); + } +} diff --git a/java/base/src/test/resources/log4j.properties b/java/core.legacy/src/test/resources/log4j.properties similarity index 100% rename from java/base/src/test/resources/log4j.properties rename to java/core.legacy/src/test/resources/log4j.properties diff --git a/java/core.networking/build.gradle b/java/core.networking/build.gradle new file mode 100644 index 0000000..e69de29 diff --git a/java/core.routing/build.gradle b/java/core.routing/build.gradle new file mode 100644 index 0000000..e69de29 diff --git a/java/core.worker/build.gradle b/java/core.worker/build.gradle new file mode 100644 index 0000000..e69de29 diff --git a/java/device.lirc/build.gradle b/java/device.lirc/build.gradle new file mode 100644 index 0000000..e69de29 diff --git a/java/exec.connected/.gitignore b/java/exec.connected/.gitignore deleted file mode 100644 index 05f98b2..0000000 --- a/java/exec.connected/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -/.gradle -/.settings -/.classpath -/.project -/bin -/build diff --git a/java/mimis/build.gradle b/java/exec.mimis/build.gradle similarity index 62% rename from java/mimis/build.gradle rename to java/exec.mimis/build.gradle index 0a4c98e..61afa58 100644 --- a/java/mimis/build.gradle +++ b/java/exec.mimis/build.gradle @@ -1,14 +1,5 @@ -apply plugin: 'java' -apply plugin: 'maven' -apply plugin: 'eclipse' -apply plugin: 'license' - -task wrapper(type: Wrapper) { - gradleVersion = '2.2' -} - dependencies { - compile project(':base') + compile project(':core.legacy') compile 'com.github.boukefalos:jlibmimis:0.1' compile 'com.github.boukefalos:jlibitunes:0.3' @@ -31,19 +22,6 @@ buildscript { } } -license { - header rootProject.file('HEADER.txt') - strictCheck true - - skipExistingHeaders false - ext.year = Calendar.getInstance().get(Calendar.YEAR) - ext.name = 'Rik Veenboer' - ext.email = 'rik.veenboer@gmail.com' - ext.project = 'this program' - ext.Project = 'This program' - include "**/*.java" -} - jar { from sourceSets.main.allSource manifest { diff --git a/java/mimis/src/main/java/mimis/Client.java b/java/exec.mimis/src/main/java/mimis/Client.java similarity index 100% rename from java/mimis/src/main/java/mimis/Client.java rename to java/exec.mimis/src/main/java/mimis/Client.java diff --git a/java/mimis/src/main/java/mimis/Component.java b/java/exec.mimis/src/main/java/mimis/Component.java similarity index 100% rename from java/mimis/src/main/java/mimis/Component.java rename to java/exec.mimis/src/main/java/mimis/Component.java diff --git a/java/mimis/src/main/java/mimis/Gui.java b/java/exec.mimis/src/main/java/mimis/Gui.java similarity index 100% rename from java/mimis/src/main/java/mimis/Gui.java rename to java/exec.mimis/src/main/java/mimis/Gui.java diff --git a/java/mimis/src/main/java/mimis/Main.java b/java/exec.mimis/src/main/java/mimis/Main.java similarity index 100% rename from java/mimis/src/main/java/mimis/Main.java rename to java/exec.mimis/src/main/java/mimis/Main.java diff --git a/java/mimis/src/main/java/mimis/Mimis.java b/java/exec.mimis/src/main/java/mimis/Mimis.java similarity index 100% rename from java/mimis/src/main/java/mimis/Mimis.java rename to java/exec.mimis/src/main/java/mimis/Mimis.java diff --git a/java/mimis/src/main/java/mimis/application/Application.java b/java/exec.mimis/src/main/java/mimis/application/Application.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/Application.java rename to java/exec.mimis/src/main/java/mimis/application/Application.java diff --git a/java/mimis/src/main/java/mimis/application/cmd/CMDApplication.java b/java/exec.mimis/src/main/java/mimis/application/cmd/CMDApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/cmd/CMDApplication.java rename to java/exec.mimis/src/main/java/mimis/application/cmd/CMDApplication.java diff --git a/java/mimis/src/main/java/mimis/application/cmd/windows/WindowsApplication.java b/java/exec.mimis/src/main/java/mimis/application/cmd/windows/WindowsApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/cmd/windows/WindowsApplication.java rename to java/exec.mimis/src/main/java/mimis/application/cmd/windows/WindowsApplication.java diff --git a/java/mimis/src/main/java/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java b/java/exec.mimis/src/main/java/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java rename to java/exec.mimis/src/main/java/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java diff --git a/java/mimis/src/main/java/mimis/application/cmd/windows/lightroom/LightroomApplication.java b/java/exec.mimis/src/main/java/mimis/application/cmd/windows/lightroom/LightroomApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/cmd/windows/lightroom/LightroomApplication.java rename to java/exec.mimis/src/main/java/mimis/application/cmd/windows/lightroom/LightroomApplication.java diff --git a/java/mimis/src/main/java/mimis/application/cmd/windows/photoviewer/PhotoViewerApplication.java b/java/exec.mimis/src/main/java/mimis/application/cmd/windows/photoviewer/PhotoViewerApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/cmd/windows/photoviewer/PhotoViewerApplication.java rename to java/exec.mimis/src/main/java/mimis/application/cmd/windows/photoviewer/PhotoViewerApplication.java diff --git a/java/mimis/src/main/java/mimis/application/cmd/windows/winamp/WinampApplication.java b/java/exec.mimis/src/main/java/mimis/application/cmd/windows/winamp/WinampApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/cmd/windows/winamp/WinampApplication.java rename to java/exec.mimis/src/main/java/mimis/application/cmd/windows/winamp/WinampApplication.java diff --git a/java/mimis/src/main/java/mimis/application/cmd/windows/wmp/WMPApplication.java b/java/exec.mimis/src/main/java/mimis/application/cmd/windows/wmp/WMPApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/cmd/windows/wmp/WMPApplication.java rename to java/exec.mimis/src/main/java/mimis/application/cmd/windows/wmp/WMPApplication.java diff --git a/java/mimis/src/main/java/mimis/application/itunes/iTunesApplication.java b/java/exec.mimis/src/main/java/mimis/application/itunes/iTunesApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/itunes/iTunesApplication.java rename to java/exec.mimis/src/main/java/mimis/application/itunes/iTunesApplication.java diff --git a/java/mimis/src/main/java/mimis/application/lirc/LircApplication.java b/java/exec.mimis/src/main/java/mimis/application/lirc/LircApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/lirc/LircApplication.java rename to java/exec.mimis/src/main/java/mimis/application/lirc/LircApplication.java diff --git a/java/mimis/src/main/java/mimis/application/lirc/ipod/iPodApplication.java b/java/exec.mimis/src/main/java/mimis/application/lirc/ipod/iPodApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/lirc/ipod/iPodApplication.java rename to java/exec.mimis/src/main/java/mimis/application/lirc/ipod/iPodApplication.java diff --git a/java/mimis/src/main/java/mimis/application/mpc/MPCApplication.java b/java/exec.mimis/src/main/java/mimis/application/mpc/MPCApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/mpc/MPCApplication.java rename to java/exec.mimis/src/main/java/mimis/application/mpc/MPCApplication.java diff --git a/java/mimis/src/main/java/mimis/application/robot/RobotApplication.java b/java/exec.mimis/src/main/java/mimis/application/robot/RobotApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/robot/RobotApplication.java rename to java/exec.mimis/src/main/java/mimis/application/robot/RobotApplication.java diff --git a/java/mimis/src/main/java/mimis/application/vlc/VLCApplication.java b/java/exec.mimis/src/main/java/mimis/application/vlc/VLCApplication.java similarity index 100% rename from java/mimis/src/main/java/mimis/application/vlc/VLCApplication.java rename to java/exec.mimis/src/main/java/mimis/application/vlc/VLCApplication.java diff --git a/java/mimis/src/main/java/mimis/device/Device.java b/java/exec.mimis/src/main/java/mimis/device/Device.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/Device.java rename to java/exec.mimis/src/main/java/mimis/device/Device.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/DirectionButton.java b/java/exec.mimis/src/main/java/mimis/device/javainput/DirectionButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/DirectionButton.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/DirectionButton.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/JXInputTestDialog.java b/java/exec.mimis/src/main/java/mimis/device/javainput/JXInputTestDialog.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/JXInputTestDialog.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/JXInputTestDialog.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/JavaInputDevice.java b/java/exec.mimis/src/main/java/mimis/device/javainput/JavaInputDevice.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/JavaInputDevice.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/JavaInputDevice.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/JavaInputListener.java b/java/exec.mimis/src/main/java/mimis/device/javainput/JavaInputListener.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/JavaInputListener.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/JavaInputListener.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DButton.java b/java/exec.mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DButton.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DButton.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DDevice.java b/java/exec.mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DDevice.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DDevice.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DDevice.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DTaskMapCycle.java b/java/exec.mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DTaskMapCycle.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DTaskMapCycle.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/extreme3d/Extreme3DTaskMapCycle.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadButton.java b/java/exec.mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadButton.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadButton.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadDevice.java b/java/exec.mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadDevice.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadDevice.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadDevice.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadTaskMapCycle.java b/java/exec.mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadTaskMapCycle.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadTaskMapCycle.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/rumblepad/RumblepadTaskMapCycle.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360Button.java b/java/exec.mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360Button.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360Button.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360Button.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360Device.java b/java/exec.mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360Device.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360Device.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360Device.java diff --git a/java/mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360TaskMapCycle.java b/java/exec.mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360TaskMapCycle.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360TaskMapCycle.java rename to java/exec.mimis/src/main/java/mimis/device/javainput/xbox360/Xbox360TaskMapCycle.java diff --git a/java/mimis/src/main/java/mimis/device/jintellitype/CommandButton.java b/java/exec.mimis/src/main/java/mimis/device/jintellitype/CommandButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/jintellitype/CommandButton.java rename to java/exec.mimis/src/main/java/mimis/device/jintellitype/CommandButton.java diff --git a/java/mimis/src/main/java/mimis/device/jintellitype/Hotkey.java b/java/exec.mimis/src/main/java/mimis/device/jintellitype/Hotkey.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/jintellitype/Hotkey.java rename to java/exec.mimis/src/main/java/mimis/device/jintellitype/Hotkey.java diff --git a/java/mimis/src/main/java/mimis/device/jintellitype/JIntellitypeDevice.java b/java/exec.mimis/src/main/java/mimis/device/jintellitype/JIntellitypeDevice.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/jintellitype/JIntellitypeDevice.java rename to java/exec.mimis/src/main/java/mimis/device/jintellitype/JIntellitypeDevice.java diff --git a/java/mimis/src/main/java/mimis/device/jintellitype/JIntellitypeTaskMapCycle.java b/java/exec.mimis/src/main/java/mimis/device/jintellitype/JIntellitypeTaskMapCycle.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/jintellitype/JIntellitypeTaskMapCycle.java rename to java/exec.mimis/src/main/java/mimis/device/jintellitype/JIntellitypeTaskMapCycle.java diff --git a/java/mimis/src/main/java/mimis/device/jintellitype/Modifier.java b/java/exec.mimis/src/main/java/mimis/device/jintellitype/Modifier.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/jintellitype/Modifier.java rename to java/exec.mimis/src/main/java/mimis/device/jintellitype/Modifier.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/LircButton.java b/java/exec.mimis/src/main/java/mimis/device/lirc/LircButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/LircButton.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/LircButton.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/LircButtonListener.java b/java/exec.mimis/src/main/java/mimis/device/lirc/LircButtonListener.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/LircButtonListener.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/LircButtonListener.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/LircDevice.java b/java/exec.mimis/src/main/java/mimis/device/lirc/LircDevice.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/LircDevice.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/LircDevice.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/LircService.java b/java/exec.mimis/src/main/java/mimis/device/lirc/LircService.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/LircService.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/LircService.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/LircTaskMapCycle.java b/java/exec.mimis/src/main/java/mimis/device/lirc/LircTaskMapCycle.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/LircTaskMapCycle.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/LircTaskMapCycle.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/remote/DenonRC176Button.java b/java/exec.mimis/src/main/java/mimis/device/lirc/remote/DenonRC176Button.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/remote/DenonRC176Button.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/remote/DenonRC176Button.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/remote/DenonRC176EventMap.java b/java/exec.mimis/src/main/java/mimis/device/lirc/remote/DenonRC176EventMap.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/remote/DenonRC176EventMap.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/remote/DenonRC176EventMap.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/remote/PhiliphsRCLE011Button.java b/java/exec.mimis/src/main/java/mimis/device/lirc/remote/PhiliphsRCLE011Button.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/remote/PhiliphsRCLE011Button.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/remote/PhiliphsRCLE011Button.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/remote/PhiliphsRCLE011EventMap.java b/java/exec.mimis/src/main/java/mimis/device/lirc/remote/PhiliphsRCLE011EventMap.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/remote/PhiliphsRCLE011EventMap.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/remote/PhiliphsRCLE011EventMap.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/remote/SamsungBN5901015AButton.java b/java/exec.mimis/src/main/java/mimis/device/lirc/remote/SamsungBN5901015AButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/remote/SamsungBN5901015AButton.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/remote/SamsungBN5901015AButton.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/remote/SamsungBN5901015AEventMap.java b/java/exec.mimis/src/main/java/mimis/device/lirc/remote/SamsungBN5901015AEventMap.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/remote/SamsungBN5901015AEventMap.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/remote/SamsungBN5901015AEventMap.java diff --git a/java/mimis/src/main/java/mimis/device/lirc/remote/WC02IPOButton.java b/java/exec.mimis/src/main/java/mimis/device/lirc/remote/WC02IPOButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/lirc/remote/WC02IPOButton.java rename to java/exec.mimis/src/main/java/mimis/device/lirc/remote/WC02IPOButton.java diff --git a/java/mimis/src/main/java/mimis/device/network/NetworkDevice.java b/java/exec.mimis/src/main/java/mimis/device/network/NetworkDevice.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/network/NetworkDevice.java rename to java/exec.mimis/src/main/java/mimis/device/network/NetworkDevice.java diff --git a/java/mimis/src/main/java/mimis/device/panel/Panel.java b/java/exec.mimis/src/main/java/mimis/device/panel/Panel.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/panel/Panel.java rename to java/exec.mimis/src/main/java/mimis/device/panel/Panel.java diff --git a/java/mimis/src/main/java/mimis/device/panel/PanelButton.java b/java/exec.mimis/src/main/java/mimis/device/panel/PanelButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/panel/PanelButton.java rename to java/exec.mimis/src/main/java/mimis/device/panel/PanelButton.java diff --git a/java/mimis/src/main/java/mimis/device/panel/PanelDevice.java b/java/exec.mimis/src/main/java/mimis/device/panel/PanelDevice.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/panel/PanelDevice.java rename to java/exec.mimis/src/main/java/mimis/device/panel/PanelDevice.java diff --git a/java/mimis/src/main/java/mimis/device/panel/PanelTaskMapCycle.java b/java/exec.mimis/src/main/java/mimis/device/panel/PanelTaskMapCycle.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/panel/PanelTaskMapCycle.java rename to java/exec.mimis/src/main/java/mimis/device/panel/PanelTaskMapCycle.java diff --git a/java/mimis/src/main/java/mimis/device/wiimote/WiimoteButton.java b/java/exec.mimis/src/main/java/mimis/device/wiimote/WiimoteButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/wiimote/WiimoteButton.java rename to java/exec.mimis/src/main/java/mimis/device/wiimote/WiimoteButton.java diff --git a/java/mimis/src/main/java/mimis/device/wiimote/WiimoteDevice.java b/java/exec.mimis/src/main/java/mimis/device/wiimote/WiimoteDevice.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/wiimote/WiimoteDevice.java rename to java/exec.mimis/src/main/java/mimis/device/wiimote/WiimoteDevice.java diff --git a/java/mimis/src/main/java/mimis/device/wiimote/WiimoteDiscovery.java b/java/exec.mimis/src/main/java/mimis/device/wiimote/WiimoteDiscovery.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/wiimote/WiimoteDiscovery.java rename to java/exec.mimis/src/main/java/mimis/device/wiimote/WiimoteDiscovery.java diff --git a/java/mimis/src/main/java/mimis/device/wiimote/WiimoteService.java b/java/exec.mimis/src/main/java/mimis/device/wiimote/WiimoteService.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/wiimote/WiimoteService.java rename to java/exec.mimis/src/main/java/mimis/device/wiimote/WiimoteService.java diff --git a/java/mimis/src/main/java/mimis/device/wiimote/WiimoteTaskMapCycle.java b/java/exec.mimis/src/main/java/mimis/device/wiimote/WiimoteTaskMapCycle.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/wiimote/WiimoteTaskMapCycle.java rename to java/exec.mimis/src/main/java/mimis/device/wiimote/WiimoteTaskMapCycle.java diff --git a/java/mimis/src/main/java/mimis/device/wiimote/gesture/GestureDevice.java b/java/exec.mimis/src/main/java/mimis/device/wiimote/gesture/GestureDevice.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/wiimote/gesture/GestureDevice.java rename to java/exec.mimis/src/main/java/mimis/device/wiimote/gesture/GestureDevice.java diff --git a/java/mimis/src/main/java/mimis/device/wiimote/motion/MotionData.java b/java/exec.mimis/src/main/java/mimis/device/wiimote/motion/MotionData.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/wiimote/motion/MotionData.java rename to java/exec.mimis/src/main/java/mimis/device/wiimote/motion/MotionData.java diff --git a/java/mimis/src/main/java/mimis/device/wiimote/motion/MotionDevice.java b/java/exec.mimis/src/main/java/mimis/device/wiimote/motion/MotionDevice.java similarity index 100% rename from java/mimis/src/main/java/mimis/device/wiimote/motion/MotionDevice.java rename to java/exec.mimis/src/main/java/mimis/device/wiimote/motion/MotionDevice.java diff --git a/java/mimis/src/main/java/mimis/exception/ApplicationException.java b/java/exec.mimis/src/main/java/mimis/exception/ApplicationException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/ApplicationException.java rename to java/exec.mimis/src/main/java/mimis/exception/ApplicationException.java diff --git a/java/mimis/src/main/java/mimis/exception/ButtonException.java b/java/exec.mimis/src/main/java/mimis/exception/ButtonException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/ButtonException.java rename to java/exec.mimis/src/main/java/mimis/exception/ButtonException.java diff --git a/java/mimis/src/main/java/mimis/exception/DeviceException.java b/java/exec.mimis/src/main/java/mimis/exception/DeviceException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/DeviceException.java rename to java/exec.mimis/src/main/java/mimis/exception/DeviceException.java diff --git a/java/mimis/src/main/java/mimis/exception/EventException.java b/java/exec.mimis/src/main/java/mimis/exception/EventException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/EventException.java rename to java/exec.mimis/src/main/java/mimis/exception/EventException.java diff --git a/java/mimis/src/main/java/mimis/exception/ExitException.java b/java/exec.mimis/src/main/java/mimis/exception/ExitException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/ExitException.java rename to java/exec.mimis/src/main/java/mimis/exception/ExitException.java diff --git a/java/mimis/src/main/java/mimis/exception/HandlerException.java b/java/exec.mimis/src/main/java/mimis/exception/HandlerException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/HandlerException.java rename to java/exec.mimis/src/main/java/mimis/exception/HandlerException.java diff --git a/java/mimis/src/main/java/mimis/exception/InitialiseException.java b/java/exec.mimis/src/main/java/mimis/exception/InitialiseException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/InitialiseException.java rename to java/exec.mimis/src/main/java/mimis/exception/InitialiseException.java diff --git a/java/mimis/src/main/java/mimis/exception/MacroException.java b/java/exec.mimis/src/main/java/mimis/exception/MacroException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/MacroException.java rename to java/exec.mimis/src/main/java/mimis/exception/MacroException.java diff --git a/java/mimis/src/main/java/mimis/exception/TaskException.java b/java/exec.mimis/src/main/java/mimis/exception/TaskException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/TaskException.java rename to java/exec.mimis/src/main/java/mimis/exception/TaskException.java diff --git a/java/mimis/src/main/java/mimis/exception/application/ApplicationExitException.java b/java/exec.mimis/src/main/java/mimis/exception/application/ApplicationExitException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/application/ApplicationExitException.java rename to java/exec.mimis/src/main/java/mimis/exception/application/ApplicationExitException.java diff --git a/java/mimis/src/main/java/mimis/exception/application/ApplicationInitialiseException.java b/java/exec.mimis/src/main/java/mimis/exception/application/ApplicationInitialiseException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/application/ApplicationInitialiseException.java rename to java/exec.mimis/src/main/java/mimis/exception/application/ApplicationInitialiseException.java diff --git a/java/mimis/src/main/java/mimis/exception/application/windows/WindowsApplicationException.java b/java/exec.mimis/src/main/java/mimis/exception/application/windows/WindowsApplicationException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/application/windows/WindowsApplicationException.java rename to java/exec.mimis/src/main/java/mimis/exception/application/windows/WindowsApplicationException.java diff --git a/java/mimis/src/main/java/mimis/exception/button/UnknownButtonException.java b/java/exec.mimis/src/main/java/mimis/exception/button/UnknownButtonException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/button/UnknownButtonException.java rename to java/exec.mimis/src/main/java/mimis/exception/button/UnknownButtonException.java diff --git a/java/mimis/src/main/java/mimis/exception/button/UnknownDirectionException.java b/java/exec.mimis/src/main/java/mimis/exception/button/UnknownDirectionException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/button/UnknownDirectionException.java rename to java/exec.mimis/src/main/java/mimis/exception/button/UnknownDirectionException.java diff --git a/java/mimis/src/main/java/mimis/exception/device/DeviceExitException.java b/java/exec.mimis/src/main/java/mimis/exception/device/DeviceExitException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/device/DeviceExitException.java rename to java/exec.mimis/src/main/java/mimis/exception/device/DeviceExitException.java diff --git a/java/mimis/src/main/java/mimis/exception/device/DeviceInitialiseException.java b/java/exec.mimis/src/main/java/mimis/exception/device/DeviceInitialiseException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/device/DeviceInitialiseException.java rename to java/exec.mimis/src/main/java/mimis/exception/device/DeviceInitialiseException.java diff --git a/java/mimis/src/main/java/mimis/exception/device/DeviceNotFoundException.java b/java/exec.mimis/src/main/java/mimis/exception/device/DeviceNotFoundException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/device/DeviceNotFoundException.java rename to java/exec.mimis/src/main/java/mimis/exception/device/DeviceNotFoundException.java diff --git a/java/mimis/src/main/java/mimis/exception/device/JavaInputDeviceException.java b/java/exec.mimis/src/main/java/mimis/exception/device/JavaInputDeviceException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/device/JavaInputDeviceException.java rename to java/exec.mimis/src/main/java/mimis/exception/device/JavaInputDeviceException.java diff --git a/java/mimis/src/main/java/mimis/exception/device/javainput/JavaInputDeviceSpecificException.java b/java/exec.mimis/src/main/java/mimis/exception/device/javainput/JavaInputDeviceSpecificException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/device/javainput/JavaInputDeviceSpecificException.java rename to java/exec.mimis/src/main/java/mimis/exception/device/javainput/JavaInputDeviceSpecificException.java diff --git a/java/mimis/src/main/java/mimis/exception/event/SpreaderException.java b/java/exec.mimis/src/main/java/mimis/exception/event/SpreaderException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/event/SpreaderException.java rename to java/exec.mimis/src/main/java/mimis/exception/event/SpreaderException.java diff --git a/java/mimis/src/main/java/mimis/exception/event/router/GlobalRouterException.java b/java/exec.mimis/src/main/java/mimis/exception/event/router/GlobalRouterException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/event/router/GlobalRouterException.java rename to java/exec.mimis/src/main/java/mimis/exception/event/router/GlobalRouterException.java diff --git a/java/mimis/src/main/java/mimis/exception/macro/StateOrderException.java b/java/exec.mimis/src/main/java/mimis/exception/macro/StateOrderException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/macro/StateOrderException.java rename to java/exec.mimis/src/main/java/mimis/exception/macro/StateOrderException.java diff --git a/java/mimis/src/main/java/mimis/exception/task/ActionException.java b/java/exec.mimis/src/main/java/mimis/exception/task/ActionException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/task/ActionException.java rename to java/exec.mimis/src/main/java/mimis/exception/task/ActionException.java diff --git a/java/mimis/src/main/java/mimis/exception/task/TaskNotSupportedException.java b/java/exec.mimis/src/main/java/mimis/exception/task/TaskNotSupportedException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/task/TaskNotSupportedException.java rename to java/exec.mimis/src/main/java/mimis/exception/task/TaskNotSupportedException.java diff --git a/java/mimis/src/main/java/mimis/exception/task/action/ActionDeserializeException.java b/java/exec.mimis/src/main/java/mimis/exception/task/action/ActionDeserializeException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/task/action/ActionDeserializeException.java rename to java/exec.mimis/src/main/java/mimis/exception/task/action/ActionDeserializeException.java diff --git a/java/mimis/src/main/java/mimis/exception/util/SendCommandException.java b/java/exec.mimis/src/main/java/mimis/exception/util/SendCommandException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/util/SendCommandException.java rename to java/exec.mimis/src/main/java/mimis/exception/util/SendCommandException.java diff --git a/java/mimis/src/main/java/mimis/exception/util/SendKeyException.java b/java/exec.mimis/src/main/java/mimis/exception/util/SendKeyException.java similarity index 100% rename from java/mimis/src/main/java/mimis/exception/util/SendKeyException.java rename to java/exec.mimis/src/main/java/mimis/exception/util/SendKeyException.java diff --git a/java/mimis/src/main/java/mimis/input/Button.java b/java/exec.mimis/src/main/java/mimis/input/Button.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/Button.java rename to java/exec.mimis/src/main/java/mimis/input/Button.java diff --git a/java/mimis/src/main/java/mimis/input/Feedback.java b/java/exec.mimis/src/main/java/mimis/input/Feedback.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/Feedback.java rename to java/exec.mimis/src/main/java/mimis/input/Feedback.java diff --git a/java/mimis/src/main/java/mimis/input/Input.java b/java/exec.mimis/src/main/java/mimis/input/Input.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/Input.java rename to java/exec.mimis/src/main/java/mimis/input/Input.java diff --git a/java/mimis/src/main/java/mimis/input/Task.java b/java/exec.mimis/src/main/java/mimis/input/Task.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/Task.java rename to java/exec.mimis/src/main/java/mimis/input/Task.java diff --git a/java/mimis/src/main/java/mimis/input/button/ColorButton.java b/java/exec.mimis/src/main/java/mimis/input/button/ColorButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/button/ColorButton.java rename to java/exec.mimis/src/main/java/mimis/input/button/ColorButton.java diff --git a/java/mimis/src/main/java/mimis/input/button/NumberButton.java b/java/exec.mimis/src/main/java/mimis/input/button/NumberButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/button/NumberButton.java rename to java/exec.mimis/src/main/java/mimis/input/button/NumberButton.java diff --git a/java/mimis/src/main/java/mimis/input/state/Hold.java b/java/exec.mimis/src/main/java/mimis/input/state/Hold.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/state/Hold.java rename to java/exec.mimis/src/main/java/mimis/input/state/Hold.java diff --git a/java/mimis/src/main/java/mimis/input/state/Press.java b/java/exec.mimis/src/main/java/mimis/input/state/Press.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/state/Press.java rename to java/exec.mimis/src/main/java/mimis/input/state/Press.java diff --git a/java/mimis/src/main/java/mimis/input/state/Release.java b/java/exec.mimis/src/main/java/mimis/input/state/Release.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/state/Release.java rename to java/exec.mimis/src/main/java/mimis/input/state/Release.java diff --git a/java/mimis/src/main/java/mimis/input/state/State.java b/java/exec.mimis/src/main/java/mimis/input/state/State.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/state/State.java rename to java/exec.mimis/src/main/java/mimis/input/state/State.java diff --git a/java/mimis/src/main/java/mimis/input/state/sequence/Macro.java b/java/exec.mimis/src/main/java/mimis/input/state/sequence/Macro.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/state/sequence/Macro.java rename to java/exec.mimis/src/main/java/mimis/input/state/sequence/Macro.java diff --git a/java/mimis/src/main/java/mimis/input/state/sequence/Sequence.java b/java/exec.mimis/src/main/java/mimis/input/state/sequence/Sequence.java similarity index 100% rename from java/mimis/src/main/java/mimis/input/state/sequence/Sequence.java rename to java/exec.mimis/src/main/java/mimis/input/state/sequence/Sequence.java diff --git a/java/mimis/src/main/java/mimis/manager/ButtonManager.java b/java/exec.mimis/src/main/java/mimis/manager/ButtonManager.java similarity index 100% rename from java/mimis/src/main/java/mimis/manager/ButtonManager.java rename to java/exec.mimis/src/main/java/mimis/manager/ButtonManager.java diff --git a/java/mimis/src/main/java/mimis/manager/CurrentButtonManager.java b/java/exec.mimis/src/main/java/mimis/manager/CurrentButtonManager.java similarity index 100% rename from java/mimis/src/main/java/mimis/manager/CurrentButtonManager.java rename to java/exec.mimis/src/main/java/mimis/manager/CurrentButtonManager.java diff --git a/java/mimis/src/main/java/mimis/manager/Manager.java b/java/exec.mimis/src/main/java/mimis/manager/Manager.java similarity index 100% rename from java/mimis/src/main/java/mimis/manager/Manager.java rename to java/exec.mimis/src/main/java/mimis/manager/Manager.java diff --git a/java/mimis/src/main/java/mimis/manager/Titled.java b/java/exec.mimis/src/main/java/mimis/manager/Titled.java similarity index 100% rename from java/mimis/src/main/java/mimis/manager/Titled.java rename to java/exec.mimis/src/main/java/mimis/manager/Titled.java diff --git a/java/mimis/src/main/java/mimis/manager/WorkerButton.java b/java/exec.mimis/src/main/java/mimis/manager/WorkerButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/manager/WorkerButton.java rename to java/exec.mimis/src/main/java/mimis/manager/WorkerButton.java diff --git a/java/mimis/src/main/java/mimis/parser/Parser.java b/java/exec.mimis/src/main/java/mimis/parser/Parser.java similarity index 100% rename from java/mimis/src/main/java/mimis/parser/Parser.java rename to java/exec.mimis/src/main/java/mimis/parser/Parser.java diff --git a/java/mimis/src/main/java/mimis/parser/ParserInput.java b/java/exec.mimis/src/main/java/mimis/parser/ParserInput.java similarity index 100% rename from java/mimis/src/main/java/mimis/parser/ParserInput.java rename to java/exec.mimis/src/main/java/mimis/parser/ParserInput.java diff --git a/java/mimis/src/main/java/mimis/router/GlobalRouter.java b/java/exec.mimis/src/main/java/mimis/router/GlobalRouter.java similarity index 100% rename from java/mimis/src/main/java/mimis/router/GlobalRouter.java rename to java/exec.mimis/src/main/java/mimis/router/GlobalRouter.java diff --git a/java/mimis/src/main/java/mimis/router/Router.java b/java/exec.mimis/src/main/java/mimis/router/Router.java similarity index 100% rename from java/mimis/src/main/java/mimis/router/Router.java rename to java/exec.mimis/src/main/java/mimis/router/Router.java diff --git a/java/mimis/src/main/java/mimis/state/Active.java b/java/exec.mimis/src/main/java/mimis/state/Active.java similarity index 100% rename from java/mimis/src/main/java/mimis/state/Active.java rename to java/exec.mimis/src/main/java/mimis/state/Active.java diff --git a/java/mimis/src/main/java/mimis/state/TaskMap.java b/java/exec.mimis/src/main/java/mimis/state/TaskMap.java similarity index 100% rename from java/mimis/src/main/java/mimis/state/TaskMap.java rename to java/exec.mimis/src/main/java/mimis/state/TaskMap.java diff --git a/java/mimis/src/main/java/mimis/state/TaskMapCycle.java b/java/exec.mimis/src/main/java/mimis/state/TaskMapCycle.java similarity index 100% rename from java/mimis/src/main/java/mimis/state/TaskMapCycle.java rename to java/exec.mimis/src/main/java/mimis/state/TaskMapCycle.java diff --git a/java/mimis/src/main/java/mimis/util/Multiplexer.java b/java/exec.mimis/src/main/java/mimis/util/Multiplexer.java similarity index 100% rename from java/mimis/src/main/java/mimis/util/Multiplexer.java rename to java/exec.mimis/src/main/java/mimis/util/Multiplexer.java diff --git a/java/mimis/src/main/java/mimis/util/Reader.java b/java/exec.mimis/src/main/java/mimis/util/Reader.java similarity index 100% rename from java/mimis/src/main/java/mimis/util/Reader.java rename to java/exec.mimis/src/main/java/mimis/util/Reader.java diff --git a/java/mimis/src/main/java/mimis/util/Swing.java b/java/exec.mimis/src/main/java/mimis/util/Swing.java similarity index 100% rename from java/mimis/src/main/java/mimis/util/Swing.java rename to java/exec.mimis/src/main/java/mimis/util/Swing.java diff --git a/java/mimis/src/main/java/mimis/util/Type.java b/java/exec.mimis/src/main/java/mimis/util/Type.java similarity index 100% rename from java/mimis/src/main/java/mimis/util/Type.java rename to java/exec.mimis/src/main/java/mimis/util/Type.java diff --git a/java/mimis/src/main/java/mimis/util/multiplexer/SignalListener.java b/java/exec.mimis/src/main/java/mimis/util/multiplexer/SignalListener.java similarity index 100% rename from java/mimis/src/main/java/mimis/util/multiplexer/SignalListener.java rename to java/exec.mimis/src/main/java/mimis/util/multiplexer/SignalListener.java diff --git a/java/mimis/src/main/java/mimis/util/swing/CycleButton.java b/java/exec.mimis/src/main/java/mimis/util/swing/CycleButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/util/swing/CycleButton.java rename to java/exec.mimis/src/main/java/mimis/util/swing/CycleButton.java diff --git a/java/mimis/src/main/java/mimis/util/swing/Dialog.java b/java/exec.mimis/src/main/java/mimis/util/swing/Dialog.java similarity index 100% rename from java/mimis/src/main/java/mimis/util/swing/Dialog.java rename to java/exec.mimis/src/main/java/mimis/util/swing/Dialog.java diff --git a/java/mimis/src/main/java/mimis/util/swing/HoldButton.java b/java/exec.mimis/src/main/java/mimis/util/swing/HoldButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/util/swing/HoldButton.java rename to java/exec.mimis/src/main/java/mimis/util/swing/HoldButton.java diff --git a/java/mimis/src/main/java/mimis/util/swing/HoldButtonListener.java b/java/exec.mimis/src/main/java/mimis/util/swing/HoldButtonListener.java similarity index 100% rename from java/mimis/src/main/java/mimis/util/swing/HoldButtonListener.java rename to java/exec.mimis/src/main/java/mimis/util/swing/HoldButtonListener.java diff --git a/java/mimis/src/main/java/mimis/util/swing/ToggleButton.java b/java/exec.mimis/src/main/java/mimis/util/swing/ToggleButton.java similarity index 100% rename from java/mimis/src/main/java/mimis/util/swing/ToggleButton.java rename to java/exec.mimis/src/main/java/mimis/util/swing/ToggleButton.java diff --git a/java/mimis/src/main/java/mimis/value/Action.java b/java/exec.mimis/src/main/java/mimis/value/Action.java similarity index 100% rename from java/mimis/src/main/java/mimis/value/Action.java rename to java/exec.mimis/src/main/java/mimis/value/Action.java diff --git a/java/mimis/src/main/java/mimis/value/Amount.java b/java/exec.mimis/src/main/java/mimis/value/Amount.java similarity index 100% rename from java/mimis/src/main/java/mimis/value/Amount.java rename to java/exec.mimis/src/main/java/mimis/value/Amount.java diff --git a/java/mimis/src/main/java/mimis/value/Command.java b/java/exec.mimis/src/main/java/mimis/value/Command.java similarity index 100% rename from java/mimis/src/main/java/mimis/value/Command.java rename to java/exec.mimis/src/main/java/mimis/value/Command.java diff --git a/java/mimis/src/main/java/mimis/value/Key.java b/java/exec.mimis/src/main/java/mimis/value/Key.java similarity index 100% rename from java/mimis/src/main/java/mimis/value/Key.java rename to java/exec.mimis/src/main/java/mimis/value/Key.java diff --git a/java/mimis/src/main/java/mimis/value/Signal.java b/java/exec.mimis/src/main/java/mimis/value/Signal.java similarity index 100% rename from java/mimis/src/main/java/mimis/value/Signal.java rename to java/exec.mimis/src/main/java/mimis/value/Signal.java diff --git a/java/mimis/src/main/java/mimis/value/Target.java b/java/exec.mimis/src/main/java/mimis/value/Target.java similarity index 100% rename from java/mimis/src/main/java/mimis/value/Target.java rename to java/exec.mimis/src/main/java/mimis/value/Target.java diff --git a/java/mimis/src/main/java/mimis/value/Type.java b/java/exec.mimis/src/main/java/mimis/value/Type.java similarity index 100% rename from java/mimis/src/main/java/mimis/value/Type.java rename to java/exec.mimis/src/main/java/mimis/value/Type.java diff --git a/java/mimis/src/main/resources/M.ico b/java/exec.mimis/src/main/resources/M.ico similarity index 100% rename from java/mimis/src/main/resources/M.ico rename to java/exec.mimis/src/main/resources/M.ico diff --git a/java/mimis/src/main/resources/M.png b/java/exec.mimis/src/main/resources/M.png similarity index 100% rename from java/mimis/src/main/resources/M.png rename to java/exec.mimis/src/main/resources/M.png diff --git a/java/exec.mimis/src/main/resources/META-INF/services/mimis.application.Application b/java/exec.mimis/src/main/resources/META-INF/services/mimis.application.Application new file mode 100644 index 0000000..d25b989 --- /dev/null +++ b/java/exec.mimis/src/main/resources/META-INF/services/mimis.application.Application @@ -0,0 +1 @@ +mimis.application.itunes.iTunesApplication diff --git a/java/mimis/src/main/resources/META-INF/services/mimis.device.Device b/java/exec.mimis/src/main/resources/META-INF/services/mimis.device.Device similarity index 100% rename from java/mimis/src/main/resources/META-INF/services/mimis.device.Device rename to java/exec.mimis/src/main/resources/META-INF/services/mimis.device.Device diff --git a/java/mimis/src/main/resources/Mimis.bmp b/java/exec.mimis/src/main/resources/Mimis.bmp similarity index 100% rename from java/mimis/src/main/resources/Mimis.bmp rename to java/exec.mimis/src/main/resources/Mimis.bmp diff --git a/java/mimis/src/main/resources/Mimis.png b/java/exec.mimis/src/main/resources/Mimis.png similarity index 100% rename from java/mimis/src/main/resources/Mimis.png rename to java/exec.mimis/src/main/resources/Mimis.png diff --git a/java/mimis/src/main/resources/commons-logging.properties b/java/exec.mimis/src/main/resources/commons-logging.properties similarity index 100% rename from java/mimis/src/main/resources/commons-logging.properties rename to java/exec.mimis/src/main/resources/commons-logging.properties diff --git a/java/mimis/src/main/resources/icons/camera.png b/java/exec.mimis/src/main/resources/icons/camera.png similarity index 100% rename from java/mimis/src/main/resources/icons/camera.png rename to java/exec.mimis/src/main/resources/icons/camera.png diff --git a/java/mimis/src/main/resources/icons/comment.png b/java/exec.mimis/src/main/resources/icons/comment.png similarity index 100% rename from java/mimis/src/main/resources/icons/comment.png rename to java/exec.mimis/src/main/resources/icons/comment.png diff --git a/java/mimis/src/main/resources/icons/connect.png b/java/exec.mimis/src/main/resources/icons/connect.png similarity index 100% rename from java/mimis/src/main/resources/icons/connect.png rename to java/exec.mimis/src/main/resources/icons/connect.png diff --git a/java/mimis/src/main/resources/icons/control_eject_blue.png b/java/exec.mimis/src/main/resources/icons/control_eject_blue.png similarity index 100% rename from java/mimis/src/main/resources/icons/control_eject_blue.png rename to java/exec.mimis/src/main/resources/icons/control_eject_blue.png diff --git a/java/mimis/src/main/resources/icons/control_end_blue.png b/java/exec.mimis/src/main/resources/icons/control_end_blue.png similarity index 100% rename from java/mimis/src/main/resources/icons/control_end_blue.png rename to java/exec.mimis/src/main/resources/icons/control_end_blue.png diff --git a/java/mimis/src/main/resources/icons/control_fastforward_blue.png b/java/exec.mimis/src/main/resources/icons/control_fastforward_blue.png similarity index 100% rename from java/mimis/src/main/resources/icons/control_fastforward_blue.png rename to java/exec.mimis/src/main/resources/icons/control_fastforward_blue.png diff --git a/java/mimis/src/main/resources/icons/control_pause_blue.png b/java/exec.mimis/src/main/resources/icons/control_pause_blue.png similarity index 100% rename from java/mimis/src/main/resources/icons/control_pause_blue.png rename to java/exec.mimis/src/main/resources/icons/control_pause_blue.png diff --git a/java/mimis/src/main/resources/icons/control_play_blue.png b/java/exec.mimis/src/main/resources/icons/control_play_blue.png similarity index 100% rename from java/mimis/src/main/resources/icons/control_play_blue.png rename to java/exec.mimis/src/main/resources/icons/control_play_blue.png diff --git a/java/mimis/src/main/resources/icons/control_rewind_blue.png b/java/exec.mimis/src/main/resources/icons/control_rewind_blue.png similarity index 100% rename from java/mimis/src/main/resources/icons/control_rewind_blue.png rename to java/exec.mimis/src/main/resources/icons/control_rewind_blue.png diff --git a/java/mimis/src/main/resources/icons/control_start_blue.png b/java/exec.mimis/src/main/resources/icons/control_start_blue.png similarity index 100% rename from java/mimis/src/main/resources/icons/control_start_blue.png rename to java/exec.mimis/src/main/resources/icons/control_start_blue.png diff --git a/java/mimis/src/main/resources/icons/control_stop_blue.png b/java/exec.mimis/src/main/resources/icons/control_stop_blue.png similarity index 100% rename from java/mimis/src/main/resources/icons/control_stop_blue.png rename to java/exec.mimis/src/main/resources/icons/control_stop_blue.png diff --git a/java/mimis/src/main/resources/icons/down.png b/java/exec.mimis/src/main/resources/icons/down.png similarity index 100% rename from java/mimis/src/main/resources/icons/down.png rename to java/exec.mimis/src/main/resources/icons/down.png diff --git a/java/mimis/src/main/resources/icons/forward.png b/java/exec.mimis/src/main/resources/icons/forward.png similarity index 100% rename from java/mimis/src/main/resources/icons/forward.png rename to java/exec.mimis/src/main/resources/icons/forward.png diff --git a/java/mimis/src/main/resources/icons/image.png b/java/exec.mimis/src/main/resources/icons/image.png similarity index 100% rename from java/mimis/src/main/resources/icons/image.png rename to java/exec.mimis/src/main/resources/icons/image.png diff --git a/java/mimis/src/main/resources/icons/mute.png b/java/exec.mimis/src/main/resources/icons/mute.png similarity index 100% rename from java/mimis/src/main/resources/icons/mute.png rename to java/exec.mimis/src/main/resources/icons/mute.png diff --git a/java/mimis/src/main/resources/icons/next.png b/java/exec.mimis/src/main/resources/icons/next.png similarity index 100% rename from java/mimis/src/main/resources/icons/next.png rename to java/exec.mimis/src/main/resources/icons/next.png diff --git a/java/mimis/src/main/resources/icons/pause.png b/java/exec.mimis/src/main/resources/icons/pause.png similarity index 100% rename from java/mimis/src/main/resources/icons/pause.png rename to java/exec.mimis/src/main/resources/icons/pause.png diff --git a/java/mimis/src/main/resources/icons/play.png b/java/exec.mimis/src/main/resources/icons/play.png similarity index 100% rename from java/mimis/src/main/resources/icons/play.png rename to java/exec.mimis/src/main/resources/icons/play.png diff --git a/java/mimis/src/main/resources/icons/previous.png b/java/exec.mimis/src/main/resources/icons/previous.png similarity index 100% rename from java/mimis/src/main/resources/icons/previous.png rename to java/exec.mimis/src/main/resources/icons/previous.png diff --git a/java/mimis/src/main/resources/icons/repeat.png b/java/exec.mimis/src/main/resources/icons/repeat.png similarity index 100% rename from java/mimis/src/main/resources/icons/repeat.png rename to java/exec.mimis/src/main/resources/icons/repeat.png diff --git a/java/mimis/src/main/resources/icons/rewind.png b/java/exec.mimis/src/main/resources/icons/rewind.png similarity index 100% rename from java/mimis/src/main/resources/icons/rewind.png rename to java/exec.mimis/src/main/resources/icons/rewind.png diff --git a/java/mimis/src/main/resources/icons/shuffle.png b/java/exec.mimis/src/main/resources/icons/shuffle.png similarity index 100% rename from java/mimis/src/main/resources/icons/shuffle.png rename to java/exec.mimis/src/main/resources/icons/shuffle.png diff --git a/java/mimis/src/main/resources/icons/sound_mute.png b/java/exec.mimis/src/main/resources/icons/sound_mute.png similarity index 100% rename from java/mimis/src/main/resources/icons/sound_mute.png rename to java/exec.mimis/src/main/resources/icons/sound_mute.png diff --git a/java/mimis/src/main/resources/icons/stop.png b/java/exec.mimis/src/main/resources/icons/stop.png similarity index 100% rename from java/mimis/src/main/resources/icons/stop.png rename to java/exec.mimis/src/main/resources/icons/stop.png diff --git a/java/mimis/src/main/resources/icons/unmute.png b/java/exec.mimis/src/main/resources/icons/unmute.png similarity index 100% rename from java/mimis/src/main/resources/icons/unmute.png rename to java/exec.mimis/src/main/resources/icons/unmute.png diff --git a/java/mimis/src/main/resources/icons/up.png b/java/exec.mimis/src/main/resources/icons/up.png similarity index 100% rename from java/mimis/src/main/resources/icons/up.png rename to java/exec.mimis/src/main/resources/icons/up.png diff --git a/java/mimis/src/main/resources/icons/volumeDown.png b/java/exec.mimis/src/main/resources/icons/volumeDown.png similarity index 100% rename from java/mimis/src/main/resources/icons/volumeDown.png rename to java/exec.mimis/src/main/resources/icons/volumeDown.png diff --git a/java/mimis/src/main/resources/icons/volumeUp.png b/java/exec.mimis/src/main/resources/icons/volumeUp.png similarity index 100% rename from java/mimis/src/main/resources/icons/volumeUp.png rename to java/exec.mimis/src/main/resources/icons/volumeUp.png diff --git a/java/mimis/src/main/resources/log4j.properties b/java/exec.mimis/src/main/resources/log4j.properties similarity index 100% rename from java/mimis/src/main/resources/log4j.properties rename to java/exec.mimis/src/main/resources/log4j.properties diff --git a/java/sound/.gitignore b/java/exec.sound/.gitignore similarity index 100% rename from java/sound/.gitignore rename to java/exec.sound/.gitignore diff --git a/java/sound/build.gradle b/java/exec.sound/build.gradle similarity index 88% rename from java/sound/build.gradle rename to java/exec.sound/build.gradle index c758e85..8536a8e 100644 --- a/java/sound/build.gradle +++ b/java/exec.sound/build.gradle @@ -1,6 +1,4 @@ -dependencies { - compile project(':base') - +dependencies { compile 'commons-io:commons-io:2.+' compile 'commons-cli:commons-cli:1.+' compile 'commons-pool:commons-pool:1.+' diff --git a/java/sound/src/main/java/old/Converter.java b/java/exec.sound/src/main/java/old/Converter.java similarity index 97% rename from java/sound/src/main/java/old/Converter.java rename to java/exec.sound/src/main/java/old/Converter.java index fdbf3ee..f1548a0 100644 --- a/java/sound/src/main/java/old/Converter.java +++ b/java/exec.sound/src/main/java/old/Converter.java @@ -1,187 +1,187 @@ -package old; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import javazoom.jl.decoder.Bitstream; -import javazoom.jl.decoder.BitstreamException; -import sound.util.Utils; -import base.exception.worker.ActivateException; -import base.exception.worker.DeactivateException; -import base.work.Work; - -import com.Ostermiller.util.CircularByteBuffer; - -public class Converter extends Work { - public static final String COMMAND = "lame --mp3input --cbr %s - - --quiet"; - public static final int BYTES = 4096; // bytes - public static final int BUFFER = 30000; // milliseconds - public static final int BUFFERING = 1000; // milliseconds - - protected int targetRate; - protected int rate; - protected int buffer; - protected boolean convert; - - protected Process process; - protected InputStream sourceInputStream, processInputStream, inputStream; - protected OutputStream processOutputStream; - protected CircularByteBuffer circularByteBuffer; - protected BufferWorker bufferWorker; - - public Converter(InputStream inputStream) { - this(inputStream, -1); - } - - public Converter(InputStream inputStream, int targetRate) { - super(); - this.sourceInputStream = inputStream; - this.targetRate = targetRate; - bufferWorker = new BufferWorker(); - convert = false; - } - - public void exit() { - super.exit(); - bufferWorker.exit(); - } - - public synchronized void activate() throws ActivateException { - /* Read bitrate */ - BufferedInputStream bufferedInputStream = new BufferedInputStream(sourceInputStream); - Bitstream bitStream = new Bitstream(bufferedInputStream); - try { - rate = bitStream.readFrame().bitrate() / 1000; - buffer = BUFFER * rate / 8; - } catch (BitstreamException e) { - logger.error("", e); - throw new ActivateException(); - } - - /* Check for need to convert */ - if (targetRate < 0 || rate == targetRate) { - logger.debug("No conversion required"); - inputStream = sourceInputStream; - } else { - logger.debug("Converting from " + rate + "kbps to " + targetRate + "kbps"); - try { - String command = String.format(COMMAND, rate > targetRate ? "-B " + targetRate : "-F -b " + targetRate); - logger.debug("Starting process: " + command); - process = Runtime.getRuntime().exec(command); - processInputStream = process.getInputStream(); - processOutputStream = process.getOutputStream(); - - /* Buffer output */ - circularByteBuffer = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE); - inputStream = circularByteBuffer.getInputStream(); - bufferWorker.start(); - convert = true; - } catch (IOException e) { - logger.error("", e); - throw new ActivateException(); - } - } - super.activate(); - notifyAll(); - } - - public void deactivate() throws DeactivateException { - super.deactivate(); - try { - sourceInputStream.close(); - bufferWorker.stop(); - if (convert) { - circularByteBuffer.clear(); - convert = false; - } - inputStream.close(); - } catch (IOException e) { - logger.error("", e); - throw new DeactivateException(); - } - } - - public void work() { - if (!convert) { - try { - synchronized (this) { - wait(); - } - } catch (InterruptedException e) { - logger.error("", e); - } - return; - } - byte[] bytes = new byte[BYTES]; - int read = 0; - try { - logger.debug("Writing input to process"); - // Should be interrupted by stop()/exit() - while ((read = sourceInputStream.read(bytes)) > 0) { - /* Limit buffer size */ - while (inputStream.available() > buffer) { - int progress = (int) ((1 - (inputStream.available() - buffer) / (float) buffer) * 100); - logger.trace("Waiting for buffer to empty: " + progress + "%"); - sleep(BUFFERING); - } - processOutputStream.write(bytes, 0, read); - } - processOutputStream.close(); - logger.debug("Stopped writing input to process"); - process.waitFor(); - logger.debug("Process finished"); - } catch (IOException e) { - } catch (InterruptedException e) { - logger.error("", e); - } - stop(); - } - - public synchronized InputStream getInputStream() { - if (!active()) { - start(); - try { - wait(); - } catch (InterruptedException e) { - logger.error("", e); - } - } - return inputStream; - } - - public synchronized void setInputStream(InputStream inputStream) { - this.inputStream = inputStream; - } - - class BufferWorker extends Work { - public void work() { - byte[] bytes = new byte[BYTES]; - int read = 0; - try { - OutputStream bufferOutputStream = circularByteBuffer.getOutputStream(); - logger.debug("Start buffering process output"); - while ((read = processInputStream.read(bytes, 0, BYTES)) > 0) { - bufferOutputStream.write(bytes, 0, read); - } - logger.debug("Finished buffering process output"); - bufferOutputStream.close(); - } catch (IOException e) {} - stop(); - } - } - - public static void main(String[] args) { - Mp3 mp3 = new Mp3(new File("stream.mp3"), 128); - InputStream inputStream = mp3.getInputStream(); - - /* Play */ - //Utils.play(inputStream); - - /* Write to file */ - Utils.write(inputStream, new File("output.mp3")); - mp3.exit(); - } -} +package old; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import javazoom.jl.decoder.Bitstream; +import javazoom.jl.decoder.BitstreamException; +import sound.util.Utils; +import base.exception.worker.ActivateException; +import base.exception.worker.DeactivateException; +import base.work.Work; + +import com.Ostermiller.util.CircularByteBuffer; + +public class Converter extends Work { + public static final String COMMAND = "lame --mp3input --cbr %s - - --quiet"; + public static final int BYTES = 4096; // bytes + public static final int BUFFER = 30000; // milliseconds + public static final int BUFFERING = 1000; // milliseconds + + protected int targetRate; + protected int rate; + protected int buffer; + protected boolean convert; + + protected Process process; + protected InputStream sourceInputStream, processInputStream, inputStream; + protected OutputStream processOutputStream; + protected CircularByteBuffer circularByteBuffer; + protected BufferWorker bufferWorker; + + public Converter(InputStream inputStream) { + this(inputStream, -1); + } + + public Converter(InputStream inputStream, int targetRate) { + super(); + this.sourceInputStream = inputStream; + this.targetRate = targetRate; + bufferWorker = new BufferWorker(); + convert = false; + } + + public void exit() { + super.exit(); + bufferWorker.exit(); + } + + public synchronized void activate() throws ActivateException { + /* Read bitrate */ + BufferedInputStream bufferedInputStream = new BufferedInputStream(sourceInputStream); + Bitstream bitStream = new Bitstream(bufferedInputStream); + try { + rate = bitStream.readFrame().bitrate() / 1000; + buffer = BUFFER * rate / 8; + } catch (BitstreamException e) { + logger.error("", e); + throw new ActivateException(); + } + + /* Check for need to convert */ + if (targetRate < 0 || rate == targetRate) { + logger.debug("No conversion required"); + inputStream = sourceInputStream; + } else { + logger.debug("Converting from " + rate + "kbps to " + targetRate + "kbps"); + try { + String command = String.format(COMMAND, rate > targetRate ? "-B " + targetRate : "-F -b " + targetRate); + logger.debug("Starting process: " + command); + process = Runtime.getRuntime().exec(command); + processInputStream = process.getInputStream(); + processOutputStream = process.getOutputStream(); + + /* Buffer output */ + circularByteBuffer = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE); + inputStream = circularByteBuffer.getInputStream(); + bufferWorker.start(); + convert = true; + } catch (IOException e) { + logger.error("", e); + throw new ActivateException(); + } + } + super.activate(); + notifyAll(); + } + + public void deactivate() throws DeactivateException { + super.deactivate(); + try { + sourceInputStream.close(); + bufferWorker.stop(); + if (convert) { + circularByteBuffer.clear(); + convert = false; + } + inputStream.close(); + } catch (IOException e) { + logger.error("", e); + throw new DeactivateException(); + } + } + + public void work() { + if (!convert) { + try { + synchronized (this) { + wait(); + } + } catch (InterruptedException e) { + logger.error("", e); + } + return; + } + byte[] bytes = new byte[BYTES]; + int read = 0; + try { + logger.debug("Writing input to process"); + // Should be interrupted by stop()/exit() + while ((read = sourceInputStream.read(bytes)) > 0) { + /* Limit buffer size */ + while (inputStream.available() > buffer) { + int progress = (int) ((1 - (inputStream.available() - buffer) / (float) buffer) * 100); + logger.trace("Waiting for buffer to empty: " + progress + "%"); + sleep(BUFFERING); + } + processOutputStream.write(bytes, 0, read); + } + processOutputStream.close(); + logger.debug("Stopped writing input to process"); + process.waitFor(); + logger.debug("Process finished"); + } catch (IOException e) { + } catch (InterruptedException e) { + logger.error("", e); + } + stop(); + } + + public synchronized InputStream getInputStream() { + if (!active()) { + start(); + try { + wait(); + } catch (InterruptedException e) { + logger.error("", e); + } + } + return inputStream; + } + + public synchronized void setInputStream(InputStream inputStream) { + this.inputStream = inputStream; + } + + class BufferWorker extends Work { + public void work() { + byte[] bytes = new byte[BYTES]; + int read = 0; + try { + OutputStream bufferOutputStream = circularByteBuffer.getOutputStream(); + logger.debug("Start buffering process output"); + while ((read = processInputStream.read(bytes, 0, BYTES)) > 0) { + bufferOutputStream.write(bytes, 0, read); + } + logger.debug("Finished buffering process output"); + bufferOutputStream.close(); + } catch (IOException e) {} + stop(); + } + } + + public static void main(String[] args) { + Mp3 mp3 = new Mp3(new File("stream.mp3"), 128); + InputStream inputStream = mp3.getInputStream(); + + /* Play */ + //Utils.play(inputStream); + + /* Write to file */ + Utils.write(inputStream, new File("output.mp3")); + mp3.exit(); + } +} diff --git a/java/sound/src/main/java/old/List.java b/java/exec.sound/src/main/java/old/List.java similarity index 96% rename from java/sound/src/main/java/old/List.java rename to java/exec.sound/src/main/java/old/List.java index 1d49985..d026fb9 100644 --- a/java/sound/src/main/java/old/List.java +++ b/java/exec.sound/src/main/java/old/List.java @@ -1,201 +1,201 @@ -package old; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Scanner; - -import sound.consumer.Shoutcast; -import base.exception.worker.ActivateException; -import base.work.Work; - -import com.Ostermiller.util.BufferOverflowException; -import com.Ostermiller.util.CircularByteBuffer; -import com.Ostermiller.util.CircularObjectBuffer; - -public class List extends Work { - public static final int STEP = 80; // milliseconds - public static final int RATE = 192; // kbps - public static final int OVERLAP = 20000; // milliseconds - - protected File file; - protected String[] fileArray; - - protected int rate; - protected int chunk; - protected int overlap; - protected byte[] bytes; - protected boolean next; - protected Mp3 mp3, nextMp3; - - protected InputStream mp3InputStream; - protected OutputStream audioOutputStream; - protected CircularByteBuffer circularByteBuffer; - protected CircularObjectBuffer circularStringBuffer; - - public List(File file) { - this(file, RATE); - } - - public List(File file, int rate) { - this.file = file; - this.rate = rate; - chunk = STEP * rate / 8; - overlap = OVERLAP * RATE / 8; - bytes = new byte[chunk]; - next = true; - } - - public void exit() { - super.exit(); - if (mp3 != null) { - mp3.exit(); - } - if (nextMp3 != null) { - nextMp3.exit(); - } - } - - public synchronized void activate() throws ActivateException { - try { - Scanner scanner = new Scanner(file); - ArrayList fileList = new ArrayList(); - while (scanner.hasNextLine()) { - fileList.add(scanner.nextLine()); - } - scanner.close(); - if (fileList.size() > 0) { - fileArray = fileList.toArray(new String[0]); - - circularByteBuffer = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE); - audioOutputStream = circularByteBuffer.getOutputStream(); - - circularStringBuffer = new CircularObjectBuffer(CircularByteBuffer.INFINITE_SIZE); - setNext(); - super.activate(); - notifyAll(); - return; - } - } catch (FileNotFoundException e) { - logger.error("", e); - } - throw new ActivateException(); - } - - public synchronized void work() { - try { - int left = chunk; - while (left > 0) { - /* Check for need to load next mp3 */ - int available = mp3InputStream == null ? -1 : mp3InputStream.available(); - boolean expect = mp3 == null ? false : mp3.active(); - - /* Act when no more data is expected */ - if (!expect) { - if (available < overlap) { - setNext(); - next = false; - nextMp3.start(); - } - if (available < 1) { - swap(); - } - } - - /* Transfer data */ - int read = mp3InputStream.read(bytes, 0, left); - left -= read; - audioOutputStream.write(bytes, 0, read); - } - } catch (IOException e) { - /* Swap to next if stream has stopped */ - setNext(); - swap(); - } catch (IllegalStateException e) { - logger.error("", e); - } - sleep(STEP); - } - - protected File getRandomFile() { - return new File(fileArray[(int) (Math.random() * fileArray.length)]); - } - - public synchronized void setNext() { - if (nextMp3 == null) { - logger.debug("Initialize next mp3"); - nextMp3 = new Mp3(getRandomFile(), rate); - } else if (next) { - logger.debug("Load next mp3"); - nextMp3.setFile(getRandomFile()); - } - } - - public synchronized void next() { - logger.debug("Stop current mp3"); - mp3.stop(); - } - - public void swap() { - logger.debug("Swap to next mp3"); - Mp3 swapMp3 = mp3; - mp3 = nextMp3; - nextMp3 = swapMp3; - next = true; - - /* Swap stream and announce title */ - mp3InputStream = mp3.getInputStream(); - try { - circularStringBuffer.write(mp3.getTitle()); - } catch (BufferOverflowException e) { - logger.error("", e); - } catch (IllegalStateException e) { - logger.error("", e); - } catch (InterruptedException e) { - logger.error("", e); - } - } - - public synchronized InputStream getInputStream() { - if (circularByteBuffer == null) { - start(); - try { - wait(); - } catch (InterruptedException e) { - logger.error("", e); - } - } - return circularByteBuffer.getInputStream(); - } - - public synchronized CircularObjectBuffer getMetaBuffer() { - if (circularStringBuffer == null) { - start(); - try { - wait(); - } catch (InterruptedException e) { - logger.error("", e); - } - } - return circularStringBuffer; - } - - public static void main(String[] args) throws Exception { - int rate = 192; - List list = new List(new File(List.class.getClassLoader().getResource("txt/mp3").toURI()), rate); - Shoutcast shoutcast = new Shoutcast(rate, 9876); - - shoutcast.setInputStream(list.getInputStream()); - shoutcast.setMetaBuffer(list.getMetaBuffer()); - shoutcast.start(); - while (true) { - try { - Thread.sleep(15000); - list.next(); - } catch (InterruptedException e) {} - } - } -} +package old; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Scanner; + +import sound.consumer.Shoutcast; +import base.exception.worker.ActivateException; +import base.work.Work; + +import com.Ostermiller.util.BufferOverflowException; +import com.Ostermiller.util.CircularByteBuffer; +import com.Ostermiller.util.CircularObjectBuffer; + +public class List extends Work { + public static final int STEP = 80; // milliseconds + public static final int RATE = 192; // kbps + public static final int OVERLAP = 20000; // milliseconds + + protected File file; + protected String[] fileArray; + + protected int rate; + protected int chunk; + protected int overlap; + protected byte[] bytes; + protected boolean next; + protected Mp3 mp3, nextMp3; + + protected InputStream mp3InputStream; + protected OutputStream audioOutputStream; + protected CircularByteBuffer circularByteBuffer; + protected CircularObjectBuffer circularStringBuffer; + + public List(File file) { + this(file, RATE); + } + + public List(File file, int rate) { + this.file = file; + this.rate = rate; + chunk = STEP * rate / 8; + overlap = OVERLAP * RATE / 8; + bytes = new byte[chunk]; + next = true; + } + + public void exit() { + super.exit(); + if (mp3 != null) { + mp3.exit(); + } + if (nextMp3 != null) { + nextMp3.exit(); + } + } + + public synchronized void activate() throws ActivateException { + try { + Scanner scanner = new Scanner(file); + ArrayList fileList = new ArrayList(); + while (scanner.hasNextLine()) { + fileList.add(scanner.nextLine()); + } + scanner.close(); + if (fileList.size() > 0) { + fileArray = fileList.toArray(new String[0]); + + circularByteBuffer = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE); + audioOutputStream = circularByteBuffer.getOutputStream(); + + circularStringBuffer = new CircularObjectBuffer(CircularByteBuffer.INFINITE_SIZE); + setNext(); + super.activate(); + notifyAll(); + return; + } + } catch (FileNotFoundException e) { + logger.error("", e); + } + throw new ActivateException(); + } + + public synchronized void work() { + try { + int left = chunk; + while (left > 0) { + /* Check for need to load next mp3 */ + int available = mp3InputStream == null ? -1 : mp3InputStream.available(); + boolean expect = mp3 == null ? false : mp3.active(); + + /* Act when no more data is expected */ + if (!expect) { + if (available < overlap) { + setNext(); + next = false; + nextMp3.start(); + } + if (available < 1) { + swap(); + } + } + + /* Transfer data */ + int read = mp3InputStream.read(bytes, 0, left); + left -= read; + audioOutputStream.write(bytes, 0, read); + } + } catch (IOException e) { + /* Swap to next if stream has stopped */ + setNext(); + swap(); + } catch (IllegalStateException e) { + logger.error("", e); + } + sleep(STEP); + } + + protected File getRandomFile() { + return new File(fileArray[(int) (Math.random() * fileArray.length)]); + } + + public synchronized void setNext() { + if (nextMp3 == null) { + logger.debug("Initialize next mp3"); + nextMp3 = new Mp3(getRandomFile(), rate); + } else if (next) { + logger.debug("Load next mp3"); + nextMp3.setFile(getRandomFile()); + } + } + + public synchronized void next() { + logger.debug("Stop current mp3"); + mp3.stop(); + } + + public void swap() { + logger.debug("Swap to next mp3"); + Mp3 swapMp3 = mp3; + mp3 = nextMp3; + nextMp3 = swapMp3; + next = true; + + /* Swap stream and announce title */ + mp3InputStream = mp3.getInputStream(); + try { + circularStringBuffer.write(mp3.getTitle()); + } catch (BufferOverflowException e) { + logger.error("", e); + } catch (IllegalStateException e) { + logger.error("", e); + } catch (InterruptedException e) { + logger.error("", e); + } + } + + public synchronized InputStream getInputStream() { + if (circularByteBuffer == null) { + start(); + try { + wait(); + } catch (InterruptedException e) { + logger.error("", e); + } + } + return circularByteBuffer.getInputStream(); + } + + public synchronized CircularObjectBuffer getMetaBuffer() { + if (circularStringBuffer == null) { + start(); + try { + wait(); + } catch (InterruptedException e) { + logger.error("", e); + } + } + return circularStringBuffer; + } + + public static void main(String[] args) throws Exception { + int rate = 192; + List list = new List(new File(List.class.getClassLoader().getResource("txt/mp3").toURI()), rate); + Shoutcast shoutcast = new Shoutcast(rate, 9876); + + shoutcast.setInputStream(list.getInputStream()); + shoutcast.setMetaBuffer(list.getMetaBuffer()); + shoutcast.start(); + while (true) { + try { + Thread.sleep(15000); + list.next(); + } catch (InterruptedException e) {} + } + } +} diff --git a/java/sound/src/main/java/old/Mp3.java b/java/exec.sound/src/main/java/old/Mp3.java similarity index 96% rename from java/sound/src/main/java/old/Mp3.java rename to java/exec.sound/src/main/java/old/Mp3.java index de90aff..445d4d4 100644 --- a/java/sound/src/main/java/old/Mp3.java +++ b/java/exec.sound/src/main/java/old/Mp3.java @@ -1,80 +1,80 @@ -package old; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; - -import org.farng.mp3.MP3File; -import org.farng.mp3.TagException; - -import sound.util.Utils; -import base.exception.worker.ActivateException; - -public class Mp3 extends Converter { - protected File file; - protected String title; - - public Mp3(File file) { - this(file, -1); - } - - public Mp3(File file, int targetRate) { - super(null, targetRate); - setFile(file); - title = ""; - } - - public synchronized void activate() throws ActivateException { - /* Open file */ - try { - sourceInputStream = new FileInputStream(file); - } catch (FileNotFoundException e) { - logger.error("", e); - throw new ActivateException(); - } - - /* Read ID3V2 tags */ - try { - MP3File mp3File = new MP3File(file); - String album = clean(mp3File.getID3v2Tag().getAlbumTitle()); - String artist = clean(mp3File.getID3v2Tag().getLeadArtist()); - String track = clean(mp3File.getID3v2Tag().getSongTitle()); - if (album.isEmpty()) { - title = String.format("%s - %s", artist, track, album); - } else { - title = String.format("%s - %s {%s}", artist, track, album); - } - logger.debug("Title: " + title); - } catch (IOException e) { - logger.error("", e); - } catch (TagException e) { - logger.error("", e); - } - try { - sourceInputStream.skip(100000); - } catch (IOException e) {} - super.activate(); - } - - protected String clean(String input) { - String output = input.replace("\0", ""); - return output.replace("ÿþ", ""); - } - - public String getTitle() { - return title; - } - - public void setFile(File file) { - this.file = file; - } - - public static void main(String[] args) { - final Mp3 mp3 = new Mp3(new File("input.mp3"), 128); - Utils.write(mp3.getInputStream(), new File("one.mp3")); - mp3.setFile(new File("stream.mp3")); - Utils.write(mp3.getInputStream(), new File("two.mp3")); - mp3.exit(); - } -} +package old; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; + +import org.farng.mp3.MP3File; +import org.farng.mp3.TagException; + +import sound.util.Utils; +import base.exception.worker.ActivateException; + +public class Mp3 extends Converter { + protected File file; + protected String title; + + public Mp3(File file) { + this(file, -1); + } + + public Mp3(File file, int targetRate) { + super(null, targetRate); + setFile(file); + title = ""; + } + + public synchronized void activate() throws ActivateException { + /* Open file */ + try { + sourceInputStream = new FileInputStream(file); + } catch (FileNotFoundException e) { + logger.error("", e); + throw new ActivateException(); + } + + /* Read ID3V2 tags */ + try { + MP3File mp3File = new MP3File(file); + String album = clean(mp3File.getID3v2Tag().getAlbumTitle()); + String artist = clean(mp3File.getID3v2Tag().getLeadArtist()); + String track = clean(mp3File.getID3v2Tag().getSongTitle()); + if (album.isEmpty()) { + title = String.format("%s - %s", artist, track, album); + } else { + title = String.format("%s - %s {%s}", artist, track, album); + } + logger.debug("Title: " + title); + } catch (IOException e) { + logger.error("", e); + } catch (TagException e) { + logger.error("", e); + } + try { + sourceInputStream.skip(100000); + } catch (IOException e) {} + super.activate(); + } + + protected String clean(String input) { + String output = input.replace("\0", ""); + return output.replace("ÿþ", ""); + } + + public String getTitle() { + return title; + } + + public void setFile(File file) { + this.file = file; + } + + public static void main(String[] args) { + final Mp3 mp3 = new Mp3(new File("input.mp3"), 128); + Utils.write(mp3.getInputStream(), new File("one.mp3")); + mp3.setFile(new File("stream.mp3")); + Utils.write(mp3.getInputStream(), new File("two.mp3")); + mp3.exit(); + } +} diff --git a/java/sound/src/main/java/old/Transducer.java b/java/exec.sound/src/main/java/old/Transducer.java similarity index 94% rename from java/sound/src/main/java/old/Transducer.java rename to java/exec.sound/src/main/java/old/Transducer.java index 64c4a01..c7618a8 100644 --- a/java/sound/src/main/java/old/Transducer.java +++ b/java/exec.sound/src/main/java/old/Transducer.java @@ -1,16 +1,16 @@ -package old; - -import sound.Consumer; -import sound.Producer; - -public abstract class Transducer implements Consumer, Producer { - public int rate; - - public Transducer(Producer producer) { - //setProducer(producer); - } - - public int getRate() { - return rate; - } -} +package old; + +import sound.Consumer; +import sound.Producer; + +public abstract class Transducer implements Consumer, Producer { + public int rate; + + public Transducer(Producer producer) { + //setProducer(producer); + } + + public int getRate() { + return rate; + } +} diff --git a/java/sound/src/main/java/pipe/Client.java b/java/exec.sound/src/main/java/pipe/Client.java similarity index 100% rename from java/sound/src/main/java/pipe/Client.java rename to java/exec.sound/src/main/java/pipe/Client.java diff --git a/java/sound/src/main/java/pipe/Pipe.java b/java/exec.sound/src/main/java/pipe/Pipe.java similarity index 100% rename from java/sound/src/main/java/pipe/Pipe.java rename to java/exec.sound/src/main/java/pipe/Pipe.java diff --git a/java/sound/src/main/java/pipe/TestPipe.java b/java/exec.sound/src/main/java/pipe/TestPipe.java similarity index 100% rename from java/sound/src/main/java/pipe/TestPipe.java rename to java/exec.sound/src/main/java/pipe/TestPipe.java diff --git a/java/sound/src/main/java/sound/Consumer.java b/java/exec.sound/src/main/java/sound/Consumer.java similarity index 95% rename from java/sound/src/main/java/sound/Consumer.java rename to java/exec.sound/src/main/java/sound/Consumer.java index dddd96e..cc6c28c 100644 --- a/java/sound/src/main/java/sound/Consumer.java +++ b/java/exec.sound/src/main/java/sound/Consumer.java @@ -1,7 +1,7 @@ -package sound; - -public interface Consumer { - public void start(Producer producer); - public void stop(); - public void exit(); -} +package sound; + +public interface Consumer { + public void start(Producer producer); + public void stop(); + public void exit(); +} diff --git a/java/sound/src/main/java/sound/Format.java b/java/exec.sound/src/main/java/sound/Format.java similarity index 95% rename from java/sound/src/main/java/sound/Format.java rename to java/exec.sound/src/main/java/sound/Format.java index 5fa89af..4de19dc 100644 --- a/java/sound/src/main/java/sound/Format.java +++ b/java/exec.sound/src/main/java/sound/Format.java @@ -1,13 +1,13 @@ -package sound; - -import javax.sound.sampled.AudioFormat; - -public interface Format extends Cloneable { - public interface Standard extends Format { - public AudioFormat getAudioFormat(); - } - - public interface Mp3 extends Format { - public int getRate(); - } +package sound; + +import javax.sound.sampled.AudioFormat; + +public interface Format extends Cloneable { + public interface Standard extends Format { + public AudioFormat getAudioFormat(); + } + + public interface Mp3 extends Format { + public int getRate(); + } } \ No newline at end of file diff --git a/java/sound/src/main/java/sound/Producer.java b/java/exec.sound/src/main/java/sound/Producer.java similarity index 95% rename from java/sound/src/main/java/sound/Producer.java rename to java/exec.sound/src/main/java/sound/Producer.java index bbabccd..0c5ff9f 100644 --- a/java/sound/src/main/java/sound/Producer.java +++ b/java/exec.sound/src/main/java/sound/Producer.java @@ -1,10 +1,10 @@ -package sound; - -import java.io.InputStream; - -public interface Producer extends Format { - public InputStream getInputStream(); - public void start(); - public void stop(); - public void exit(); +package sound; + +import java.io.InputStream; + +public interface Producer extends Format { + public InputStream getInputStream(); + public void start(); + public void stop(); + public void exit(); } \ No newline at end of file diff --git a/java/sound/src/main/java/sound/Source.java b/java/exec.sound/src/main/java/sound/Source.java similarity index 96% rename from java/sound/src/main/java/sound/Source.java rename to java/exec.sound/src/main/java/sound/Source.java index 6380a6d..8d558d1 100644 --- a/java/sound/src/main/java/sound/Source.java +++ b/java/exec.sound/src/main/java/sound/Source.java @@ -1,161 +1,161 @@ -package sound; - -import java.io.IOException; -import java.io.InputStream; - -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.SourceDataLine; - -import javazoom.jl.decoder.JavaLayerException; -import javazoom.jl.player.Player; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import sound.util.Tool; -import base.exception.worker.ActivateException; -import base.exception.worker.DeactivateException; -import base.work.Work; - -public class Source implements Consumer { - protected Logger logger = LoggerFactory.getLogger(getClass()); - - protected static final int BUFFER_SIZE = 1024 * 4; // in bytes - protected static final int FRAMES = 10; // count - - protected String name; - protected Producer producer; - protected InputStream producerInputStream; - protected Work work; - - public Source(String name) throws LineUnavailableException { - this.name = name; - } - - public void start() { - if (work != null) { - work.start(); - } - } - - public void start(Producer producer) { - this.producer = producer; - producerInputStream = producer.getInputStream(); - if (work != null) { - work.exit(); - } - if (producer instanceof Format.Standard) { - logger.debug("Format.Standard"); - work = new DefaultWorker((Format.Standard) producer); - } else if (producer instanceof Format.Mp3) { - logger.debug("Format.Mp3"); - work = new Mp3Worker((Format.Mp3) producer); - } - start(); - } - - public void stop() { - if (work != null) { - work.stop(); - } - } - - public void exit() { - if (work != null) { - work.exit(); - } - } - - protected class DefaultWorker extends Work { - protected Format.Standard format; - protected SourceDataLine line; - - public DefaultWorker(Format.Standard format) { - this.format = format; - } - - public void activate() throws ActivateException { - AudioFormat audioFormat = format.getAudioFormat(); - try { - if (line == null) { - line = Tool.getSourceDataLine(name, audioFormat); - } - if (!line.isOpen()) { - line.open(); - } - } catch (LineUnavailableException e) { - logger.error("", e); - throw new ActivateException(); - } - if (!line.isRunning()) { - line.start(); - } - super.activate(); - } - - public void deactivate() throws DeactivateException { - super.deactivate(); - line.flush(); - } - - public void exit() { - super.exit(); - line.close(); - } - - public void work() { - try { - byte[] buffer = new byte[BUFFER_SIZE]; - int read = producerInputStream.read(buffer, 0, buffer.length); - if (read > 0) { - line.write(buffer, 0, read); - } else { - exit(); - } - } catch (IOException e) { - logger.error("", e); - exit(); - } - } - } - - protected class Mp3Worker extends Work { - protected Format.Mp3 format; - protected Player player; - - public Mp3Worker(Format.Mp3 format) { - this.format = format; - } - - public void activate() throws ActivateException { - producer.start(); - super.activate(); - } - - public void deactivate() throws DeactivateException { - super.deactivate(); - producer.stop(); - } - - public void exit() { - super.exit(); - player.close(); - } - - public void work() { - try { - if (player == null) { - player = new Player(producerInputStream); - sleep(100); - } - player.play(FRAMES); - } catch (JavaLayerException e) { - logger.error("", e); - } - if (player.isComplete()) { - stop(); - } - } - } -} +package sound; + +import java.io.IOException; +import java.io.InputStream; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.SourceDataLine; + +import javazoom.jl.decoder.JavaLayerException; +import javazoom.jl.player.Player; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import sound.util.Tool; +import base.exception.worker.ActivateException; +import base.exception.worker.DeactivateException; +import base.work.Work; + +public class Source implements Consumer { + protected Logger logger = LoggerFactory.getLogger(getClass()); + + protected static final int BUFFER_SIZE = 1024 * 4; // in bytes + protected static final int FRAMES = 10; // count + + protected String name; + protected Producer producer; + protected InputStream producerInputStream; + protected Work work; + + public Source(String name) throws LineUnavailableException { + this.name = name; + } + + public void start() { + if (work != null) { + work.start(); + } + } + + public void start(Producer producer) { + this.producer = producer; + producerInputStream = producer.getInputStream(); + if (work != null) { + work.exit(); + } + if (producer instanceof Format.Standard) { + logger.debug("Format.Standard"); + work = new DefaultWorker((Format.Standard) producer); + } else if (producer instanceof Format.Mp3) { + logger.debug("Format.Mp3"); + work = new Mp3Worker((Format.Mp3) producer); + } + start(); + } + + public void stop() { + if (work != null) { + work.stop(); + } + } + + public void exit() { + if (work != null) { + work.exit(); + } + } + + protected class DefaultWorker extends Work { + protected Format.Standard format; + protected SourceDataLine line; + + public DefaultWorker(Format.Standard format) { + this.format = format; + } + + public void activate() throws ActivateException { + AudioFormat audioFormat = format.getAudioFormat(); + try { + if (line == null) { + line = Tool.getSourceDataLine(name, audioFormat); + } + if (!line.isOpen()) { + line.open(); + } + } catch (LineUnavailableException e) { + logger.error("", e); + throw new ActivateException(); + } + if (!line.isRunning()) { + line.start(); + } + super.activate(); + } + + public void deactivate() throws DeactivateException { + super.deactivate(); + line.flush(); + } + + public void exit() { + super.exit(); + line.close(); + } + + public void work() { + try { + byte[] buffer = new byte[BUFFER_SIZE]; + int read = producerInputStream.read(buffer, 0, buffer.length); + if (read > 0) { + line.write(buffer, 0, read); + } else { + exit(); + } + } catch (IOException e) { + logger.error("", e); + exit(); + } + } + } + + protected class Mp3Worker extends Work { + protected Format.Mp3 format; + protected Player player; + + public Mp3Worker(Format.Mp3 format) { + this.format = format; + } + + public void activate() throws ActivateException { + producer.start(); + super.activate(); + } + + public void deactivate() throws DeactivateException { + super.deactivate(); + producer.stop(); + } + + public void exit() { + super.exit(); + player.close(); + } + + public void work() { + try { + if (player == null) { + player = new Player(producerInputStream); + sleep(100); + } + player.play(FRAMES); + } catch (JavaLayerException e) { + logger.error("", e); + } + if (player.isComplete()) { + stop(); + } + } + } +} diff --git a/java/sound/src/main/java/sound/consumer/Port.java b/java/exec.sound/src/main/java/sound/consumer/Port.java similarity index 96% rename from java/sound/src/main/java/sound/consumer/Port.java rename to java/exec.sound/src/main/java/sound/consumer/Port.java index 83111b2..5e3cf48 100644 --- a/java/sound/src/main/java/sound/consumer/Port.java +++ b/java/exec.sound/src/main/java/sound/consumer/Port.java @@ -1,121 +1,121 @@ -package sound.consumer; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import javax.sound.sampled.AudioFormat; - -import sound.Consumer; -import sound.Format; -import sound.Format.Standard; -import sound.Producer; -import sound.util.SoxBuilder; -import sound.util.SoxBuilder.File; -import sound.util.SoxBuilder.File.Type; -import sound.util.SoxBuilder.Option; -import base.exception.worker.ActivateException; -import base.exception.worker.DeactivateException; -import base.work.Work; - -public class Port extends Work implements Consumer { - protected static final int BUFFER_SIZE = 1024 * 4; // in bytes - - protected String device; - protected Producer producer; - protected Process process; - protected InputStream producerInputStream; - protected OutputStream processOutputStream; - protected ProcessBuilder processBuilder; - - public Port() { - this("0"); - } - - public Port(String device) { - this.device = device; - } - - public void start(Producer producer) { - start(producer); - } - - @SuppressWarnings("static-access") - public void start(Producer producer, boolean thread) { - this.producer = producer; - producerInputStream = producer.getInputStream(); - - String command = ""; - if (producer instanceof Standard) { - AudioFormat audioFormat = ((Standard) producer).getAudioFormat(); - SoxBuilder.addFile(File.setType(Type.STANDARD).setOptions(audioFormat)); - } else if (producer instanceof Format.Mp3) { - SoxBuilder.addFile(File.setType(Type.STANDARD).setOption(File.Format.MP3)); - } - command = SoxBuilder - .setOption(Option.QUIET) - .addFile(File.setType(Type.DEVICE)) - .build(); - - logger.debug(String.format("Build process (\"%s\")", command)); - processBuilder = new ProcessBuilder(command.split(" ")); - processBuilder.environment().put("AUDIODEV", device); - - start(); - } - - public void activate() throws ActivateException { - producer.start(); - if (process == null) { - try { - process = processBuilder.start(); - } catch (IOException e) { - logger.error("", e); - throw new ActivateException(); - } - processOutputStream = process.getOutputStream(); - } - super.activate(); - } - - public void deactivate() throws DeactivateException { - super.deactivate(); - try { - processOutputStream.flush(); - } catch (IOException e) { - logger.error("", e); - throw new DeactivateException(); - } - } - - public void exit() { - try { - logger.debug("close process output stream"); - processOutputStream.close(); - - logger.debug("wait for process to terminate"); - process.waitFor(); - } catch (IOException e) { - logger.error("", e); - } catch (InterruptedException e) { - logger.error("", e); - } finally { - process = null; - } - } - - public void work() { - try { - byte[] buffer = new byte[BUFFER_SIZE]; - int read = producerInputStream.read(buffer, 0, buffer.length); - if (read > 0) { - processOutputStream.write(buffer, 0, read); - } else { - exit(); - } - } catch (IOException e) { - logger.error("", e); - exit(); - } - } -} +package sound.consumer; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import javax.sound.sampled.AudioFormat; + +import sound.Consumer; +import sound.Format; +import sound.Format.Standard; +import sound.Producer; +import sound.util.SoxBuilder; +import sound.util.SoxBuilder.File; +import sound.util.SoxBuilder.File.Type; +import sound.util.SoxBuilder.Option; +import base.exception.worker.ActivateException; +import base.exception.worker.DeactivateException; +import base.work.Work; + +public class Port extends Work implements Consumer { + protected static final int BUFFER_SIZE = 1024 * 4; // in bytes + + protected String device; + protected Producer producer; + protected Process process; + protected InputStream producerInputStream; + protected OutputStream processOutputStream; + protected ProcessBuilder processBuilder; + + public Port() { + this("0"); + } + + public Port(String device) { + this.device = device; + } + + public void start(Producer producer) { + start(producer); + } + + @SuppressWarnings("static-access") + public void start(Producer producer, boolean thread) { + this.producer = producer; + producerInputStream = producer.getInputStream(); + + String command = ""; + if (producer instanceof Standard) { + AudioFormat audioFormat = ((Standard) producer).getAudioFormat(); + SoxBuilder.addFile(File.setType(Type.STANDARD).setOptions(audioFormat)); + } else if (producer instanceof Format.Mp3) { + SoxBuilder.addFile(File.setType(Type.STANDARD).setOption(File.Format.MP3)); + } + command = SoxBuilder + .setOption(Option.QUIET) + .addFile(File.setType(Type.DEVICE)) + .build(); + + logger.debug(String.format("Build process (\"%s\")", command)); + processBuilder = new ProcessBuilder(command.split(" ")); + processBuilder.environment().put("AUDIODEV", device); + + start(); + } + + public void activate() throws ActivateException { + producer.start(); + if (process == null) { + try { + process = processBuilder.start(); + } catch (IOException e) { + logger.error("", e); + throw new ActivateException(); + } + processOutputStream = process.getOutputStream(); + } + super.activate(); + } + + public void deactivate() throws DeactivateException { + super.deactivate(); + try { + processOutputStream.flush(); + } catch (IOException e) { + logger.error("", e); + throw new DeactivateException(); + } + } + + public void exit() { + try { + logger.debug("close process output stream"); + processOutputStream.close(); + + logger.debug("wait for process to terminate"); + process.waitFor(); + } catch (IOException e) { + logger.error("", e); + } catch (InterruptedException e) { + logger.error("", e); + } finally { + process = null; + } + } + + public void work() { + try { + byte[] buffer = new byte[BUFFER_SIZE]; + int read = producerInputStream.read(buffer, 0, buffer.length); + if (read > 0) { + processOutputStream.write(buffer, 0, read); + } else { + exit(); + } + } catch (IOException e) { + logger.error("", e); + exit(); + } + } +} diff --git a/java/sound/src/main/java/sound/consumer/Shoutcast.java b/java/exec.sound/src/main/java/sound/consumer/Shoutcast.java similarity index 97% rename from java/sound/src/main/java/sound/consumer/Shoutcast.java rename to java/exec.sound/src/main/java/sound/consumer/Shoutcast.java index a87a78a..3644459 100644 --- a/java/sound/src/main/java/sound/consumer/Shoutcast.java +++ b/java/exec.sound/src/main/java/sound/consumer/Shoutcast.java @@ -1,296 +1,296 @@ -package sound.consumer; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.net.ServerSocket; -import java.net.Socket; -import java.net.SocketException; -import java.util.HashMap; -import java.util.Map.Entry; -import java.util.concurrent.ConcurrentLinkedQueue; - -import sound.Consumer; -import sound.Producer; -import sound.data.Data; -import sound.util.Buffer; -import base.exception.worker.ActivateException; -import base.exception.worker.DeactivateException; -import base.work.Listen; -import base.work.Work; - -import com.Ostermiller.util.CircularObjectBuffer; - -public class Shoutcast extends Work implements Consumer { - public static final int PORT = 9876; - public static final int RATE = 192; // in kbps - public static final int META = 8192; // in bytes - public static final int STEP = 80; // in milliseconds - public static final int BUFFER = 2000; // in bytes - public static final int BUFFERING = 500; // in milliseconds - public static final String DATA = "StreamTitle='%s';StreamUrl='%s';"; - protected int rate; - protected int port; - protected Server server; - protected HashMap headerMap; - protected ConcurrentLinkedQueue clientList; - protected InputStream producerInputStream; - protected int chunk; - protected Buffer buffer; - protected byte[] bytes; - protected Data data; - protected String metaData; - private CircularObjectBuffer circularStringBuffer; - - public Shoutcast() { - this(RATE, PORT); - } - - public Shoutcast(int rate) { - this(rate, PORT); - } - - public Shoutcast(int rate, int port) { - this.rate = rate; - this.port = port; - clientList = new ConcurrentLinkedQueue(); - metaData = ""; - - chunk = STEP * rate / 8; - bytes = new byte[chunk]; - buffer = new Buffer(BUFFER * rate / 8); - - headerMap = new HashMap(); - headerMap.put("icy-notice1", "This stream requires Winamp"); - headerMap.put("icy-notice2", "Java SHOUTcast Server"); - headerMap.put("icy-name", "Java Radio"); - headerMap.put("icy-genre", "Java"); - headerMap.put("icy-url", "http://localhost"); - headerMap.put("content-type:", "audio/mpeg"); - headerMap.put("icy-pub", "0"); - headerMap.put("icy-metaint", String.valueOf(META)); - headerMap.put("icy-br", String.valueOf(rate)); - } - - public void activate() throws ActivateException { - logger.trace("Activate Server"); - server = new Server(port); - server.start(); - super.activate(); - } - - public boolean active() { - return server.active(); - } - - public void deactivate() throws DeactivateException { - super.deactivate(); - server.stop(); - } - - public void work() { - int progress; - try { - int read = 0; - if (producerInputStream != null) { - while (producerInputStream.available() < buffer.capacity) { - progress = (int) (producerInputStream.available() / (buffer.capacity / 100.0F)); - logger.debug("Filling buffer: " + progress + "%"); - sleep(BUFFERING); - } - read = producerInputStream.read(bytes); - } - data = new Data(bytes, read); - buffer.write(bytes, 0, read); - } catch (IOException e) { - logger.error(e.getMessage()); - } - - for (Client client : clientList) { - if (client.active) { - client.add(data); - } - } - sleep(STEP); - } - - public void setMetaBuffer(CircularObjectBuffer circularStringBuffer) { - logger.debug("Set meta input stream"); - this.circularStringBuffer = circularStringBuffer; - } - - public void setMeta(String meta) { - logger.debug("Set meta string: " + meta); - metaData = meta; - } - - protected class Client extends Listen { - protected Socket socket; - protected InputStream inputStream; - protected OutputStream outputStream; - protected boolean writeMeta; - protected int untilMeta; - protected boolean active; - - public Client(Socket socket) throws IOException { - this.socket = socket; - inputStream = socket.getInputStream(); - outputStream = socket.getOutputStream(); - active = false; - clientList.add(this); - } - - public void activate() throws ActivateException { - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); - try { - String line; - while ((line = bufferedReader.readLine()) != null) { - if (line.startsWith("Icy-MetaData")) { - writeMeta = Integer.valueOf(line.substring(line.indexOf(":") + 1).trim()).intValue() == 1; - untilMeta = META; - } else if (line.equals("")) { - break; - } - } - logger.debug(String.format("Client accept meta: %s", Boolean.valueOf(writeMeta))); - - OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); - outputStreamWriter.write("ICY 200 OK\r\n"); - for (Entry header : headerMap.entrySet()) { - outputStreamWriter.write(String.format("%s: %s\r\n", header.getKey(), header.getValue())); - } - outputStreamWriter.write("\r\n"); - outputStreamWriter.flush(); - - add(new Data(buffer.get())); - active = true; - } catch (IOException e) { - logger.error(e.getMessage()); - throw new ActivateException(); - } - super.activate(); - } - - public void exit() { - logger.debug("Client exit"); - super.exit(); - clientList.remove(this); - try { - inputStream.close(); - outputStream.close(); - socket.close(); - } catch (IOException e) { - logger.error(e.getMessage()); - } - } - - public void input(Data data) { - try { - byte[] bytes = data.get(); - if (writeMeta) { - int offset = 0; - while (data.length() - offset >= untilMeta) { - outputStream.write(bytes, offset, untilMeta); - writeMeta(); - offset += untilMeta; - untilMeta = META; - } - int length = data.length() - offset; - outputStream.write(bytes, offset, length); - untilMeta -= length; - } else { - outputStream.write(bytes); - } - } catch (SocketException e) { - exit(); - } catch (IOException e) { - exit(); - } - } - - protected void writeMeta() throws IOException { - if ((circularStringBuffer != null) - && (circularStringBuffer.getAvailable() > 0)) { - try { - String newMetaData = circularStringBuffer.read(); - if (!newMetaData.isEmpty() && !newMetaData.equals(metaData)) { - metaData = newMetaData; - } - } catch (InterruptedException e) { - logger.error(e.getMessage()); - } - } - - String meta = String.format("StreamTitle='%s';StreamUrl='%s';", metaData, "???"); - byte[] metaBytes = meta.getBytes(); - - int length = (int) Math.ceil(metaBytes.length / 16.0F); - outputStream.write(length); - outputStream.write(metaBytes); - - int padding = 16 * length - metaBytes.length; - outputStream.write(new byte[padding], 0, padding); - } - } - - protected class Server extends Work { - protected int port; - protected ServerSocket serverSocket; - - public Server(int port) { - this.port = port; - } - - public boolean active() { - return serverSocket.isClosed() ? false : true; - } - - public void activate() throws ActivateException { - try { - serverSocket = new ServerSocket(port); - logger.debug("Server listening at port " + port); - } catch (IOException e) { - logger.error("", e); - throw new ActivateException(); - } - super.activate(); - } - - public void work() { - try { - Socket socket = serverSocket.accept(); - logger.trace("Client connected: " + socket.getInetAddress().toString()); - Shoutcast.Client client = new Shoutcast.Client(socket); - client.start(); - } catch (IOException e) { - logger.error(e.getMessage()); - } - } - - public void deactivate() throws DeactivateException { - logger.debug("Server deactivate"); - super.deactivate(); - try { - serverSocket.close(); - } catch (IOException e) { - logger.error(e.getMessage()); - } - for (Shoutcast.Client client : clientList) { - client.stop(); - } - } - } - - public void start(Producer producer) { - producerInputStream = producer.getInputStream(); - producer.start(); - super.start(); - } - - public void setInputStream(InputStream inputStream) { - producerInputStream = inputStream; - } -} +package sound.consumer; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketException; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentLinkedQueue; + +import sound.Consumer; +import sound.Producer; +import sound.data.Data; +import sound.util.Buffer; +import base.exception.worker.ActivateException; +import base.exception.worker.DeactivateException; +import base.work.Listen; +import base.work.Work; + +import com.Ostermiller.util.CircularObjectBuffer; + +public class Shoutcast extends Work implements Consumer { + public static final int PORT = 9876; + public static final int RATE = 192; // in kbps + public static final int META = 8192; // in bytes + public static final int STEP = 80; // in milliseconds + public static final int BUFFER = 2000; // in bytes + public static final int BUFFERING = 500; // in milliseconds + public static final String DATA = "StreamTitle='%s';StreamUrl='%s';"; + protected int rate; + protected int port; + protected Server server; + protected HashMap headerMap; + protected ConcurrentLinkedQueue clientList; + protected InputStream producerInputStream; + protected int chunk; + protected Buffer buffer; + protected byte[] bytes; + protected Data data; + protected String metaData; + private CircularObjectBuffer circularStringBuffer; + + public Shoutcast() { + this(RATE, PORT); + } + + public Shoutcast(int rate) { + this(rate, PORT); + } + + public Shoutcast(int rate, int port) { + this.rate = rate; + this.port = port; + clientList = new ConcurrentLinkedQueue(); + metaData = ""; + + chunk = STEP * rate / 8; + bytes = new byte[chunk]; + buffer = new Buffer(BUFFER * rate / 8); + + headerMap = new HashMap(); + headerMap.put("icy-notice1", "This stream requires Winamp"); + headerMap.put("icy-notice2", "Java SHOUTcast Server"); + headerMap.put("icy-name", "Java Radio"); + headerMap.put("icy-genre", "Java"); + headerMap.put("icy-url", "http://localhost"); + headerMap.put("content-type:", "audio/mpeg"); + headerMap.put("icy-pub", "0"); + headerMap.put("icy-metaint", String.valueOf(META)); + headerMap.put("icy-br", String.valueOf(rate)); + } + + public void activate() throws ActivateException { + logger.trace("Activate Server"); + server = new Server(port); + server.start(); + super.activate(); + } + + public boolean active() { + return server.active(); + } + + public void deactivate() throws DeactivateException { + super.deactivate(); + server.stop(); + } + + public void work() { + int progress; + try { + int read = 0; + if (producerInputStream != null) { + while (producerInputStream.available() < buffer.capacity) { + progress = (int) (producerInputStream.available() / (buffer.capacity / 100.0F)); + logger.debug("Filling buffer: " + progress + "%"); + sleep(BUFFERING); + } + read = producerInputStream.read(bytes); + } + data = new Data(bytes, read); + buffer.write(bytes, 0, read); + } catch (IOException e) { + logger.error(e.getMessage()); + } + + for (Client client : clientList) { + if (client.active) { + client.add(data); + } + } + sleep(STEP); + } + + public void setMetaBuffer(CircularObjectBuffer circularStringBuffer) { + logger.debug("Set meta input stream"); + this.circularStringBuffer = circularStringBuffer; + } + + public void setMeta(String meta) { + logger.debug("Set meta string: " + meta); + metaData = meta; + } + + protected class Client extends Listen { + protected Socket socket; + protected InputStream inputStream; + protected OutputStream outputStream; + protected boolean writeMeta; + protected int untilMeta; + protected boolean active; + + public Client(Socket socket) throws IOException { + this.socket = socket; + inputStream = socket.getInputStream(); + outputStream = socket.getOutputStream(); + active = false; + clientList.add(this); + } + + public void activate() throws ActivateException { + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + try { + String line; + while ((line = bufferedReader.readLine()) != null) { + if (line.startsWith("Icy-MetaData")) { + writeMeta = Integer.valueOf(line.substring(line.indexOf(":") + 1).trim()).intValue() == 1; + untilMeta = META; + } else if (line.equals("")) { + break; + } + } + logger.debug(String.format("Client accept meta: %s", Boolean.valueOf(writeMeta))); + + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); + outputStreamWriter.write("ICY 200 OK\r\n"); + for (Entry header : headerMap.entrySet()) { + outputStreamWriter.write(String.format("%s: %s\r\n", header.getKey(), header.getValue())); + } + outputStreamWriter.write("\r\n"); + outputStreamWriter.flush(); + + add(new Data(buffer.get())); + active = true; + } catch (IOException e) { + logger.error(e.getMessage()); + throw new ActivateException(); + } + super.activate(); + } + + public void exit() { + logger.debug("Client exit"); + super.exit(); + clientList.remove(this); + try { + inputStream.close(); + outputStream.close(); + socket.close(); + } catch (IOException e) { + logger.error(e.getMessage()); + } + } + + public void input(Data data) { + try { + byte[] bytes = data.get(); + if (writeMeta) { + int offset = 0; + while (data.length() - offset >= untilMeta) { + outputStream.write(bytes, offset, untilMeta); + writeMeta(); + offset += untilMeta; + untilMeta = META; + } + int length = data.length() - offset; + outputStream.write(bytes, offset, length); + untilMeta -= length; + } else { + outputStream.write(bytes); + } + } catch (SocketException e) { + exit(); + } catch (IOException e) { + exit(); + } + } + + protected void writeMeta() throws IOException { + if ((circularStringBuffer != null) + && (circularStringBuffer.getAvailable() > 0)) { + try { + String newMetaData = circularStringBuffer.read(); + if (!newMetaData.isEmpty() && !newMetaData.equals(metaData)) { + metaData = newMetaData; + } + } catch (InterruptedException e) { + logger.error(e.getMessage()); + } + } + + String meta = String.format("StreamTitle='%s';StreamUrl='%s';", metaData, "???"); + byte[] metaBytes = meta.getBytes(); + + int length = (int) Math.ceil(metaBytes.length / 16.0F); + outputStream.write(length); + outputStream.write(metaBytes); + + int padding = 16 * length - metaBytes.length; + outputStream.write(new byte[padding], 0, padding); + } + } + + protected class Server extends Work { + protected int port; + protected ServerSocket serverSocket; + + public Server(int port) { + this.port = port; + } + + public boolean active() { + return serverSocket.isClosed() ? false : true; + } + + public void activate() throws ActivateException { + try { + serverSocket = new ServerSocket(port); + logger.debug("Server listening at port " + port); + } catch (IOException e) { + logger.error("", e); + throw new ActivateException(); + } + super.activate(); + } + + public void work() { + try { + Socket socket = serverSocket.accept(); + logger.trace("Client connected: " + socket.getInetAddress().toString()); + Shoutcast.Client client = new Shoutcast.Client(socket); + client.start(); + } catch (IOException e) { + logger.error(e.getMessage()); + } + } + + public void deactivate() throws DeactivateException { + logger.debug("Server deactivate"); + super.deactivate(); + try { + serverSocket.close(); + } catch (IOException e) { + logger.error(e.getMessage()); + } + for (Shoutcast.Client client : clientList) { + client.stop(); + } + } + } + + public void start(Producer producer) { + producerInputStream = producer.getInputStream(); + producer.start(); + super.start(); + } + + public void setInputStream(InputStream inputStream) { + producerInputStream = inputStream; + } +} diff --git a/java/sound/src/main/java/sound/data/Data.java b/java/exec.sound/src/main/java/sound/data/Data.java similarity index 100% rename from java/sound/src/main/java/sound/data/Data.java rename to java/exec.sound/src/main/java/sound/data/Data.java diff --git a/java/sound/src/main/java/sound/producer/Stream.java b/java/exec.sound/src/main/java/sound/producer/Stream.java similarity index 97% rename from java/sound/src/main/java/sound/producer/Stream.java rename to java/exec.sound/src/main/java/sound/producer/Stream.java index efa3dab..dbe6f6d 100644 --- a/java/sound/src/main/java/sound/producer/Stream.java +++ b/java/exec.sound/src/main/java/sound/producer/Stream.java @@ -1,200 +1,200 @@ -package sound.producer; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.net.Socket; -import java.net.URL; - -import sound.Format; -import sound.Producer; -import sound.stream.HoardedInputStream; -import base.exception.worker.ActivateException; -import base.exception.worker.DeactivateException; -import base.work.Work; - -import com.Ostermiller.util.CircularByteBuffer; -import com.Ostermiller.util.CircularObjectBuffer; - -public class Stream extends Work implements Producer, Format.Mp3 { - public static final int STEP = 80; // in milliseconds - - protected String http; - protected Socket socket; - protected InputStream socketInputStream; - protected OutputStreamWriter socketOutputStreamWriter; - protected HoardedInputStream hoardedInputStream; - protected int meta; - protected int rate; - protected int chunk; - protected int untilMeta; - protected CircularByteBuffer audioCircularByteBuffer; - protected CircularObjectBuffer metaCircularObjectBuffer; - protected String metaData; - - public Stream(String http) { - super(); - this.http = http; - meta = -1; - rate = -1; - audioCircularByteBuffer = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE); - metaCircularObjectBuffer = new CircularObjectBuffer(); - } - - protected void connect(URL url) { - try { - /* Open socket communication */ - socket = new Socket(url.getHost(), url.getPort()); - socketInputStream = socket.getInputStream(); - socketOutputStreamWriter = new OutputStreamWriter(socket.getOutputStream()); - - /* Write stream request */ - if (url.getFile().equals("")) { - socketOutputStreamWriter.write("GET / HTTP/1.1\r\n"); - } else { - socketOutputStreamWriter.write("GET " + url.getFile() + " HTTP/1.1\r\n"); - } - socketOutputStreamWriter.write("Host: " + url.getHost() + "\r\n"); - //socketOutputStreamWriter.write("Icy-MetaData: 1\r\n"); - socketOutputStreamWriter.write("Connection: close\r\n"); - socketOutputStreamWriter.write("\r\n"); - socketOutputStreamWriter.flush(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void activate() throws ActivateException { - try { - /* Initialize connection */ - URL url = new URL(http); - - /* Parse headers */ - connect(url); - InputStreamReader inputStreamReader = new InputStreamReader(socketInputStream); - StringBuffer stringBuffer = new StringBuffer(); - char character; - int skip = 0; - while ((character = (char) inputStreamReader.read()) > 0) { - ++skip; - if (character == '\n') { - /* Fetch relevant headers */ - String line = stringBuffer.toString().trim(); - if (line.startsWith("icy-metaint")) { - meta = Integer.valueOf(line.substring(line.indexOf(":") + 1).trim()); - } else if (line.startsWith("icy-br")) { - rate = Integer.valueOf(line.substring(line.indexOf(":") + 1).trim()); - } else if (line.equals("")) { - break; - } - stringBuffer = new StringBuffer(); - } else { - stringBuffer.append(character); - } - } - inputStreamReader.close(); - - /* Reconnect to bypass pre-buffering problems */ - connect(url); - socketInputStream = socket.getInputStream(); - socketInputStream.skip(skip); - } catch (IOException e) { - e.printStackTrace(); - } catch (NumberFormatException e) { - e.printStackTrace(); - } - - /* Calculate streaming parameters */ - //untilMeta = meta; - chunk = STEP * rate / 8; - super.activate(); - } - - public void deactivate() throws DeactivateException { - super.deactivate(); - audioCircularByteBuffer.clear(); - metaCircularObjectBuffer.clear(); - try { - hoardedInputStream.clear(); - } catch (IOException e) { - logger.error("", e); - throw new DeactivateException(); - } - } - - public void work() { - int left = chunk; - - /* Handle media at appropriate times * - while (meta > 0 && left >= untilMeta) { - stream(untilMeta); - left -= untilMeta; - meta(); - untilMeta = meta; - }*/ - - /* Stream at fixed rate */ - stream(left); - //untilMeta -= left; - sleep(STEP); - } - - protected void stream(int length) { - try { - byte[] bytes = new byte[length]; - int read = 0; - while (length > 0 && (read = socketInputStream.read(bytes)) > 0) { - length -= read; - audioCircularByteBuffer.getOutputStream().write(bytes); - } - } catch (IOException e) { - logger.error(e.getMessage()); - stop(); - } - } - - protected void meta() { - try { - /* Retrieve data length */ - byte[] data = new byte[1]; - socketInputStream.read(data); - - int length = 16 * data[0]; - data = new byte[length]; - socketInputStream.read(data); - - /* Check for new data */ - String newMetaData = new String(data); - if (!newMetaData.isEmpty() && !newMetaData.equals(metaData)) { - metaData = newMetaData; - metaCircularObjectBuffer.write(new String(data)); - logger.debug("data: " + metaData); - } - return; - } catch (IOException e) { - logger.error("", e); - } catch (IllegalStateException e) { - logger.error("", e); - } catch (InterruptedException e) { - logger.error("", e); - } - stop(); - return; - } - - public InputStream getInputStream() { - if (hoardedInputStream == null) { - hoardedInputStream = new HoardedInputStream(audioCircularByteBuffer.getInputStream()); - } - return hoardedInputStream; - } - - public CircularObjectBuffer getMetaBufferStream() { - return metaCircularObjectBuffer; - } - - public int getRate() { - return rate; - } -} +package sound.producer; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.Socket; +import java.net.URL; + +import sound.Format; +import sound.Producer; +import sound.stream.HoardedInputStream; +import base.exception.worker.ActivateException; +import base.exception.worker.DeactivateException; +import base.work.Work; + +import com.Ostermiller.util.CircularByteBuffer; +import com.Ostermiller.util.CircularObjectBuffer; + +public class Stream extends Work implements Producer, Format.Mp3 { + public static final int STEP = 80; // in milliseconds + + protected String http; + protected Socket socket; + protected InputStream socketInputStream; + protected OutputStreamWriter socketOutputStreamWriter; + protected HoardedInputStream hoardedInputStream; + protected int meta; + protected int rate; + protected int chunk; + protected int untilMeta; + protected CircularByteBuffer audioCircularByteBuffer; + protected CircularObjectBuffer metaCircularObjectBuffer; + protected String metaData; + + public Stream(String http) { + super(); + this.http = http; + meta = -1; + rate = -1; + audioCircularByteBuffer = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE); + metaCircularObjectBuffer = new CircularObjectBuffer(); + } + + protected void connect(URL url) { + try { + /* Open socket communication */ + socket = new Socket(url.getHost(), url.getPort()); + socketInputStream = socket.getInputStream(); + socketOutputStreamWriter = new OutputStreamWriter(socket.getOutputStream()); + + /* Write stream request */ + if (url.getFile().equals("")) { + socketOutputStreamWriter.write("GET / HTTP/1.1\r\n"); + } else { + socketOutputStreamWriter.write("GET " + url.getFile() + " HTTP/1.1\r\n"); + } + socketOutputStreamWriter.write("Host: " + url.getHost() + "\r\n"); + //socketOutputStreamWriter.write("Icy-MetaData: 1\r\n"); + socketOutputStreamWriter.write("Connection: close\r\n"); + socketOutputStreamWriter.write("\r\n"); + socketOutputStreamWriter.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void activate() throws ActivateException { + try { + /* Initialize connection */ + URL url = new URL(http); + + /* Parse headers */ + connect(url); + InputStreamReader inputStreamReader = new InputStreamReader(socketInputStream); + StringBuffer stringBuffer = new StringBuffer(); + char character; + int skip = 0; + while ((character = (char) inputStreamReader.read()) > 0) { + ++skip; + if (character == '\n') { + /* Fetch relevant headers */ + String line = stringBuffer.toString().trim(); + if (line.startsWith("icy-metaint")) { + meta = Integer.valueOf(line.substring(line.indexOf(":") + 1).trim()); + } else if (line.startsWith("icy-br")) { + rate = Integer.valueOf(line.substring(line.indexOf(":") + 1).trim()); + } else if (line.equals("")) { + break; + } + stringBuffer = new StringBuffer(); + } else { + stringBuffer.append(character); + } + } + inputStreamReader.close(); + + /* Reconnect to bypass pre-buffering problems */ + connect(url); + socketInputStream = socket.getInputStream(); + socketInputStream.skip(skip); + } catch (IOException e) { + e.printStackTrace(); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + + /* Calculate streaming parameters */ + //untilMeta = meta; + chunk = STEP * rate / 8; + super.activate(); + } + + public void deactivate() throws DeactivateException { + super.deactivate(); + audioCircularByteBuffer.clear(); + metaCircularObjectBuffer.clear(); + try { + hoardedInputStream.clear(); + } catch (IOException e) { + logger.error("", e); + throw new DeactivateException(); + } + } + + public void work() { + int left = chunk; + + /* Handle media at appropriate times * + while (meta > 0 && left >= untilMeta) { + stream(untilMeta); + left -= untilMeta; + meta(); + untilMeta = meta; + }*/ + + /* Stream at fixed rate */ + stream(left); + //untilMeta -= left; + sleep(STEP); + } + + protected void stream(int length) { + try { + byte[] bytes = new byte[length]; + int read = 0; + while (length > 0 && (read = socketInputStream.read(bytes)) > 0) { + length -= read; + audioCircularByteBuffer.getOutputStream().write(bytes); + } + } catch (IOException e) { + logger.error(e.getMessage()); + stop(); + } + } + + protected void meta() { + try { + /* Retrieve data length */ + byte[] data = new byte[1]; + socketInputStream.read(data); + + int length = 16 * data[0]; + data = new byte[length]; + socketInputStream.read(data); + + /* Check for new data */ + String newMetaData = new String(data); + if (!newMetaData.isEmpty() && !newMetaData.equals(metaData)) { + metaData = newMetaData; + metaCircularObjectBuffer.write(new String(data)); + logger.debug("data: " + metaData); + } + return; + } catch (IOException e) { + logger.error("", e); + } catch (IllegalStateException e) { + logger.error("", e); + } catch (InterruptedException e) { + logger.error("", e); + } + stop(); + return; + } + + public InputStream getInputStream() { + if (hoardedInputStream == null) { + hoardedInputStream = new HoardedInputStream(audioCircularByteBuffer.getInputStream()); + } + return hoardedInputStream; + } + + public CircularObjectBuffer getMetaBufferStream() { + return metaCircularObjectBuffer; + } + + public int getRate() { + return rate; + } +} diff --git a/java/sound/src/main/java/sound/producer/Target.java b/java/exec.sound/src/main/java/sound/producer/Target.java similarity index 96% rename from java/sound/src/main/java/sound/producer/Target.java rename to java/exec.sound/src/main/java/sound/producer/Target.java index e8b1412..35c592b 100644 --- a/java/sound/src/main/java/sound/producer/Target.java +++ b/java/exec.sound/src/main/java/sound/producer/Target.java @@ -1,97 +1,97 @@ -package sound.producer; - -import java.io.IOException; -import java.io.InputStream; - -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.TargetDataLine; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import sound.Format; -import sound.Producer; -import sound.stream.HoardedInputStream; -import sound.util.Tool; - -public class Target implements Producer, Format.Standard { - protected Logger logger = LoggerFactory.getLogger(getClass()); - - protected Standard format; - - protected TargetDataLine line; - protected InputStream targetInputStream; - protected HoardedInputStream hoardedInputStream; - - protected AudioFormat audioFormat; - - public Target(String name) throws LineUnavailableException { - logger.debug(String.format("Target \"%s\" without format", name)); - line = Tool.getTargetDataLine(name); - audioFormat = line.getFormat(); - targetInputStream = new TargetInputStream(); - } - - public Target(String name, AudioFormat audioFormat) throws LineUnavailableException { - logger.debug(String.format("Target \"%s\" with format: %s", name, audioFormat)); - this.audioFormat = audioFormat; - line = Tool.getTargetDataLine(name, audioFormat); - targetInputStream = new TargetInputStream(); - } - - public AudioFormat getAudioFormat() { - return audioFormat; - } - - public InputStream getInputStream() { - return targetInputStream; - } - - public class TargetInputStream extends InputStream { - protected boolean open; - - public TargetInputStream() { - open = false; - } - - public int read() throws IOException { - start(); - byte[] buffer = new byte[1]; - line.read(buffer, 0, 1); - return (int) buffer[0]; - } - - public int read(byte[] buffer, int offset, int length) { - start(); - line.read(buffer, offset, length); - return length; - } - - public int available() { - start(); - return line.available(); - } - } - - public void start() { - if (!line.isOpen()) { - try { - line.open(); - } catch (LineUnavailableException e) { - logger.error("", e); - } - } - if (!line.isRunning()) { - line.start(); - } - } - - public void stop() { - line.flush(); - } - - public void exit() { - line.close(); - } -} +package sound.producer; + +import java.io.IOException; +import java.io.InputStream; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.TargetDataLine; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import sound.Format; +import sound.Producer; +import sound.stream.HoardedInputStream; +import sound.util.Tool; + +public class Target implements Producer, Format.Standard { + protected Logger logger = LoggerFactory.getLogger(getClass()); + + protected Standard format; + + protected TargetDataLine line; + protected InputStream targetInputStream; + protected HoardedInputStream hoardedInputStream; + + protected AudioFormat audioFormat; + + public Target(String name) throws LineUnavailableException { + logger.debug(String.format("Target \"%s\" without format", name)); + line = Tool.getTargetDataLine(name); + audioFormat = line.getFormat(); + targetInputStream = new TargetInputStream(); + } + + public Target(String name, AudioFormat audioFormat) throws LineUnavailableException { + logger.debug(String.format("Target \"%s\" with format: %s", name, audioFormat)); + this.audioFormat = audioFormat; + line = Tool.getTargetDataLine(name, audioFormat); + targetInputStream = new TargetInputStream(); + } + + public AudioFormat getAudioFormat() { + return audioFormat; + } + + public InputStream getInputStream() { + return targetInputStream; + } + + public class TargetInputStream extends InputStream { + protected boolean open; + + public TargetInputStream() { + open = false; + } + + public int read() throws IOException { + start(); + byte[] buffer = new byte[1]; + line.read(buffer, 0, 1); + return (int) buffer[0]; + } + + public int read(byte[] buffer, int offset, int length) { + start(); + line.read(buffer, offset, length); + return length; + } + + public int available() { + start(); + return line.available(); + } + } + + public void start() { + if (!line.isOpen()) { + try { + line.open(); + } catch (LineUnavailableException e) { + logger.error("", e); + } + } + if (!line.isRunning()) { + line.start(); + } + } + + public void stop() { + line.flush(); + } + + public void exit() { + line.close(); + } +} diff --git a/java/sound/src/main/java/sound/stream/HoardedInputStream.java b/java/exec.sound/src/main/java/sound/stream/HoardedInputStream.java similarity index 96% rename from java/sound/src/main/java/sound/stream/HoardedInputStream.java rename to java/exec.sound/src/main/java/sound/stream/HoardedInputStream.java index bc94391..fd6924c 100644 --- a/java/sound/src/main/java/sound/stream/HoardedInputStream.java +++ b/java/exec.sound/src/main/java/sound/stream/HoardedInputStream.java @@ -1,76 +1,76 @@ -package sound.stream; - -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class HoardedInputStream extends BufferedInputStream { - protected Logger logger = LoggerFactory.getLogger(getClass()); - - protected static final int SLEEP = 500; // in milliseconds - protected static final int BUFFER_SIZE = 30000; // in bytes - protected static final int MINIMUM_SIZE = 1000; // in bytes - - protected int bufferSize; - protected int minimumSize; - protected boolean hoard; - - public HoardedInputStream(InputStream inputStream) { - this(inputStream, BUFFER_SIZE, MINIMUM_SIZE); - } - - public HoardedInputStream(InputStream inputStream, int bufferSize) { - super(inputStream, bufferSize); - this.bufferSize = bufferSize; - hoard = true; - } - - public HoardedInputStream(InputStream inputStream, int bufferSize, int minimumSize) { - this(inputStream, bufferSize); - this.minimumSize = minimumSize; - } - - public int read() throws IOException { - hoard(); - byte[] buffer = new byte[1]; - in.read(buffer, 0, 1); - return (int) buffer[0]; - } - - public int read(byte[] buffer, int offset, int length) throws IOException { - hoard(); - in.read(buffer, offset, length); - return length; - } - - public void hoard() throws IOException { - int available = available(); - if (hoard && available < MINIMUM_SIZE) { - long time = System.currentTimeMillis(); - do { - try { - Thread.sleep(SLEEP); - } catch (InterruptedException e) { - logger.warn("", e); - } - } while (available() < BUFFER_SIZE); - logger.debug(String.format("Buffered %d bytes in %s milliseconds", BUFFER_SIZE - available, System.currentTimeMillis() - time)); - } - } - - public void clear() throws IOException { - this.buf = new byte[buf.length]; - reset(); - } - - public void drain() { - drain(true); - } - - public void drain(boolean drain) { - hoard = !drain; - } -} +package sound.stream; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class HoardedInputStream extends BufferedInputStream { + protected Logger logger = LoggerFactory.getLogger(getClass()); + + protected static final int SLEEP = 500; // in milliseconds + protected static final int BUFFER_SIZE = 30000; // in bytes + protected static final int MINIMUM_SIZE = 1000; // in bytes + + protected int bufferSize; + protected int minimumSize; + protected boolean hoard; + + public HoardedInputStream(InputStream inputStream) { + this(inputStream, BUFFER_SIZE, MINIMUM_SIZE); + } + + public HoardedInputStream(InputStream inputStream, int bufferSize) { + super(inputStream, bufferSize); + this.bufferSize = bufferSize; + hoard = true; + } + + public HoardedInputStream(InputStream inputStream, int bufferSize, int minimumSize) { + this(inputStream, bufferSize); + this.minimumSize = minimumSize; + } + + public int read() throws IOException { + hoard(); + byte[] buffer = new byte[1]; + in.read(buffer, 0, 1); + return (int) buffer[0]; + } + + public int read(byte[] buffer, int offset, int length) throws IOException { + hoard(); + in.read(buffer, offset, length); + return length; + } + + public void hoard() throws IOException { + int available = available(); + if (hoard && available < MINIMUM_SIZE) { + long time = System.currentTimeMillis(); + do { + try { + Thread.sleep(SLEEP); + } catch (InterruptedException e) { + logger.warn("", e); + } + } while (available() < BUFFER_SIZE); + logger.debug(String.format("Buffered %d bytes in %s milliseconds", BUFFER_SIZE - available, System.currentTimeMillis() - time)); + } + } + + public void clear() throws IOException { + this.buf = new byte[buf.length]; + reset(); + } + + public void drain() { + drain(true); + } + + public void drain(boolean drain) { + hoard = !drain; + } +} diff --git a/java/sound/src/main/java/sound/util/Buffer.java b/java/exec.sound/src/main/java/sound/util/Buffer.java similarity index 100% rename from java/sound/src/main/java/sound/util/Buffer.java rename to java/exec.sound/src/main/java/sound/util/Buffer.java diff --git a/java/sound/src/main/java/sound/util/SoxBuilder.java b/java/exec.sound/src/main/java/sound/util/SoxBuilder.java similarity index 97% rename from java/sound/src/main/java/sound/util/SoxBuilder.java rename to java/exec.sound/src/main/java/sound/util/SoxBuilder.java index 4e3f1ef..0ea367d 100644 --- a/java/sound/src/main/java/sound/util/SoxBuilder.java +++ b/java/exec.sound/src/main/java/sound/util/SoxBuilder.java @@ -1,321 +1,321 @@ -package sound.util; - -import java.util.HashMap; -import java.util.Map.Entry; - -import javax.sound.sampled.AudioFormat; - -import sound.util.SoxBuilder.Option.Combine; -import sound.util.SoxBuilder.Option.Replay; - -public final class SoxBuilder { - protected static SoxBuilder instance; - protected static HashMap optionMap; - protected static String files; - protected static String effects; - - static { - instance = new SoxBuilder(); - reset(); - } - - public static void reset() { - optionMap = new HashMap(); - files = ""; - effects = ""; - } - - public static SoxBuilder setOption(Option option, String value) { - optionMap.put(option.getCode(), value); - return instance; - } - - public static SoxBuilder setOption(Option option) { - return SoxBuilder.setOption(option, ""); - } - - public static SoxBuilder setOption(Option option, int value) { - return SoxBuilder.setOption(option, String.valueOf(value)); - } - - public static SoxBuilder setOption(Option option, Combine combine) { - return SoxBuilder.setOption(option, combine.getCode()); - } - - public static SoxBuilder setOption(Combine combine) { - return SoxBuilder.setOption(Option.COMBINE, combine); - } - - public static SoxBuilder setOption(Option option, Replay replay) { - return SoxBuilder.setOption(option, replay.toString().toLowerCase()); - } - - public static SoxBuilder setOption(Replay replay) { - return SoxBuilder.setOption(Option.REPLAY, replay); - } - - public static SoxBuilder addFile(File file) { - files = String.format("%s %s", files, file.build()); - return instance; - } - - public static SoxBuilder addEffect(Effect effect) { - effects = String.format("%s %s", effects, effect.build()); - return instance; - } - - public String build() { - String build = "sox"; - for (Entry entry : optionMap.entrySet()) { - String value = entry.getValue(); - if (value.equals("")) { - build = String.format("%s %s", build, entry.getKey()); - } else { - String option = String.format("%s %s", entry.getKey(), value); - build = String.format("%s %s", build, option); - } - } - build = String.format("%s%s%s", build, files, effects); - reset(); - return build; - } - - public enum Environment { - AUDIODRIVER, AUDIODEV - } - - public enum Option { - BUFFER ("--buffer"), // default=8192 - INPUT_BUFFER ("--input-buffer"), - CLOBBER ("--clobber"), - COMBINE ("--combine"), // |Combine| - NO_DITHER ("--no-dither"), // (-D) - EFFECTS_FILE ("--efects-file"), - GUARD ("--guard"), // (-G) - MIX ("-m"), // (--combine mix) - MERGE ("-M"), // (--combine merge) - MAGIC ("--magic"), - MULTI_THREADED ("--multi-threaded"), - SINGLE_THREADED ("--single-threaded"), - NORM ("--norm"), // [=dB-level] - PLAY_RATE_ARG ("--play-rate-arg"), - QUIET ("--no-show-progress"), // (-q) - REPEATABLE ("-R"), - REPLAY ("--replay-gain"), // |Replay| - MULTIPLY ("-T"), // (--combine multiply) - TEMP ("--temp"); - - protected String code; - - private Option(String code) { - this.code = code; - } - - public String getCode() { - return code; - } - - public enum Combine { - CONCATENATE ("concatenate"), - MERGE ("merge"), // (-M) - MIX ("mix"), // (-m) - MIX_POWER ("mix-power"), - MULTIPLY ("multiply"), // (-T) - SEQUENCE ("sequence"); - - protected String code; - - private Combine(String code) { - this.code = code; - } - - public String getCode() { - return code; - } - } - - public enum Replay { - TRACK, ALBUM, OFF - } - } - - public static class File { - protected static File instance; - - protected static HashMap optionMap; - protected static Type type; - - static { - instance = new File(); - reset(); - } - - public static void reset() { - optionMap = new HashMap(); - type = Type.PIPE; - } - - public static File setOption(Option option, String value) { - optionMap.put(option.getCode(), value); - return instance; - } - - public static File setOption(Option option) { - return File.setOption(option, ""); - } - - public static File setOption(Option option, int value) { - return File.setOption(option, String.valueOf(value)); - } - - public static File setOption(Option option, Encoding encoding) { - return File.setOption(option, encoding.getCode()); - } - - public static File setOption(Encoding encoding) { - return File.setOption(Option.ENCODING, encoding); - } - - public static File setOption(Option option, Format format) { - return File.setOption(option, format.toString().toLowerCase()); - } - - public static File setOption( Format format) { - return File.setOption(Option.FORMAT, format); - } - - public static File setOption(Option option, Endian endian) { - return File.setOption(option, endian.toString().toLowerCase()); - } - - public static File setOption(Endian endian) { - return File.setOption(Option.ENDIAN, endian); - } - - public File setOptions(AudioFormat audioFormat) { - setOption(Option.CHANNELS, audioFormat.getChannels()); - setOption(Option.RATE, String.format("%sk", String.valueOf(audioFormat.getSampleRate() / 1000f))); - AudioFormat.Encoding encoding = audioFormat.getEncoding(); - int bits = audioFormat.getSampleSizeInBits(); - if (encoding.equals(AudioFormat.Encoding.ALAW)) { - setOption(Format.AL); - setOption(Encoding.A_LAW); - } else if (encoding.equals(AudioFormat.Encoding.ULAW)) { - setOption(Format.UL); - setOption(Encoding.U_LAW); - } else if (encoding.equals(AudioFormat.Encoding.PCM_SIGNED)) { - setOption(Format.valueOf(String.format("S%d", bits))); - setOption(Encoding.SIGNED_INTEGER); - } else if (encoding.equals(AudioFormat.Encoding.PCM_UNSIGNED)) { - setOption(Format.valueOf(String.format("U%d", bits))); - setOption(Encoding.UNSIGNED_INTEGER); - } - setOption(audioFormat.isBigEndian() ? Endian.BIG : Endian.LITTLE); - return instance; - } - - public static File setType(Type type) { - File.type = type; - return instance; - } - - public String build() { - String build = type.getCode(); - for (Entry entry : optionMap.entrySet()) { - String value = entry.getValue(); - if (value.equals("")) { - build = String.format("%s %s", entry.getKey(), build); - } else { - String option = String.format("%s %s", entry.getKey(), value); - build = String.format("%s %s", option, build); - } - } - reset(); - return build; - } - - public enum Option { - BITS ("--bits"), // (-b) - CHANNELS ("--channels"), // (-c) - ENCODING ("--encoding"), // (-e), |Encoding| - NO_GLOB ("--no-glob"), - RATE ("--rate"), // (-r) - FORMAT ("--type"), // (-t), |Format| - ENDIAN ("--endian"), // (-L, -B, -x), |Endian| - REVERSE_NIBBLES ("--reverse-nibbles"), // (-N) - REVERSE_BITS ("--reverse-bits"), // (-X) - /* Input only */ - IGNORE_LENGTH ("--ignore-length"), - VOLUME ("--volume"), // (-v) - /* Output only */ - ADD_COMMENT ("--add-comment"), - COMMENT ("--comment"), - COMMENT_FILE ("--comment-file"), - COMPRESSION ("--compression"); // -C - - protected String code; - - private Option(String code) { - this.code = code; - } - - public String getCode() { - return code; - } - } - - public enum Encoding { - SIGNED_INTEGER ("signed-integer"), // PCM data stored as signed integers - UNSIGNED_INTEGER ("unsigned-integer"), // PCM data stored as unsigned integers - FLOATING_POINT ("floating-point"), // PCM data stored as single precision (32-bit) or double precision (64-bit) floating-point numbers - A_LAW ("a-lawW"), // International telephony standard for logarithmic encoding to 8 bits per sample (~13-bit PCM) - U_LAW ("u-law"), // North American telephony standard for logarithmic encoding to 8 bits per sample (~14-bit PCM) - MU_LAW ("mu-law"), // alias for u-law (~14-bit PCM) - OKI_ADPCM ("oki-adpcm"), // OKI (VOX, Dialogic or Intel) 4-bit ADPCM (~12-bit PCM) - IMA_ADPCM ("ima-adpcm"), // IMA (DVI) 4-bit ADPCM (~13-bit PCM) - MS_ADPCM ("ms-adpcm"), // Microsoft 4-bit ADPCM (~14-bit PCM) - GSM_FULL_RATE ("gsm-full-rate"); // Several audio formats used for digital wireless telephone calls - - protected String code; - - private Encoding(String code) { - this.code = code; - } - - public String getCode() { - return code; - } - } - - public enum Format { - AIF, AIFC, AIFF, AIFFC, AL, AMB, AMR, ANY, ARL, AU, AVR, BIN, CAF, CDDA, CDR, CVS, CVSD, CVU, DAT, DVMS, EDU, F32, F64, FAP, FLAC, FSSD, GSM, GSRT, HCOM, HTK, IMA, IRCAM, LA, LPC, LPC10, LU, M3U, M4A, MAT, MAT4, MAT5, MAUD, MP2, MP3, MP4, NIST, OGG, PAF, PLS, PRC, PVF, RAW, S16, S24, S32, S8, SD2, SDS, SF, SLN, SMP, SND, SNDR, SNDT, SOU, SOX, SPH, TXW, U16, U24, U32, U8, UL, VMS, VOC, VORBIS, VOX, W64, WAV, WAVPCM, WV, WVE, XA, XI; - } - - public enum Endian { - LITTLE, BIG, SWAP; - } - - public enum Type { - STANDARD ("-"), // -t must be given - PIPE ("-p"), // (--sox-pipe) - DEVICE ("-d"), // (--default-device) - NULL ("-n"); // (--null) - - protected String code; - - private Type(String code) { - this.code = code; - } - - public String getCode() { - return code; - } - } - } - - public class Effect { - public String build() { - return null; - } - } -} +package sound.util; + +import java.util.HashMap; +import java.util.Map.Entry; + +import javax.sound.sampled.AudioFormat; + +import sound.util.SoxBuilder.Option.Combine; +import sound.util.SoxBuilder.Option.Replay; + +public final class SoxBuilder { + protected static SoxBuilder instance; + protected static HashMap optionMap; + protected static String files; + protected static String effects; + + static { + instance = new SoxBuilder(); + reset(); + } + + public static void reset() { + optionMap = new HashMap(); + files = ""; + effects = ""; + } + + public static SoxBuilder setOption(Option option, String value) { + optionMap.put(option.getCode(), value); + return instance; + } + + public static SoxBuilder setOption(Option option) { + return SoxBuilder.setOption(option, ""); + } + + public static SoxBuilder setOption(Option option, int value) { + return SoxBuilder.setOption(option, String.valueOf(value)); + } + + public static SoxBuilder setOption(Option option, Combine combine) { + return SoxBuilder.setOption(option, combine.getCode()); + } + + public static SoxBuilder setOption(Combine combine) { + return SoxBuilder.setOption(Option.COMBINE, combine); + } + + public static SoxBuilder setOption(Option option, Replay replay) { + return SoxBuilder.setOption(option, replay.toString().toLowerCase()); + } + + public static SoxBuilder setOption(Replay replay) { + return SoxBuilder.setOption(Option.REPLAY, replay); + } + + public static SoxBuilder addFile(File file) { + files = String.format("%s %s", files, file.build()); + return instance; + } + + public static SoxBuilder addEffect(Effect effect) { + effects = String.format("%s %s", effects, effect.build()); + return instance; + } + + public String build() { + String build = "sox"; + for (Entry entry : optionMap.entrySet()) { + String value = entry.getValue(); + if (value.equals("")) { + build = String.format("%s %s", build, entry.getKey()); + } else { + String option = String.format("%s %s", entry.getKey(), value); + build = String.format("%s %s", build, option); + } + } + build = String.format("%s%s%s", build, files, effects); + reset(); + return build; + } + + public enum Environment { + AUDIODRIVER, AUDIODEV + } + + public enum Option { + BUFFER ("--buffer"), // default=8192 + INPUT_BUFFER ("--input-buffer"), + CLOBBER ("--clobber"), + COMBINE ("--combine"), // |Combine| + NO_DITHER ("--no-dither"), // (-D) + EFFECTS_FILE ("--efects-file"), + GUARD ("--guard"), // (-G) + MIX ("-m"), // (--combine mix) + MERGE ("-M"), // (--combine merge) + MAGIC ("--magic"), + MULTI_THREADED ("--multi-threaded"), + SINGLE_THREADED ("--single-threaded"), + NORM ("--norm"), // [=dB-level] + PLAY_RATE_ARG ("--play-rate-arg"), + QUIET ("--no-show-progress"), // (-q) + REPEATABLE ("-R"), + REPLAY ("--replay-gain"), // |Replay| + MULTIPLY ("-T"), // (--combine multiply) + TEMP ("--temp"); + + protected String code; + + private Option(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + + public enum Combine { + CONCATENATE ("concatenate"), + MERGE ("merge"), // (-M) + MIX ("mix"), // (-m) + MIX_POWER ("mix-power"), + MULTIPLY ("multiply"), // (-T) + SEQUENCE ("sequence"); + + protected String code; + + private Combine(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + } + + public enum Replay { + TRACK, ALBUM, OFF + } + } + + public static class File { + protected static File instance; + + protected static HashMap optionMap; + protected static Type type; + + static { + instance = new File(); + reset(); + } + + public static void reset() { + optionMap = new HashMap(); + type = Type.PIPE; + } + + public static File setOption(Option option, String value) { + optionMap.put(option.getCode(), value); + return instance; + } + + public static File setOption(Option option) { + return File.setOption(option, ""); + } + + public static File setOption(Option option, int value) { + return File.setOption(option, String.valueOf(value)); + } + + public static File setOption(Option option, Encoding encoding) { + return File.setOption(option, encoding.getCode()); + } + + public static File setOption(Encoding encoding) { + return File.setOption(Option.ENCODING, encoding); + } + + public static File setOption(Option option, Format format) { + return File.setOption(option, format.toString().toLowerCase()); + } + + public static File setOption( Format format) { + return File.setOption(Option.FORMAT, format); + } + + public static File setOption(Option option, Endian endian) { + return File.setOption(option, endian.toString().toLowerCase()); + } + + public static File setOption(Endian endian) { + return File.setOption(Option.ENDIAN, endian); + } + + public File setOptions(AudioFormat audioFormat) { + setOption(Option.CHANNELS, audioFormat.getChannels()); + setOption(Option.RATE, String.format("%sk", String.valueOf(audioFormat.getSampleRate() / 1000f))); + AudioFormat.Encoding encoding = audioFormat.getEncoding(); + int bits = audioFormat.getSampleSizeInBits(); + if (encoding.equals(AudioFormat.Encoding.ALAW)) { + setOption(Format.AL); + setOption(Encoding.A_LAW); + } else if (encoding.equals(AudioFormat.Encoding.ULAW)) { + setOption(Format.UL); + setOption(Encoding.U_LAW); + } else if (encoding.equals(AudioFormat.Encoding.PCM_SIGNED)) { + setOption(Format.valueOf(String.format("S%d", bits))); + setOption(Encoding.SIGNED_INTEGER); + } else if (encoding.equals(AudioFormat.Encoding.PCM_UNSIGNED)) { + setOption(Format.valueOf(String.format("U%d", bits))); + setOption(Encoding.UNSIGNED_INTEGER); + } + setOption(audioFormat.isBigEndian() ? Endian.BIG : Endian.LITTLE); + return instance; + } + + public static File setType(Type type) { + File.type = type; + return instance; + } + + public String build() { + String build = type.getCode(); + for (Entry entry : optionMap.entrySet()) { + String value = entry.getValue(); + if (value.equals("")) { + build = String.format("%s %s", entry.getKey(), build); + } else { + String option = String.format("%s %s", entry.getKey(), value); + build = String.format("%s %s", option, build); + } + } + reset(); + return build; + } + + public enum Option { + BITS ("--bits"), // (-b) + CHANNELS ("--channels"), // (-c) + ENCODING ("--encoding"), // (-e), |Encoding| + NO_GLOB ("--no-glob"), + RATE ("--rate"), // (-r) + FORMAT ("--type"), // (-t), |Format| + ENDIAN ("--endian"), // (-L, -B, -x), |Endian| + REVERSE_NIBBLES ("--reverse-nibbles"), // (-N) + REVERSE_BITS ("--reverse-bits"), // (-X) + /* Input only */ + IGNORE_LENGTH ("--ignore-length"), + VOLUME ("--volume"), // (-v) + /* Output only */ + ADD_COMMENT ("--add-comment"), + COMMENT ("--comment"), + COMMENT_FILE ("--comment-file"), + COMPRESSION ("--compression"); // -C + + protected String code; + + private Option(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + } + + public enum Encoding { + SIGNED_INTEGER ("signed-integer"), // PCM data stored as signed integers + UNSIGNED_INTEGER ("unsigned-integer"), // PCM data stored as unsigned integers + FLOATING_POINT ("floating-point"), // PCM data stored as single precision (32-bit) or double precision (64-bit) floating-point numbers + A_LAW ("a-lawW"), // International telephony standard for logarithmic encoding to 8 bits per sample (~13-bit PCM) + U_LAW ("u-law"), // North American telephony standard for logarithmic encoding to 8 bits per sample (~14-bit PCM) + MU_LAW ("mu-law"), // alias for u-law (~14-bit PCM) + OKI_ADPCM ("oki-adpcm"), // OKI (VOX, Dialogic or Intel) 4-bit ADPCM (~12-bit PCM) + IMA_ADPCM ("ima-adpcm"), // IMA (DVI) 4-bit ADPCM (~13-bit PCM) + MS_ADPCM ("ms-adpcm"), // Microsoft 4-bit ADPCM (~14-bit PCM) + GSM_FULL_RATE ("gsm-full-rate"); // Several audio formats used for digital wireless telephone calls + + protected String code; + + private Encoding(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + } + + public enum Format { + AIF, AIFC, AIFF, AIFFC, AL, AMB, AMR, ANY, ARL, AU, AVR, BIN, CAF, CDDA, CDR, CVS, CVSD, CVU, DAT, DVMS, EDU, F32, F64, FAP, FLAC, FSSD, GSM, GSRT, HCOM, HTK, IMA, IRCAM, LA, LPC, LPC10, LU, M3U, M4A, MAT, MAT4, MAT5, MAUD, MP2, MP3, MP4, NIST, OGG, PAF, PLS, PRC, PVF, RAW, S16, S24, S32, S8, SD2, SDS, SF, SLN, SMP, SND, SNDR, SNDT, SOU, SOX, SPH, TXW, U16, U24, U32, U8, UL, VMS, VOC, VORBIS, VOX, W64, WAV, WAVPCM, WV, WVE, XA, XI; + } + + public enum Endian { + LITTLE, BIG, SWAP; + } + + public enum Type { + STANDARD ("-"), // -t must be given + PIPE ("-p"), // (--sox-pipe) + DEVICE ("-d"), // (--default-device) + NULL ("-n"); // (--null) + + protected String code; + + private Type(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + } + } + + public class Effect { + public String build() { + return null; + } + } +} diff --git a/java/sound/src/main/java/sound/util/Tool.java b/java/exec.sound/src/main/java/sound/util/Tool.java similarity index 97% rename from java/sound/src/main/java/sound/util/Tool.java rename to java/exec.sound/src/main/java/sound/util/Tool.java index d5a654f..5b08471 100644 --- a/java/sound/src/main/java/sound/util/Tool.java +++ b/java/exec.sound/src/main/java/sound/util/Tool.java @@ -1,140 +1,140 @@ -package sound.util; - -import java.util.ArrayList; -import java.util.HashMap; - -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.DataLine; -import javax.sound.sampled.Line; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.Mixer; -import javax.sound.sampled.Port; -import javax.sound.sampled.Port.Info; -import javax.sound.sampled.SourceDataLine; -import javax.sound.sampled.TargetDataLine; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class Tool { - protected static Logger logger = LoggerFactory.getLogger(Tool.class); - - protected static HashMap> targetMap; - protected static HashMap> sourceMap; - protected static ArrayList portList; - - protected static ArrayList targetList; - protected static ArrayList sourceList; - - static { - Tool tool = new Tool(); - - targetMap = new HashMap>(); - sourceMap = new HashMap>(); - targetList = new ArrayList(); - sourceList = new ArrayList(); - portList = new ArrayList(); - - for (Mixer.Info mixerInfo : AudioSystem.getMixerInfo()) { - String name = mixerInfo.getName(); - Mixer mixer = AudioSystem.getMixer(mixerInfo); - - for (Line.Info lineInfo : mixer.getSourceLineInfo()) { - String lineClassName = lineInfo.getLineClass().getName(); - if (lineClassName.equals("javax.sound.sampled.SourceDataLine")) { - if (mixer.isLineSupported(lineInfo)) { - logger.debug(" " + name); - sourceMap.put(name, tool.new Device(mixer, lineInfo)); - } - } - } - for (Line.Info lineInfo : mixer.getTargetLineInfo()) { - String lineClassName = lineInfo.getLineClass().getName(); - if (lineClassName.equals("javax.sound.sampled.TargetDataLine")) { - if (mixer.isLineSupported(lineInfo)) { - logger.debug(" " + name); - targetMap.put(name, tool.new Device(mixer, lineInfo)); - } - } else if (lineClassName.equals("javax.sound.sampled.Port")) { - name = name.substring(5); - try { - Port port = (Port) mixer.getLine(lineInfo); - Port.Info portInfo = (Info) port.getLineInfo(); - if (!targetMap.containsKey(name) || portInfo.equals(Port.Info.LINE_OUT) || portInfo.equals(Port.Info.SPEAKER)) { - logger.debug(" " + name); - portList.add(name); - } - } catch (LineUnavailableException e) { - logger.error("", e); - } - } - } - } - } - - public static String[] getTargets() { - return targetMap.keySet().toArray(new String[0]); - } - - public static String[] getSources() { - return sourceMap.keySet().toArray(new String[0]); - } - - public static String[] getPorts() { - return portList.toArray(new String[0]); - } - - public static TargetDataLine getTargetDataLine(String name) throws LineUnavailableException { - if (targetMap.containsKey(name)) { - return targetMap.get(name).getLine(); - } else { - throw new LineUnavailableException(); - } - } - - public static TargetDataLine getTargetDataLine(String name, AudioFormat audioFormat) throws LineUnavailableException { - if (targetMap.containsKey(name)) { - return targetMap.get(name).getLine(audioFormat); - } else { - throw new LineUnavailableException(); - } - } - - public static SourceDataLine getSourceDataLine(String name) throws LineUnavailableException { - if (sourceMap.containsKey(name)) { - return sourceMap.get(name).getLine(); - } else { - throw new LineUnavailableException(); - } - } - - public static SourceDataLine getSourceDataLine(String name, AudioFormat audioFormat) throws LineUnavailableException { - if (sourceMap.containsKey(name)) { - return sourceMap.get(name).getLine(audioFormat); - } else { - throw new LineUnavailableException(); - } - } - - public class Device { - protected Mixer mixer; - protected Line.Info lineInfo; - - public Device(Mixer mixer, Line.Info lineInfo) { - this.mixer = mixer; - this.lineInfo = lineInfo; - } - - @SuppressWarnings("unchecked") - public T getLine() throws LineUnavailableException { - return (T) mixer.getLine(lineInfo); - } - - @SuppressWarnings("unchecked") - public T getLine(AudioFormat audioFormat) throws LineUnavailableException { - DataLine.Info dataLineInfo = new DataLine.Info(lineInfo.getLineClass(), audioFormat); - return (T) mixer.getLine(dataLineInfo); - } - } -} +package sound.util; + +import java.util.ArrayList; +import java.util.HashMap; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.DataLine; +import javax.sound.sampled.Line; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.Mixer; +import javax.sound.sampled.Port; +import javax.sound.sampled.Port.Info; +import javax.sound.sampled.SourceDataLine; +import javax.sound.sampled.TargetDataLine; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Tool { + protected static Logger logger = LoggerFactory.getLogger(Tool.class); + + protected static HashMap> targetMap; + protected static HashMap> sourceMap; + protected static ArrayList portList; + + protected static ArrayList targetList; + protected static ArrayList sourceList; + + static { + Tool tool = new Tool(); + + targetMap = new HashMap>(); + sourceMap = new HashMap>(); + targetList = new ArrayList(); + sourceList = new ArrayList(); + portList = new ArrayList(); + + for (Mixer.Info mixerInfo : AudioSystem.getMixerInfo()) { + String name = mixerInfo.getName(); + Mixer mixer = AudioSystem.getMixer(mixerInfo); + + for (Line.Info lineInfo : mixer.getSourceLineInfo()) { + String lineClassName = lineInfo.getLineClass().getName(); + if (lineClassName.equals("javax.sound.sampled.SourceDataLine")) { + if (mixer.isLineSupported(lineInfo)) { + logger.debug(" " + name); + sourceMap.put(name, tool.new Device(mixer, lineInfo)); + } + } + } + for (Line.Info lineInfo : mixer.getTargetLineInfo()) { + String lineClassName = lineInfo.getLineClass().getName(); + if (lineClassName.equals("javax.sound.sampled.TargetDataLine")) { + if (mixer.isLineSupported(lineInfo)) { + logger.debug(" " + name); + targetMap.put(name, tool.new Device(mixer, lineInfo)); + } + } else if (lineClassName.equals("javax.sound.sampled.Port")) { + name = name.substring(5); + try { + Port port = (Port) mixer.getLine(lineInfo); + Port.Info portInfo = (Info) port.getLineInfo(); + if (!targetMap.containsKey(name) || portInfo.equals(Port.Info.LINE_OUT) || portInfo.equals(Port.Info.SPEAKER)) { + logger.debug(" " + name); + portList.add(name); + } + } catch (LineUnavailableException e) { + logger.error("", e); + } + } + } + } + } + + public static String[] getTargets() { + return targetMap.keySet().toArray(new String[0]); + } + + public static String[] getSources() { + return sourceMap.keySet().toArray(new String[0]); + } + + public static String[] getPorts() { + return portList.toArray(new String[0]); + } + + public static TargetDataLine getTargetDataLine(String name) throws LineUnavailableException { + if (targetMap.containsKey(name)) { + return targetMap.get(name).getLine(); + } else { + throw new LineUnavailableException(); + } + } + + public static TargetDataLine getTargetDataLine(String name, AudioFormat audioFormat) throws LineUnavailableException { + if (targetMap.containsKey(name)) { + return targetMap.get(name).getLine(audioFormat); + } else { + throw new LineUnavailableException(); + } + } + + public static SourceDataLine getSourceDataLine(String name) throws LineUnavailableException { + if (sourceMap.containsKey(name)) { + return sourceMap.get(name).getLine(); + } else { + throw new LineUnavailableException(); + } + } + + public static SourceDataLine getSourceDataLine(String name, AudioFormat audioFormat) throws LineUnavailableException { + if (sourceMap.containsKey(name)) { + return sourceMap.get(name).getLine(audioFormat); + } else { + throw new LineUnavailableException(); + } + } + + public class Device { + protected Mixer mixer; + protected Line.Info lineInfo; + + public Device(Mixer mixer, Line.Info lineInfo) { + this.mixer = mixer; + this.lineInfo = lineInfo; + } + + @SuppressWarnings("unchecked") + public T getLine() throws LineUnavailableException { + return (T) mixer.getLine(lineInfo); + } + + @SuppressWarnings("unchecked") + public T getLine(AudioFormat audioFormat) throws LineUnavailableException { + DataLine.Info dataLineInfo = new DataLine.Info(lineInfo.getLineClass(), audioFormat); + return (T) mixer.getLine(dataLineInfo); + } + } +} diff --git a/java/sound/src/main/java/sound/util/Utils.java b/java/exec.sound/src/main/java/sound/util/Utils.java similarity index 96% rename from java/sound/src/main/java/sound/util/Utils.java rename to java/exec.sound/src/main/java/sound/util/Utils.java index 8aeb57e..5c535a0 100644 --- a/java/sound/src/main/java/sound/util/Utils.java +++ b/java/exec.sound/src/main/java/sound/util/Utils.java @@ -1,39 +1,39 @@ -package sound.util; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import javazoom.jl.decoder.JavaLayerException; -import javazoom.jl.player.Player; - -public class Utils { - public static final int BUFFER = 2048; // bytes - - public static void play(InputStream inputStream) { - try { - new Player(new BufferedInputStream(inputStream)).play(); - } catch (JavaLayerException e) { - e.printStackTrace(); - } - } - - public static void write(InputStream inputStream, File file) { - byte[] bytes = new byte[BUFFER]; - int read = 0; - try { - FileOutputStream fileOutputStream = new FileOutputStream(file); - while ((read = inputStream.read(bytes)) > 0) { - fileOutputStream.write(bytes, 0, read); - } - fileOutputStream.close(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } -} +package sound.util; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import javazoom.jl.decoder.JavaLayerException; +import javazoom.jl.player.Player; + +public class Utils { + public static final int BUFFER = 2048; // bytes + + public static void play(InputStream inputStream) { + try { + new Player(new BufferedInputStream(inputStream)).play(); + } catch (JavaLayerException e) { + e.printStackTrace(); + } + } + + public static void write(InputStream inputStream, File file) { + byte[] bytes = new byte[BUFFER]; + int read = 0; + try { + FileOutputStream fileOutputStream = new FileOutputStream(file); + while ((read = inputStream.read(bytes)) > 0) { + fileOutputStream.write(bytes, 0, read); + } + fileOutputStream.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/java/sound/src/main/java/test/SoundAudit.java b/java/exec.sound/src/main/java/test/SoundAudit.java similarity index 97% rename from java/sound/src/main/java/test/SoundAudit.java rename to java/exec.sound/src/main/java/test/SoundAudit.java index ee44f6a..9510034 100644 --- a/java/sound/src/main/java/test/SoundAudit.java +++ b/java/exec.sound/src/main/java/test/SoundAudit.java @@ -1,55 +1,55 @@ -package test; - -import javax.sound.sampled.*; -public class SoundAudit { - public static void main(String[] args) { try { - System.out.println("OS: "+System.getProperty("os.name")+" "+ - System.getProperty("os.version")+"/"+ - System.getProperty("os.arch")+"\nJava: "+ - System.getProperty("java.version")+" ("+ - System.getProperty("java.vendor")+")\n"); - for (Mixer.Info thisMixerInfo : AudioSystem.getMixerInfo()) { - System.out.println("Mixer: "+thisMixerInfo.getDescription()+ - " ["+thisMixerInfo.getName()+"]"); - Mixer thisMixer = AudioSystem.getMixer(thisMixerInfo); - for (Line.Info thisLineInfo:thisMixer.getSourceLineInfo()) { - if (thisLineInfo.getLineClass().getName().equals( - "javax.sound.sampled.Port")) { - Line thisLine = thisMixer.getLine(thisLineInfo); - thisLine.open(); - System.out.println(" Source Port: " - +thisLineInfo.toString()); - for (Control thisControl : thisLine.getControls()) { - System.out.println(AnalyzeControl(thisControl));} - thisLine.close();}} - for (Line.Info thisLineInfo:thisMixer.getTargetLineInfo()) { - if (thisLineInfo.getLineClass().getName().equals( - "javax.sound.sampled.Port")) { - Line thisLine = thisMixer.getLine(thisLineInfo); - thisLine.open(); - System.out.println(" Target Port: " - +thisLineInfo.toString()); - for (Control thisControl : thisLine.getControls()) { - System.out.println(AnalyzeControl(thisControl));} - thisLine.close();}}} - } catch (Exception e) {e.printStackTrace();}} - public static String AnalyzeControl(Control thisControl) { - String type = thisControl.getType().toString(); - if (thisControl instanceof BooleanControl) { - return " Control: "+type+" (boolean)"; } - if (thisControl instanceof CompoundControl) { - System.out.println(" Control: "+type+ - " (compound - values below)"); - String toReturn = ""; - for (Control children: - ((CompoundControl)thisControl).getMemberControls()) { - toReturn+=" "+AnalyzeControl(children)+"\n";} - return toReturn.substring(0, toReturn.length()-1);} - if (thisControl instanceof EnumControl) { - return " Control:"+type+" (enum: "+thisControl.toString()+")";} - if (thisControl instanceof FloatControl) { - return " Control: "+type+" (float: from "+ - ((FloatControl) thisControl).getMinimum()+" to "+ - ((FloatControl) thisControl).getMaximum()+")";} - return " Control: unknown type";} -} +package test; + +import javax.sound.sampled.*; +public class SoundAudit { + public static void main(String[] args) { try { + System.out.println("OS: "+System.getProperty("os.name")+" "+ + System.getProperty("os.version")+"/"+ + System.getProperty("os.arch")+"\nJava: "+ + System.getProperty("java.version")+" ("+ + System.getProperty("java.vendor")+")\n"); + for (Mixer.Info thisMixerInfo : AudioSystem.getMixerInfo()) { + System.out.println("Mixer: "+thisMixerInfo.getDescription()+ + " ["+thisMixerInfo.getName()+"]"); + Mixer thisMixer = AudioSystem.getMixer(thisMixerInfo); + for (Line.Info thisLineInfo:thisMixer.getSourceLineInfo()) { + if (thisLineInfo.getLineClass().getName().equals( + "javax.sound.sampled.Port")) { + Line thisLine = thisMixer.getLine(thisLineInfo); + thisLine.open(); + System.out.println(" Source Port: " + +thisLineInfo.toString()); + for (Control thisControl : thisLine.getControls()) { + System.out.println(AnalyzeControl(thisControl));} + thisLine.close();}} + for (Line.Info thisLineInfo:thisMixer.getTargetLineInfo()) { + if (thisLineInfo.getLineClass().getName().equals( + "javax.sound.sampled.Port")) { + Line thisLine = thisMixer.getLine(thisLineInfo); + thisLine.open(); + System.out.println(" Target Port: " + +thisLineInfo.toString()); + for (Control thisControl : thisLine.getControls()) { + System.out.println(AnalyzeControl(thisControl));} + thisLine.close();}}} + } catch (Exception e) {e.printStackTrace();}} + public static String AnalyzeControl(Control thisControl) { + String type = thisControl.getType().toString(); + if (thisControl instanceof BooleanControl) { + return " Control: "+type+" (boolean)"; } + if (thisControl instanceof CompoundControl) { + System.out.println(" Control: "+type+ + " (compound - values below)"); + String toReturn = ""; + for (Control children: + ((CompoundControl)thisControl).getMemberControls()) { + toReturn+=" "+AnalyzeControl(children)+"\n";} + return toReturn.substring(0, toReturn.length()-1);} + if (thisControl instanceof EnumControl) { + return " Control:"+type+" (enum: "+thisControl.toString()+")";} + if (thisControl instanceof FloatControl) { + return " Control: "+type+" (float: from "+ + ((FloatControl) thisControl).getMinimum()+" to "+ + ((FloatControl) thisControl).getMaximum()+")";} + return " Control: unknown type";} +} diff --git a/java/sound/src/main/java/test/Test.java b/java/exec.sound/src/main/java/test/Test.java similarity index 97% rename from java/sound/src/main/java/test/Test.java rename to java/exec.sound/src/main/java/test/Test.java index 9c0cda3..892471c 100644 --- a/java/sound/src/main/java/test/Test.java +++ b/java/exec.sound/src/main/java/test/Test.java @@ -1,40 +1,40 @@ -package test; - -import javax.sound.sampled.AudioFormat; - -import sound.Consumer; -import sound.Producer; -import sound.Source; -import sound.consumer.Port; -import sound.consumer.Shoutcast; -import sound.producer.Stream; - -public class Test { - public static void main(String[] args) { - AudioFormat audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 48000f, 16, 2, 4, 48000f, true); - try { - //Producer p1 = new Target("Line-In (Creative SB X-Fi)"); - //Producer p2 = new Target("Line 1 (Virtual Audio Cable)", audioFormat); - //p2.start(); - Producer p3 = new Stream("http://ics2gss.omroep.nl:80/3fm-bb-mp3"); - Producer p4 = new Stream("http://sc7.mystreamserver.com:8004"); - - Consumer c1 = new Source("Java Sound Audio Engine"); - Consumer c2 = new Port("Speakers (Creative SB X-Fi)"); - Consumer c3 = new Shoutcast(); - //Consumer c4 = new Player(); - //Consumer c5 = new Writer(new File("stream.out")); - - //Utils.write(p3.getInputStream(), new File("stream.out")); - //Utils.play(p3.getInputStream()); - c3.start(p4); - - //while (true) { - //Thread.sleep(300000); - //c1.stop(); - //} - } catch (Exception e) { - e.printStackTrace(); - } - } +package test; + +import javax.sound.sampled.AudioFormat; + +import sound.Consumer; +import sound.Producer; +import sound.Source; +import sound.consumer.Port; +import sound.consumer.Shoutcast; +import sound.producer.Stream; + +public class Test { + public static void main(String[] args) { + AudioFormat audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 48000f, 16, 2, 4, 48000f, true); + try { + //Producer p1 = new Target("Line-In (Creative SB X-Fi)"); + //Producer p2 = new Target("Line 1 (Virtual Audio Cable)", audioFormat); + //p2.start(); + Producer p3 = new Stream("http://ics2gss.omroep.nl:80/3fm-bb-mp3"); + Producer p4 = new Stream("http://sc7.mystreamserver.com:8004"); + + Consumer c1 = new Source("Java Sound Audio Engine"); + Consumer c2 = new Port("Speakers (Creative SB X-Fi)"); + Consumer c3 = new Shoutcast(); + //Consumer c4 = new Player(); + //Consumer c5 = new Writer(new File("stream.out")); + + //Utils.write(p3.getInputStream(), new File("stream.out")); + //Utils.play(p3.getInputStream()); + c3.start(p4); + + //while (true) { + //Thread.sleep(300000); + //c1.stop(); + //} + } catch (Exception e) { + e.printStackTrace(); + } + } } \ No newline at end of file diff --git a/java/sound/src/main/java/test/lines/Main.java b/java/exec.sound/src/main/java/test/lines/Main.java similarity index 97% rename from java/sound/src/main/java/test/lines/Main.java rename to java/exec.sound/src/main/java/test/lines/Main.java index 8c392ee..5209436 100644 --- a/java/sound/src/main/java/test/lines/Main.java +++ b/java/exec.sound/src/main/java/test/lines/Main.java @@ -1,34 +1,34 @@ -package test.lines; - -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.Line; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.Mixer; -import javax.sound.sampled.SourceDataLine; -import javax.sound.sampled.TargetDataLine; - -public class Main { - public static void main(String[] args) { - System.out.println(System.getProperty("javax.sound.sampled.SourceDataLine")); - - new AudioFormat(44100, 16, 2, true, false); - - for (Mixer.Info mixerInfo : AudioSystem.getMixerInfo()) { - Mixer mixer = AudioSystem.getMixer(mixerInfo); - for (Line.Info lineInfo : mixer.getTargetLineInfo()) { - try { - Line line = mixer.getLine(lineInfo); - if (mixer.isLineSupported(lineInfo)) { - if (line instanceof TargetDataLine) { - new TargetLine(mixer, (TargetDataLine) line); - }/* else if (line instanceof SourceDataLine) { - new SourceLine(mixer, (SourceDataLine) line); - }*/ - } - } catch (LineUnavailableException e) {} - } - - } - } -} +package test.lines; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.Line; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.Mixer; +import javax.sound.sampled.SourceDataLine; +import javax.sound.sampled.TargetDataLine; + +public class Main { + public static void main(String[] args) { + System.out.println(System.getProperty("javax.sound.sampled.SourceDataLine")); + + new AudioFormat(44100, 16, 2, true, false); + + for (Mixer.Info mixerInfo : AudioSystem.getMixerInfo()) { + Mixer mixer = AudioSystem.getMixer(mixerInfo); + for (Line.Info lineInfo : mixer.getTargetLineInfo()) { + try { + Line line = mixer.getLine(lineInfo); + if (mixer.isLineSupported(lineInfo)) { + if (line instanceof TargetDataLine) { + new TargetLine(mixer, (TargetDataLine) line); + }/* else if (line instanceof SourceDataLine) { + new SourceLine(mixer, (SourceDataLine) line); + }*/ + } + } catch (LineUnavailableException e) {} + } + + } + } +} diff --git a/java/sound/src/main/java/test/lines/SourceLine.java b/java/exec.sound/src/main/java/test/lines/SourceLine.java similarity index 96% rename from java/sound/src/main/java/test/lines/SourceLine.java rename to java/exec.sound/src/main/java/test/lines/SourceLine.java index cb6a157..56092d5 100644 --- a/java/sound/src/main/java/test/lines/SourceLine.java +++ b/java/exec.sound/src/main/java/test/lines/SourceLine.java @@ -1,19 +1,19 @@ -package test.lines; - -import javax.sound.sampled.Mixer; -import javax.sound.sampled.SourceDataLine; - -public class SourceLine { - //private Mixer mixer; - private SourceDataLine line; - - public SourceLine(Mixer mixer, SourceDataLine line) { - //this.mixer = mixer; - this.line = line; - System.out.println("SOURCE " + mixer.getMixerInfo().getName() + " || " + line.getLineInfo()); - } - - public int write(byte[] bytes, int offset, int length) { - return line.write(bytes, offset, length); - } -} +package test.lines; + +import javax.sound.sampled.Mixer; +import javax.sound.sampled.SourceDataLine; + +public class SourceLine { + //private Mixer mixer; + private SourceDataLine line; + + public SourceLine(Mixer mixer, SourceDataLine line) { + //this.mixer = mixer; + this.line = line; + System.out.println("SOURCE " + mixer.getMixerInfo().getName() + " || " + line.getLineInfo()); + } + + public int write(byte[] bytes, int offset, int length) { + return line.write(bytes, offset, length); + } +} diff --git a/java/sound/src/main/java/test/lines/TargetLine.java b/java/exec.sound/src/main/java/test/lines/TargetLine.java similarity index 96% rename from java/sound/src/main/java/test/lines/TargetLine.java rename to java/exec.sound/src/main/java/test/lines/TargetLine.java index e442304..c0c7d1e 100644 --- a/java/sound/src/main/java/test/lines/TargetLine.java +++ b/java/exec.sound/src/main/java/test/lines/TargetLine.java @@ -1,19 +1,19 @@ -package test.lines; - -import javax.sound.sampled.Mixer; -import javax.sound.sampled.TargetDataLine; - -public class TargetLine { - //private Mixer mixer; - private TargetDataLine line; - - public TargetLine(Mixer mixer, TargetDataLine line) { - //this.mixer = mixer; - this.line = line; - System.out.println("TARGET " + mixer.getMixerInfo().getName() + " || " + line.getLineInfo()); - } - - public int read(byte[] bytes, int offset, int length) { - return line.read(bytes, offset, length); - } -} +package test.lines; + +import javax.sound.sampled.Mixer; +import javax.sound.sampled.TargetDataLine; + +public class TargetLine { + //private Mixer mixer; + private TargetDataLine line; + + public TargetLine(Mixer mixer, TargetDataLine line) { + //this.mixer = mixer; + this.line = line; + System.out.println("TARGET " + mixer.getMixerInfo().getName() + " || " + line.getLineInfo()); + } + + public int read(byte[] bytes, int offset, int length) { + return line.read(bytes, offset, length); + } +} diff --git a/java/sound/src/main/resources/txt/keuze.txt b/java/exec.sound/src/main/resources/txt/keuze.txt similarity index 100% rename from java/sound/src/main/resources/txt/keuze.txt rename to java/exec.sound/src/main/resources/txt/keuze.txt diff --git a/java/sound/src/main/resources/txt/mp3 b/java/exec.sound/src/main/resources/txt/mp3 similarity index 100% rename from java/sound/src/main/resources/txt/mp3 rename to java/exec.sound/src/main/resources/txt/mp3 diff --git a/java/sound/src/main/resources/txt/options b/java/exec.sound/src/main/resources/txt/options similarity index 100% rename from java/sound/src/main/resources/txt/options rename to java/exec.sound/src/main/resources/txt/options diff --git a/java/sound/src/main/resources/txt/short b/java/exec.sound/src/main/resources/txt/short similarity index 100% rename from java/sound/src/main/resources/txt/short rename to java/exec.sound/src/main/resources/txt/short diff --git a/java/sound/src/main/resources/txt/testfiles.txt b/java/exec.sound/src/main/resources/txt/testfiles.txt similarity index 100% rename from java/sound/src/main/resources/txt/testfiles.txt rename to java/exec.sound/src/main/resources/txt/testfiles.txt diff --git a/java/test/build.gradle b/java/exec.test/build.gradle similarity index 73% rename from java/test/build.gradle rename to java/exec.test/build.gradle index 117179b..a7ffd60 100644 --- a/java/test/build.gradle +++ b/java/exec.test/build.gradle @@ -1,9 +1,4 @@ -apply plugin: 'java' -apply plugin: 'eclipse' - -dependencies { - compile project(':mimis') - +dependencies { compile 'com.github.boukefalos:jlibmimis:0.1' compile 'com.github.boukefalos:jlibitunes:0.3' compile 'com.github.boukefalos:jlibwiiuse:0.12' diff --git a/java/test/src/main/java/jna/HelloTest.java b/java/exec.test/src/main/java/jna/HelloTest.java similarity index 100% rename from java/test/src/main/java/jna/HelloTest.java rename to java/exec.test/src/main/java/jna/HelloTest.java diff --git a/java/test/src/main/java/jni/TestIntellitype.java b/java/exec.test/src/main/java/jni/TestIntellitype.java similarity index 97% rename from java/test/src/main/java/jni/TestIntellitype.java rename to java/exec.test/src/main/java/jni/TestIntellitype.java index c11b517..252d136 100644 --- a/java/test/src/main/java/jni/TestIntellitype.java +++ b/java/exec.test/src/main/java/jni/TestIntellitype.java @@ -1,314 +1,314 @@ -/* - * JIntellitype ----------------- Copyright 2005-2006 Emil A. Lefkof III - * - * I always give it my best shot to make a program useful and solid, but remeber - * that there is absolutely no warranty for using this program as stated in the - * following terms: - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package jni; - -import java.awt.BorderLayout; -import java.awt.Event; -import java.awt.Frame; -import java.awt.GraphicsEnvironment; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.File; - -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTextArea; -import javax.swing.border.EtchedBorder; - -import com.melloware.jintellitype.HotkeyListener; -import com.melloware.jintellitype.IntellitypeListener; -import com.melloware.jintellitype.JIntellitype; - -/** - * Swing based test application to test all the functions of the JIntellitype library. - *

- * Copyright (c) 2006 Melloware, Inc. - * @author Emil A. Lefkof III - * @version 1.0 - */ -public class TestIntellitype extends JFrame implements HotkeyListener, IntellitypeListener { - - private static TestIntellitype mainFrame; - private static final int WINDOWS_A = 88; - private static final int ALT_SHIFT_B = 89; - private static final int CTRL_SHIFT_C = 90; - private static final int PRINT_SCREEN = 91; - private static final int F11 = 92; - private static final int F12 = 93; - private static final int SEMICOLON = 94; - private static final int TICK = 95; - private final JButton btnRegisterHotKey = new JButton(); - private final JButton btnUnregisterHotKey = new JButton(); - private final JPanel bottomPanel = new JPanel(); - private final JPanel mainPanel = new JPanel(); - private final JPanel topPanel = new JPanel(); - private final JScrollPane scrollPane = new JScrollPane(); - private final JTextArea textArea = new JTextArea(); - - /** - * Creates new form. - */ - public TestIntellitype() { - initComponents(); - } - - /** - * Main method to launch this application. - *

- * @param args any command line arguments - */ - public static void main(String[] args) { - System.out.println(new File(".").getAbsolutePath()); - // first check to see if an instance of this application is already - // running, use the name of the window title of this JFrame for checking - if (JIntellitype.checkInstanceAlreadyRunning("JIntellitype Test Application")) { - System.exit(1); - } - - // next check to make sure JIntellitype DLL can be found and we are on - // a Windows operating System - if (!JIntellitype.isJIntellitypeSupported()) { - System.exit(1); - } - - mainFrame = new TestIntellitype(); - mainFrame.setTitle("JIntellitype Test Application"); - center(mainFrame); - mainFrame.setVisible(true); - mainFrame.initJIntellitype(); - } - - /* - * (non-Javadoc) - * @see com.melloware.jintellitype.HotkeyListener#onHotKey(int) - */ - public void onHotKey(int aIdentifier) { - output("WM_HOTKEY message received " + Integer.toString(aIdentifier)); - } - - /* - * (non-Javadoc) - * @see com.melloware.jintellitype.IntellitypeListener#onIntellitype(int) - */ - public void onIntellitype(int aCommand) { - - switch (aCommand) { - case JIntellitype.APPCOMMAND_BROWSER_BACKWARD: - output("BROWSER_BACKWARD message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_BROWSER_FAVOURITES: - output("BROWSER_FAVOURITES message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_BROWSER_FORWARD: - output("BROWSER_FORWARD message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_BROWSER_HOME: - output("BROWSER_HOME message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_BROWSER_REFRESH: - output("BROWSER_REFRESH message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_BROWSER_SEARCH: - output("BROWSER_SEARCH message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_BROWSER_STOP: - output("BROWSER_STOP message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_LAUNCH_APP1: - output("LAUNCH_APP1 message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_LAUNCH_APP2: - output("LAUNCH_APP2 message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_LAUNCH_MAIL: - output("LAUNCH_MAIL message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_MEDIA_NEXTTRACK: - output("MEDIA_NEXTTRACK message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_MEDIA_PLAY_PAUSE: - output("MEDIA_PLAY_PAUSE message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_MEDIA_PREVIOUSTRACK: - output("MEDIA_PREVIOUSTRACK message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_MEDIA_STOP: - output("MEDIA_STOP message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_VOLUME_DOWN: - output("VOLUME_DOWN message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_VOLUME_UP: - output("VOLUME_UP message received " + Integer.toString(aCommand)); - break; - case JIntellitype.APPCOMMAND_VOLUME_MUTE: - output("VOLUME_MUTE message received " + Integer.toString(aCommand)); - break; - default: - output("Undefined INTELLITYPE message caught " + Integer.toString(aCommand)); - break; - } - } - - /** - * Centers window on desktop. - *

- * @param aFrame the Frame to center - */ - private static void center(JFrame aFrame) { - final GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - final Point centerPoint = ge.getCenterPoint(); - final Rectangle bounds = ge.getMaximumWindowBounds(); - final int w = Math.min(aFrame.getWidth(), bounds.width); - final int h = Math.min(aFrame.getHeight(), bounds.height); - final int x = centerPoint.x - (w / 2); - final int y = centerPoint.y - (h / 2); - aFrame.setBounds(x, y, w, h); - if ((w == bounds.width) && (h == bounds.height)) { - aFrame.setExtendedState(Frame.MAXIMIZED_BOTH); - } - aFrame.validate(); - } - - /** - * Method to register a hotkey using the RegisterHotKey Windows API call. - *

- * @param aEvent the ActionEvent fired. - */ - private void btnRegisterHotKey_actionPerformed(ActionEvent aEvent) { - // assign the WINDOWS+A key to the unique id 88 for identification - JIntellitype.getInstance().registerHotKey(WINDOWS_A, JIntellitype.MOD_WIN, 'A'); - JIntellitype.getInstance().registerHotKey(ALT_SHIFT_B, JIntellitype.MOD_ALT + JIntellitype.MOD_SHIFT, 'B'); - JIntellitype.getInstance().registerSwingHotKey(CTRL_SHIFT_C, Event.CTRL_MASK + Event.SHIFT_MASK, 'C'); - - // use a 0 for the modifier if you just want a single keystroke to be a - // hotkey - JIntellitype.getInstance().registerHotKey(PRINT_SCREEN, 0, 44); - JIntellitype.getInstance().registerHotKey(F11, "F11"); - JIntellitype.getInstance().registerHotKey(F12, JIntellitype.MOD_ALT, 123); - JIntellitype.getInstance().registerHotKey(SEMICOLON, 0, 186); - JIntellitype.getInstance().registerHotKey(TICK, 0, 192); - // clear the text area - textArea.setText(""); - output("RegisterHotKey WINDOWS+A was assigned uniqueID 88"); - output("RegisterHotKey ALT+SHIFT+B was assigned uniqueID 89"); - output("RegisterHotKey CTRL+SHIFT+C was assigned uniqueID 90"); - output("RegisterHotKey PRINT_SCREEN was assigned uniqueID 91"); - output("RegisterHotKey F9 was assigned uniqueID 92"); - output("RegisterHotKey F12 was assigned uniqueID 93"); - output("RegisterHotKey SEMICOLON was assigned uniqueID 94"); - output("Press WINDOWS+A or ALT+SHIFT+B or CTRL+SHIFT+C in another application and you will see the debug output in the textarea."); - } - - /** - * Method to unregister a hotkey using the UnregisterHotKey Windows API call. - *

- * @param aEvent the ActionEvent fired. - */ - private void btnUnregisterHotKey_actionPerformed(ActionEvent aEvent) { - JIntellitype.getInstance().unregisterHotKey(WINDOWS_A); - JIntellitype.getInstance().unregisterHotKey(ALT_SHIFT_B); - JIntellitype.getInstance().unregisterHotKey(CTRL_SHIFT_C); - JIntellitype.getInstance().unregisterHotKey(PRINT_SCREEN); - JIntellitype.getInstance().unregisterHotKey(F11); - JIntellitype.getInstance().unregisterHotKey(F12); - JIntellitype.getInstance().unregisterHotKey(SEMICOLON); - output("UnregisterHotKey WINDOWS+A"); - output("UnregisterHotKey ALT+SHIFT+B"); - output("UnregisterHotKey CTRL+SHIFT+C"); - output("UnregisterHotKey PRINT_SCREEN"); - output("UnregisterHotKey F9"); - output("UnregisterHotKey F12"); - output("UnregisterHotKey SEMICOLON"); - output("Press WINDOWS+A or ALT+SHIFT+B in another application and you will NOT see the debug output in the textarea."); - } - - /** - * This method is called from within the constructor to initialize the form. - */ - private void initComponents() { - mainPanel.setLayout(new BorderLayout()); - topPanel.setBorder(new EtchedBorder(1)); - bottomPanel.setLayout(new BorderLayout()); - bottomPanel.setBorder(new EtchedBorder(1)); - btnRegisterHotKey.setText("RegisterHotKey"); - btnRegisterHotKey.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - btnRegisterHotKey_actionPerformed(e); - } - }); - btnUnregisterHotKey.setText("UnregisterHotKey"); - btnUnregisterHotKey.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - btnUnregisterHotKey_actionPerformed(e); - } - }); - topPanel.add(btnRegisterHotKey); - topPanel.add(btnUnregisterHotKey); - scrollPane.getViewport().add(textArea); - bottomPanel.add(scrollPane, BorderLayout.CENTER); - mainPanel.add(topPanel, BorderLayout.NORTH); - mainPanel.add(bottomPanel, BorderLayout.CENTER); - - this.addWindowListener(new java.awt.event.WindowAdapter() { - @Override - public void windowClosing(java.awt.event.WindowEvent evt) { - // don't forget to clean up any resources before close - JIntellitype.getInstance().cleanUp(); - System.exit(0); - } - }); - - this.getContentPane().add(mainPanel); - this.pack(); - this.setSize(800, 600); - } - - /** - * Initialize the JInitellitype library making sure the DLL is located. - */ - public void initJIntellitype() { - try { - - // initialize JIntellitype with the frame so all windows commands can - // be attached to this window - JIntellitype.getInstance().addHotKeyListener(this); - JIntellitype.getInstance().addIntellitypeListener(this); - output("JIntellitype initialized"); - } catch (RuntimeException ex) { - output("Either you are not on Windows, or there is a problem with the JIntellitype library!"); - } - } - - /** - * Send the output to the log and the text area. - *

- * @param text the text to output - */ - private void output(String text) { - textArea.append(text); - textArea.append("\n"); - } - +/* + * JIntellitype ----------------- Copyright 2005-2006 Emil A. Lefkof III + * + * I always give it my best shot to make a program useful and solid, but remeber + * that there is absolutely no warranty for using this program as stated in the + * following terms: + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package jni; + +import java.awt.BorderLayout; +import java.awt.Event; +import java.awt.Frame; +import java.awt.GraphicsEnvironment; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.border.EtchedBorder; + +import com.melloware.jintellitype.HotkeyListener; +import com.melloware.jintellitype.IntellitypeListener; +import com.melloware.jintellitype.JIntellitype; + +/** + * Swing based test application to test all the functions of the JIntellitype library. + *

+ * Copyright (c) 2006 Melloware, Inc. + * @author Emil A. Lefkof III + * @version 1.0 + */ +public class TestIntellitype extends JFrame implements HotkeyListener, IntellitypeListener { + + private static TestIntellitype mainFrame; + private static final int WINDOWS_A = 88; + private static final int ALT_SHIFT_B = 89; + private static final int CTRL_SHIFT_C = 90; + private static final int PRINT_SCREEN = 91; + private static final int F11 = 92; + private static final int F12 = 93; + private static final int SEMICOLON = 94; + private static final int TICK = 95; + private final JButton btnRegisterHotKey = new JButton(); + private final JButton btnUnregisterHotKey = new JButton(); + private final JPanel bottomPanel = new JPanel(); + private final JPanel mainPanel = new JPanel(); + private final JPanel topPanel = new JPanel(); + private final JScrollPane scrollPane = new JScrollPane(); + private final JTextArea textArea = new JTextArea(); + + /** + * Creates new form. + */ + public TestIntellitype() { + initComponents(); + } + + /** + * Main method to launch this application. + *

+ * @param args any command line arguments + */ + public static void main(String[] args) { + System.out.println(new File(".").getAbsolutePath()); + // first check to see if an instance of this application is already + // running, use the name of the window title of this JFrame for checking + if (JIntellitype.checkInstanceAlreadyRunning("JIntellitype Test Application")) { + System.exit(1); + } + + // next check to make sure JIntellitype DLL can be found and we are on + // a Windows operating System + if (!JIntellitype.isJIntellitypeSupported()) { + System.exit(1); + } + + mainFrame = new TestIntellitype(); + mainFrame.setTitle("JIntellitype Test Application"); + center(mainFrame); + mainFrame.setVisible(true); + mainFrame.initJIntellitype(); + } + + /* + * (non-Javadoc) + * @see com.melloware.jintellitype.HotkeyListener#onHotKey(int) + */ + public void onHotKey(int aIdentifier) { + output("WM_HOTKEY message received " + Integer.toString(aIdentifier)); + } + + /* + * (non-Javadoc) + * @see com.melloware.jintellitype.IntellitypeListener#onIntellitype(int) + */ + public void onIntellitype(int aCommand) { + + switch (aCommand) { + case JIntellitype.APPCOMMAND_BROWSER_BACKWARD: + output("BROWSER_BACKWARD message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_BROWSER_FAVOURITES: + output("BROWSER_FAVOURITES message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_BROWSER_FORWARD: + output("BROWSER_FORWARD message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_BROWSER_HOME: + output("BROWSER_HOME message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_BROWSER_REFRESH: + output("BROWSER_REFRESH message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_BROWSER_SEARCH: + output("BROWSER_SEARCH message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_BROWSER_STOP: + output("BROWSER_STOP message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_LAUNCH_APP1: + output("LAUNCH_APP1 message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_LAUNCH_APP2: + output("LAUNCH_APP2 message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_LAUNCH_MAIL: + output("LAUNCH_MAIL message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_MEDIA_NEXTTRACK: + output("MEDIA_NEXTTRACK message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_MEDIA_PLAY_PAUSE: + output("MEDIA_PLAY_PAUSE message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_MEDIA_PREVIOUSTRACK: + output("MEDIA_PREVIOUSTRACK message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_MEDIA_STOP: + output("MEDIA_STOP message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_VOLUME_DOWN: + output("VOLUME_DOWN message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_VOLUME_UP: + output("VOLUME_UP message received " + Integer.toString(aCommand)); + break; + case JIntellitype.APPCOMMAND_VOLUME_MUTE: + output("VOLUME_MUTE message received " + Integer.toString(aCommand)); + break; + default: + output("Undefined INTELLITYPE message caught " + Integer.toString(aCommand)); + break; + } + } + + /** + * Centers window on desktop. + *

+ * @param aFrame the Frame to center + */ + private static void center(JFrame aFrame) { + final GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + final Point centerPoint = ge.getCenterPoint(); + final Rectangle bounds = ge.getMaximumWindowBounds(); + final int w = Math.min(aFrame.getWidth(), bounds.width); + final int h = Math.min(aFrame.getHeight(), bounds.height); + final int x = centerPoint.x - (w / 2); + final int y = centerPoint.y - (h / 2); + aFrame.setBounds(x, y, w, h); + if ((w == bounds.width) && (h == bounds.height)) { + aFrame.setExtendedState(Frame.MAXIMIZED_BOTH); + } + aFrame.validate(); + } + + /** + * Method to register a hotkey using the RegisterHotKey Windows API call. + *

+ * @param aEvent the ActionEvent fired. + */ + private void btnRegisterHotKey_actionPerformed(ActionEvent aEvent) { + // assign the WINDOWS+A key to the unique id 88 for identification + JIntellitype.getInstance().registerHotKey(WINDOWS_A, JIntellitype.MOD_WIN, 'A'); + JIntellitype.getInstance().registerHotKey(ALT_SHIFT_B, JIntellitype.MOD_ALT + JIntellitype.MOD_SHIFT, 'B'); + JIntellitype.getInstance().registerSwingHotKey(CTRL_SHIFT_C, Event.CTRL_MASK + Event.SHIFT_MASK, 'C'); + + // use a 0 for the modifier if you just want a single keystroke to be a + // hotkey + JIntellitype.getInstance().registerHotKey(PRINT_SCREEN, 0, 44); + JIntellitype.getInstance().registerHotKey(F11, "F11"); + JIntellitype.getInstance().registerHotKey(F12, JIntellitype.MOD_ALT, 123); + JIntellitype.getInstance().registerHotKey(SEMICOLON, 0, 186); + JIntellitype.getInstance().registerHotKey(TICK, 0, 192); + // clear the text area + textArea.setText(""); + output("RegisterHotKey WINDOWS+A was assigned uniqueID 88"); + output("RegisterHotKey ALT+SHIFT+B was assigned uniqueID 89"); + output("RegisterHotKey CTRL+SHIFT+C was assigned uniqueID 90"); + output("RegisterHotKey PRINT_SCREEN was assigned uniqueID 91"); + output("RegisterHotKey F9 was assigned uniqueID 92"); + output("RegisterHotKey F12 was assigned uniqueID 93"); + output("RegisterHotKey SEMICOLON was assigned uniqueID 94"); + output("Press WINDOWS+A or ALT+SHIFT+B or CTRL+SHIFT+C in another application and you will see the debug output in the textarea."); + } + + /** + * Method to unregister a hotkey using the UnregisterHotKey Windows API call. + *

+ * @param aEvent the ActionEvent fired. + */ + private void btnUnregisterHotKey_actionPerformed(ActionEvent aEvent) { + JIntellitype.getInstance().unregisterHotKey(WINDOWS_A); + JIntellitype.getInstance().unregisterHotKey(ALT_SHIFT_B); + JIntellitype.getInstance().unregisterHotKey(CTRL_SHIFT_C); + JIntellitype.getInstance().unregisterHotKey(PRINT_SCREEN); + JIntellitype.getInstance().unregisterHotKey(F11); + JIntellitype.getInstance().unregisterHotKey(F12); + JIntellitype.getInstance().unregisterHotKey(SEMICOLON); + output("UnregisterHotKey WINDOWS+A"); + output("UnregisterHotKey ALT+SHIFT+B"); + output("UnregisterHotKey CTRL+SHIFT+C"); + output("UnregisterHotKey PRINT_SCREEN"); + output("UnregisterHotKey F9"); + output("UnregisterHotKey F12"); + output("UnregisterHotKey SEMICOLON"); + output("Press WINDOWS+A or ALT+SHIFT+B in another application and you will NOT see the debug output in the textarea."); + } + + /** + * This method is called from within the constructor to initialize the form. + */ + private void initComponents() { + mainPanel.setLayout(new BorderLayout()); + topPanel.setBorder(new EtchedBorder(1)); + bottomPanel.setLayout(new BorderLayout()); + bottomPanel.setBorder(new EtchedBorder(1)); + btnRegisterHotKey.setText("RegisterHotKey"); + btnRegisterHotKey.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + btnRegisterHotKey_actionPerformed(e); + } + }); + btnUnregisterHotKey.setText("UnregisterHotKey"); + btnUnregisterHotKey.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + btnUnregisterHotKey_actionPerformed(e); + } + }); + topPanel.add(btnRegisterHotKey); + topPanel.add(btnUnregisterHotKey); + scrollPane.getViewport().add(textArea); + bottomPanel.add(scrollPane, BorderLayout.CENTER); + mainPanel.add(topPanel, BorderLayout.NORTH); + mainPanel.add(bottomPanel, BorderLayout.CENTER); + + this.addWindowListener(new java.awt.event.WindowAdapter() { + @Override + public void windowClosing(java.awt.event.WindowEvent evt) { + // don't forget to clean up any resources before close + JIntellitype.getInstance().cleanUp(); + System.exit(0); + } + }); + + this.getContentPane().add(mainPanel); + this.pack(); + this.setSize(800, 600); + } + + /** + * Initialize the JInitellitype library making sure the DLL is located. + */ + public void initJIntellitype() { + try { + + // initialize JIntellitype with the frame so all windows commands can + // be attached to this window + JIntellitype.getInstance().addHotKeyListener(this); + JIntellitype.getInstance().addIntellitypeListener(this); + output("JIntellitype initialized"); + } catch (RuntimeException ex) { + output("Either you are not on Windows, or there is a problem with the JIntellitype library!"); + } + } + + /** + * Send the output to the log and the text area. + *

+ * @param text the text to output + */ + private void output(String text) { + textArea.append(text); + textArea.append("\n"); + } + } \ No newline at end of file diff --git a/java/test/src/main/java/jni/TestNative.java b/java/exec.test/src/main/java/jni/TestNative.java similarity index 96% rename from java/test/src/main/java/jni/TestNative.java rename to java/exec.test/src/main/java/jni/TestNative.java index a00a8be..b025af0 100644 --- a/java/test/src/main/java/jni/TestNative.java +++ b/java/exec.test/src/main/java/jni/TestNative.java @@ -1,10 +1,10 @@ -package jni; - -import mimis.util.Native; -import mimis.value.Registry; - -public class TestNative { - public static void main(String[] args) { - System.out.println(Native.getValue(Registry.CURRENT_USER, "Software\\LIRC", "password")); - } +package jni; + +import mimis.util.Native; +import mimis.value.Registry; + +public class TestNative { + public static void main(String[] args) { + System.out.println(Native.getValue(Registry.CURRENT_USER, "Software\\LIRC", "password")); + } } \ No newline at end of file diff --git a/java/test/src/main/java/jni/TestWiiuse.java b/java/exec.test/src/main/java/jni/TestWiiuse.java similarity index 95% rename from java/test/src/main/java/jni/TestWiiuse.java rename to java/exec.test/src/main/java/jni/TestWiiuse.java index 8902657..c2e0fe6 100644 --- a/java/test/src/main/java/jni/TestWiiuse.java +++ b/java/exec.test/src/main/java/jni/TestWiiuse.java @@ -1,9 +1,9 @@ -package jni; - -import wiiusej.WiiUseApiManager; - -public class TestWiiuse { - public static void main(String[] args) { - WiiUseApiManager.getWiimotes(0, false); - } +package jni; + +import wiiusej.WiiUseApiManager; + +public class TestWiiuse { + public static void main(String[] args) { + WiiUseApiManager.getWiimotes(0, false); + } } \ No newline at end of file diff --git a/java/test/src/main/java/jni/TestXinput.java b/java/exec.test/src/main/java/jni/TestXinput.java similarity index 96% rename from java/test/src/main/java/jni/TestXinput.java rename to java/exec.test/src/main/java/jni/TestXinput.java index 4a9e378..3e1e2b7 100644 --- a/java/test/src/main/java/jni/TestXinput.java +++ b/java/exec.test/src/main/java/jni/TestXinput.java @@ -1,9 +1,9 @@ -package jni; - -import de.hardcode.jxinput.JXInputManager; - -public class TestXinput { - public static void main(String[] args) { - System.out.println(JXInputManager.getNumberOfDevices()); - } +package jni; + +import de.hardcode.jxinput.JXInputManager; + +public class TestXinput { + public static void main(String[] args) { + System.out.println(JXInputManager.getNumberOfDevices()); + } } \ No newline at end of file diff --git a/java/test/src/main/java/jni/TestiTunes.java b/java/exec.test/src/main/java/jni/TestiTunes.java similarity index 95% rename from java/test/src/main/java/jni/TestiTunes.java rename to java/exec.test/src/main/java/jni/TestiTunes.java index 9e72429..bc6c6e7 100644 --- a/java/test/src/main/java/jni/TestiTunes.java +++ b/java/exec.test/src/main/java/jni/TestiTunes.java @@ -1,11 +1,11 @@ -package jni; - -import com.dt.iTunesController.iTunes; - -public class TestiTunes { - public static void main(String[] args) { - iTunes iTunes = new iTunes(); - iTunes.connect(); - iTunes.playPause(); - } +package jni; + +import com.dt.iTunesController.iTunes; + +public class TestiTunes { + public static void main(String[] args) { + iTunes iTunes = new iTunes(); + iTunes.connect(); + iTunes.playPause(); + } } \ No newline at end of file diff --git a/java/test/src/main/java/test/BufferedSound.java b/java/exec.test/src/main/java/test/BufferedSound.java similarity index 100% rename from java/test/src/main/java/test/BufferedSound.java rename to java/exec.test/src/main/java/test/BufferedSound.java diff --git a/java/test/src/main/java/test/CustomAppender.java b/java/exec.test/src/main/java/test/CustomAppender.java similarity index 95% rename from java/test/src/main/java/test/CustomAppender.java rename to java/exec.test/src/main/java/test/CustomAppender.java index 890541f..54145a4 100644 --- a/java/test/src/main/java/test/CustomAppender.java +++ b/java/exec.test/src/main/java/test/CustomAppender.java @@ -1,27 +1,27 @@ -package test; - -import org.apache.log4j.AppenderSkeleton; -import org.apache.log4j.spi.LoggingEvent; - -public class CustomAppender extends AppenderSkeleton { - protected int bla = 9999; - - public void setBla(int bla) { - this.bla = bla; - } - - public int getBla() { - return bla; - } - - public boolean requiresLayout() { - return true; - } - - public void close() {} - - protected void append(LoggingEvent loggingEvent) { - System.out.print(layout.format(loggingEvent)); - } - -} +package test; + +import org.apache.log4j.AppenderSkeleton; +import org.apache.log4j.spi.LoggingEvent; + +public class CustomAppender extends AppenderSkeleton { + protected int bla = 9999; + + public void setBla(int bla) { + this.bla = bla; + } + + public int getBla() { + return bla; + } + + public boolean requiresLayout() { + return true; + } + + public void close() {} + + protected void append(LoggingEvent loggingEvent) { + System.out.print(layout.format(loggingEvent)); + } + +} diff --git a/java/test/src/main/java/test/Ir.java b/java/exec.test/src/main/java/test/Ir.java similarity index 100% rename from java/test/src/main/java/test/Ir.java rename to java/exec.test/src/main/java/test/Ir.java diff --git a/java/test/src/main/java/test/Sound.java b/java/exec.test/src/main/java/test/Sound.java similarity index 100% rename from java/test/src/main/java/test/Sound.java rename to java/exec.test/src/main/java/test/Sound.java diff --git a/java/mimis/gradle/wrapper/gradle-wrapper.jar b/java/mimis/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 2322723..0000000 Binary files a/java/mimis/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/java/mimis/gradle/wrapper/gradle-wrapper.properties b/java/mimis/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 2a5549e..0000000 --- a/java/mimis/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Sat Nov 29 14:03:22 GMT 2014 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-bin.zip diff --git a/java/mimis/gradlew.bat b/java/mimis/gradlew.bat deleted file mode 100644 index 8a0b282..0000000 --- a/java/mimis/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/mimis/src/main/resources/DelcomDLL.dll b/java/mimis/src/main/resources/DelcomDLL.dll deleted file mode 100644 index ecfa470..0000000 Binary files a/java/mimis/src/main/resources/DelcomDLL.dll and /dev/null differ diff --git a/java/mimis/src/main/resources/META-INF/services/mimis.application.Application b/java/mimis/src/main/resources/META-INF/services/mimis.application.Application deleted file mode 100644 index a3fdfe3..0000000 --- a/java/mimis/src/main/resources/META-INF/services/mimis.application.Application +++ /dev/null @@ -1,2 +0,0 @@ -mimis.application.itunes.iTunesApplication -mimis.application.cmd.windows.lightroom.LightroomApplication \ No newline at end of file diff --git a/java/mimis/src/main/resources/WiiPair.exe b/java/mimis/src/main/resources/WiiPair.exe deleted file mode 100644 index f16c97d..0000000 Binary files a/java/mimis/src/main/resources/WiiPair.exe and /dev/null differ diff --git a/java/mimis/src/main/resources/irtoy.exe b/java/mimis/src/main/resources/irtoy.exe deleted file mode 100644 index 0dc97e5..0000000 Binary files a/java/mimis/src/main/resources/irtoy.exe and /dev/null differ diff --git a/java/mimis/src/main/resources/wiiscan.exe b/java/mimis/src/main/resources/wiiscan.exe deleted file mode 100644 index 9e9e443..0000000 Binary files a/java/mimis/src/main/resources/wiiscan.exe and /dev/null differ diff --git a/java/mimis/src/main/resources/wpcom.dll b/java/mimis/src/main/resources/wpcom.dll deleted file mode 100644 index 3d8f765..0000000 Binary files a/java/mimis/src/main/resources/wpcom.dll and /dev/null differ diff --git a/java/settings.gradle b/java/settings.gradle index e0fd83d..ffe0a84 100644 --- a/java/settings.gradle +++ b/java/settings.gradle @@ -1 +1,11 @@ -include 'base', 'mimis', 'test', 'sound' \ No newline at end of file +include ':application.ibuddy' +include ':application.itunes' +include ':application.lightroom' +include ':core.legacy' +include ':core.networking' +include ':core.routing' +include ':core.worker' +include ':device.lirc' +include ':exec.mimis' +include ':exec.sound' +include ':exec.test' \ No newline at end of file diff --git a/java/sound/src/main/resources/lame.exe b/java/sound/src/main/resources/lame.exe deleted file mode 100644 index 7e69522..0000000 Binary files a/java/sound/src/main/resources/lame.exe and /dev/null differ diff --git a/java/sound/src/main/resources/libgomp-1.dll b/java/sound/src/main/resources/libgomp-1.dll deleted file mode 100644 index f4afc3e..0000000 Binary files a/java/sound/src/main/resources/libgomp-1.dll and /dev/null differ diff --git a/java/sound/src/main/resources/libmad.dll b/java/sound/src/main/resources/libmad.dll deleted file mode 100644 index 98730c5..0000000 Binary files a/java/sound/src/main/resources/libmad.dll and /dev/null differ diff --git a/java/sound/src/main/resources/libmp3lame.dll b/java/sound/src/main/resources/libmp3lame.dll deleted file mode 100644 index 719126b..0000000 Binary files a/java/sound/src/main/resources/libmp3lame.dll and /dev/null differ diff --git a/java/sound/src/main/resources/play.exe b/java/sound/src/main/resources/play.exe deleted file mode 100644 index e3382ea..0000000 Binary files a/java/sound/src/main/resources/play.exe and /dev/null differ diff --git a/java/sound/src/main/resources/pthreadgc2.dll b/java/sound/src/main/resources/pthreadgc2.dll deleted file mode 100644 index f64cc52..0000000 Binary files a/java/sound/src/main/resources/pthreadgc2.dll and /dev/null differ diff --git a/java/sound/src/main/resources/sox.exe b/java/sound/src/main/resources/sox.exe deleted file mode 100644 index e3382ea..0000000 Binary files a/java/sound/src/main/resources/sox.exe and /dev/null differ diff --git a/java/sound/src/main/resources/soxi.exe b/java/sound/src/main/resources/soxi.exe deleted file mode 100644 index e3382ea..0000000 Binary files a/java/sound/src/main/resources/soxi.exe and /dev/null differ diff --git a/java/sound/src/main/resources/stream.exe b/java/sound/src/main/resources/stream.exe deleted file mode 100644 index 36bf506..0000000 Binary files a/java/sound/src/main/resources/stream.exe and /dev/null differ diff --git a/java/sound/src/main/resources/wget.exe b/java/sound/src/main/resources/wget.exe deleted file mode 100644 index f2a11c1..0000000 Binary files a/java/sound/src/main/resources/wget.exe and /dev/null differ diff --git a/java/sound/src/main/resources/zlib1.dll b/java/sound/src/main/resources/zlib1.dll deleted file mode 100644 index 89c8002..0000000 Binary files a/java/sound/src/main/resources/zlib1.dll and /dev/null differ