// Sender static void sender() { DateTime now; DateTime last = System.DateTime.Now; UdpClient client = new UdpClient(); client.Connect(new IPEndPoint(IPAddress.Parse(serverIP), serverPort)); while (true) { now = System.DateTime.Now; if (now >= last.AddMilliseconds(senderDelay) && buffer.Count() > 0) { try { Console.WriteLine("\tSending Package at {0}", now.ToString()); TrackerPkg package = buffer.TryPeek(); byte[] pkgBytes = package.GetBytes(); client.Send(pkgBytes, pkgBytes.Length); } catch (System.Exception) { // See: https://github.com/dotnet/runtime/issues/923 Console.WriteLine("\t\t(Sending aborted by O.S.)"); } last = last.AddMilliseconds(locatorDelay); } } }
// Listener static void listener() { while (true) { UdpClient client = new UdpClient(9999); IPEndPoint remoteIp = new IPEndPoint(IPAddress.Parse(serverIP), 0); byte[] receivedBytes = client.Receive(ref remoteIp); client.Close(); TrackerPkg response = new TrackerPkg(receivedBytes); TrackerPkg package = buffer.TryPeek(); if (package.type == 1 && package.message_id == response.message_id) { buffer.TryDequeue(); } Console.WriteLine("\tLast package delivered sucessfully (Removed from queue)."); } }
// Locator static void locator() { DateTime now; DateTime last = System.DateTime.Now; while (true) { now = System.DateTime.Now; if (now >= last.AddMilliseconds(locatorDelay)) { Console.WriteLine("\tStoring Location at {0}", now.ToString()); string location = GPSMngr.getLocation(); String timeStamp = now.ToString("yyyyMMddHHmmssffff"); TrackerPkg package = new TrackerPkg(0, deviceNumber, timeStamp, location); buffer.Enqueue(package); last = last.AddMilliseconds(locatorDelay); } } }
// Saver static void saver() { UdpClient client = new UdpClient(); while (true) { if (buffer.Count > 0) { // Decoding the stream TrackerPkg package = new TrackerPkg(buffer.Dequeue()); IPEndPoint remoteIp = remoteSockets.Dequeue(); // Printing the location Console.WriteLine("\tLocation received from device {0}: {1}.", package.device, package.message); // Sending confirmation TrackerPkg response = new TrackerPkg(1, 0, package.device.ToString(), ""); byte[] resBytes = response.GetBytes(); remoteIp.Port = 9999; client.Send(resBytes, resBytes.Length, remoteIp); } } }