summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/taskmanager/tasks/WakeOnLan.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/taskmanager/tasks/WakeOnLan.java')
-rw-r--r--src/main/java/org/openslx/taskmanager/tasks/WakeOnLan.java93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/main/java/org/openslx/taskmanager/tasks/WakeOnLan.java b/src/main/java/org/openslx/taskmanager/tasks/WakeOnLan.java
new file mode 100644
index 0000000..36ec7d6
--- /dev/null
+++ b/src/main/java/org/openslx/taskmanager/tasks/WakeOnLan.java
@@ -0,0 +1,93 @@
+package org.openslx.taskmanager.tasks;
+
+import java.util.Arrays;
+
+import org.openslx.satserver.util.Exec;
+import org.openslx.satserver.util.Exec.ExecCallback;
+import org.openslx.satserver.util.Util;
+import org.openslx.taskmanager.api.AbstractTask;
+
+import com.google.gson.annotations.Expose;
+
+public class WakeOnLan extends AbstractTask implements ExecCallback
+{
+
+ @Expose
+ private String[] macs;
+
+ @Expose
+ private String ip;
+
+ @Expose
+ private String password;
+
+ private String[] cmdline;
+
+ private StatusObject status;
+
+ @Override
+ protected boolean initTask()
+ {
+ status = new StatusObject();
+ this.setStatusObject( status );
+ if ( macs == null || macs.length == 0 ) {
+ status.addMsg( "Macs empty" );
+ }
+ if ( Util.isEmpty( ip ) ) {
+ status.addMsg( "IP empty" );
+ }
+ if ( !Util.isEmpty( status.messages ) )
+ return false;
+ int xlen = Util.isEmpty( password ) ? 0 : 2;
+ cmdline = new String[macs.length + 3 + xlen];
+ cmdline[0] = "jawol";
+ cmdline[1] = "-d";
+ cmdline[2] = ip;
+ if ( xlen != 0 ) {
+ cmdline[3] = "-p";
+ cmdline[4] = password;
+ }
+ System.arraycopy( macs, 0, cmdline, 3 + xlen, macs.length );
+ status.addMsg( "Command line: " + Arrays.toString( cmdline ) );
+ return true;
+ }
+
+ @Override
+ protected boolean execute()
+ {
+ int ret;
+ for ( int i = 0; i < 2; ++i ) {
+ ret = Exec.sync( 1, this, cmdline );
+ if ( ret != 0 )
+ return false;
+ try {
+ Thread.sleep( 800 );
+ } catch ( InterruptedException e ) {
+ }
+ }
+ return Exec.sync( 1, cmdline ) == 0;
+ }
+
+ @Override
+ public void processStdOut( String line )
+ {
+ status.addMsg( line );
+ }
+
+ @Override
+ public void processStdErr( String line )
+ {
+ status.addMsg( line );
+ }
+
+ class StatusObject
+ {
+ private String messages = "";
+
+ public void addMsg( String str )
+ {
+ messages = messages + "\n" + str;
+ }
+ }
+
+}