diff options
Diffstat (limited to 'src/main/java/org/openslx/taskmanager/tasks/WakeOnLan.java')
-rw-r--r-- | src/main/java/org/openslx/taskmanager/tasks/WakeOnLan.java | 93 |
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; + } + } + +} |