package com.hastarin.android.udpsender;
import android.content.Context;
import android.net.Uri;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
import java.io.IOException;
import java.net.*;
import static com.hastarin.android.udpsender.HexHelper.bytesToHex;
import static com.hastarin.android.udpsender.HexHelper.hexStringToBytes;
public class UdpSender {
final Handler toastHandler = new Handler();
public void SendTo(final Context context, final Uri uri) {
if (uri == null) return;
String msg = Uri.decode(uri.getLastPathSegment());
if(msg == null) return;
byte[] msgBytes = msg.getBytes();
if (msg.startsWith("\\0x")) {
msg = msg.replace("\\0x", "0x");
msgBytes = msg.getBytes();
} else if (msg.startsWith("0x")) {
msg = msg.replace("0x", "");
if(!msg.matches("[a-fA-F0-9]+")) {
Toast.makeText(context, "ERROR: Invalid hex values", Toast.LENGTH_LONG).show();
return;
}
msgBytes = hexStringToBytes(msg);
}
final byte[] buf = msgBytes;
String appName = context.getString(R.string.app_name);
if(Constants.IS_LOGGABLE) {
Log.d(appName, new String(msgBytes));
Log.d(appName, "0x" + bytesToHex(msgBytes));
}
new Thread(new Runnable() {
public void run() {
try {
InetAddress serverAddress = InetAddress.getByName(uri
.getHost());
//Log.v(getString(R.string.app_name), serverAddress.getHostAddress());
DatagramSocket socket = new DatagramSocket();
if (!socket.getBroadcast()) socket.setBroadcast(true);
DatagramPacket packet = new DatagramPacket(buf, buf.length,
serverAddress, uri.getPort());
socket.send(packet);
socket.close();
} catch (final UnknownHostException e) {
toastHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, e.toString(),
Toast.LENGTH_SHORT).show();
}
});
e.printStackTrace();
} catch (final SocketException e) {
toastHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, e.toString(),
Toast.LENGTH_SHORT).show();
}
});
e.printStackTrace();
} catch (final IOException e) {
toastHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, e.toString(),
Toast.LENGTH_SHORT).show();
}
});
e.printStackTrace();
}
}
}).start();
}
}