Auto detect server
This commit is contained in:
89
Client/phonegap-wake-on-lan/src/WakeOnLan.java
Normal file
89
Client/phonegap-wake-on-lan/src/WakeOnLan.java
Normal file
@@ -0,0 +1,89 @@
|
||||
package com.matlipe;
|
||||
|
||||
import org.apache.cordova.CordovaPlugin;
|
||||
import org.apache.cordova.CallbackContext;
|
||||
|
||||
import java.net.DatagramPacket;
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.InetAddress;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class WakeOnLan extends CordovaPlugin {
|
||||
|
||||
private static final String WAKE_ACTION = "wake";
|
||||
private static final int PORT = 9;
|
||||
|
||||
|
||||
@Override
|
||||
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
|
||||
boolean result = false;
|
||||
if( WAKE_ACTION.equals( action ) ){
|
||||
if( wake( args ) ){
|
||||
callbackContext.success( "Device has been woken up" );
|
||||
result = true;
|
||||
} else {
|
||||
callbackContext.error( "Device did not wake up" );
|
||||
}
|
||||
} else {
|
||||
callbackContext.error( "Invalid action : " + action + " passed" );
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
private Boolean wake( JSONArray args ) {
|
||||
Boolean result = false;
|
||||
try{
|
||||
String ipStr = args.getString( 0 );
|
||||
String macStr = args.getString( 1 );
|
||||
|
||||
|
||||
byte[] macBytes = getMacBytes( macStr );
|
||||
byte[] bytes = new byte[ 6 + 16 * macBytes.length ];
|
||||
|
||||
for( int i = 0; i < 6; i++ ){
|
||||
bytes[ i ] = ( byte ) 0xff;
|
||||
}
|
||||
for( int i = 6; i < bytes.length; i += macBytes.length ){
|
||||
System.arraycopy( macBytes, 0, bytes, i, macBytes.length );
|
||||
}
|
||||
|
||||
InetAddress address = InetAddress.getByName( ipStr );
|
||||
DatagramPacket packet = new DatagramPacket( bytes, bytes.length, address, PORT );
|
||||
DatagramSocket socket = new DatagramSocket();
|
||||
socket.send( packet );
|
||||
socket.close();
|
||||
|
||||
System.out.println( "Wake-on-LAN packet sent." );
|
||||
|
||||
result = true;
|
||||
} catch( Exception e ){
|
||||
System.out.println( "WakeOnLan Exception thrown" + e.toString() );
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
|
||||
private byte[] getMacBytes( String macStr ) throws IllegalArgumentException {
|
||||
byte[] bytes = new byte[ 6 ];
|
||||
String[] hex = macStr.split( "(\\:|\\-)" );
|
||||
if( hex.length != 6 ){
|
||||
throw new IllegalArgumentException( "Invalid MAC address." );
|
||||
}
|
||||
try{
|
||||
for( int i = 0; i < 6; i++ ){
|
||||
bytes[ i ] = ( byte ) Integer.parseInt( hex[ i ], 16 );
|
||||
}
|
||||
} catch( NumberFormatException e ){
|
||||
throw new IllegalArgumentException( "Invalid hex digit in MAC address." );
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user