static ApplicationWebService()
{
// http://www.zzzxo.com/q/answers-android-device-not-receiving-multicast-package-13221736.html
new Thread(
delegate()
{
// http://stackoverflow.com/questions/12610415/multicast-receiver-malfunction
// http://answers.unity3d.com/questions/250732/android-build-is-not-receiving-udp-broadcasts.html
// Acquire multicast lock
wifi = (WifiManager)ScriptCoreLib.Android.ThreadLocalContextReference.CurrentContext.getSystemService(Context.WIFI_SERVICE);
multicastLock = wifi.createMulticastLock("multicastLock");
//multicastLock.setReferenceCounted(true);
multicastLock.acquire();
System.Console.WriteLine("LANBroadcastListener ready...");
try
{
byte[] b = new byte[0x100];
// https://code.google.com/p/android/issues/detail?id=40003
MulticastSocket socket = new MulticastSocket(40404); // must bind receive side
socket.setBroadcast(true);
socket.setReuseAddress(true);
socket.setTimeToLive(30);
socket.setReceiveBufferSize(0x100);
socket.joinGroup(InetAddress.getByName("239.1.2.3"));
System.Console.WriteLine("LANBroadcastListener joinGroup...");
while (true)
{
DatagramPacket dgram = new DatagramPacket((sbyte[])(object)b, b.Length);
socket.receive(dgram); // blocks until a datagram is received
var bytes = new MemoryStream((byte[])(object)dgram.getData(), 0, dgram.getLength());
var listen = Encoding.UTF8.GetString(bytes.ToArray());
Console.WriteLine(new { listen });
var skip = false;
foreach (var item in data)
{
if (item == listen)
skip = true;
}
if (!skip)
data.Add(listen);
// { listen = http://www.fun2code.de/articles/multicast_images_java/multicast_images_java.html }
//client error, { Message = , StackTrace = java.lang.RuntimeException
// at ScriptCoreLibJava.BCLImplementation.System.Collections.Generic.__List_1.Contains(__List_1.java:102)
// at ScriptCoreLib.Extensions.ListExtensions.AddDistinct(ListExtensions.java:17)
//System.Console.WriteLine("Received "
// + listen
// + " bytes from " + dgram.getAddress());
//dgram.setLength(b.Length); // must reset length field!s
}
}
catch (Exception ex)
{
System.Console.WriteLine("client error, " + new { ex.Message, ex.StackTrace });
}
}
)
{
Name = "client"
}.Start();
}