public ACKUDPDatagram(UDPDatagram udpDatagram) { this.udpDatagram = udpDatagram; }
public static void StartListener() { // connect to a single MongoDB server using a connection string. var client = new MongoClient("mongodb://localhost:27017"); var sensorsDb = client.GetDatabase("sensors"); var measuresCollection = sensorsDb.GetCollection <BsonDocument>("measures"); const bool done = false; var listener = new UdpClient(ListenPort); var groupEP = new IPEndPoint(IPAddress.Any, ListenPort); Console.Title = "ADRENALINA MKT&IT - UDP LISTENER"; Console.BackgroundColor = ConsoleColor.DarkBlue; Console.ForegroundColor = ConsoleColor.White; Console.SetWindowSize(Console.WindowWidth, Console.WindowHeight / 2); Console.WriteLine("190.245.153.142 - Listening on port 11000...\n"); logger.Info("ADRENALINA MKT&IT - UDP LISTENER"); logger.Info("190.245.153.142 - Listening on port 11000..."); try { var ACKUDPDatagram = ""; while (!done) { var bytes = listener.Receive(ref groupEP); var bits = string.Join(", ", bytes.Select(x => Convert.ToString(x, 2).PadLeft(8, '0'))).Insert(0, " {"); var bits2 = bits.Insert(bits.Length, "}"); Console.WriteLine("Received UDP Datagram from {0}\n" + "Payload(string): {1}" + //"Payload(ASCII): {2}\n" + //"Payload(bits): {3}\n" + "\tat {4}\n\n", groupEP.ToString(), Encoding.ASCII.GetString(bytes, 0, bytes.Length), PrintBytes(bytes), bits2, DateTime.Now); logger.Info("Received UDP Datagram from {0}\n" + "Payload(string): {1}" + //"Payload(ASCII): {2}\n" + //"Payload(bits): {3}\n" + "\tat {4}\n\n", groupEP.ToString(), Encoding.ASCII.GetString(bytes, 0, bytes.Length), PrintBytes(bytes), bits2, DateTime.Now); var udpDatagram = new UDPDatagram(Encoding.ASCII.GetString(bytes, 0, bytes.Length)); var ackudpDatagram = new ACKUDPDatagram(udpDatagram); ACKUDPDatagram = udpDatagram.Tokenize() ? ackudpDatagram.MakeValidPacket() : global::UDPListener.ACKUDPDatagram.MakeInvalidPacket(); // si es valido guardo en la base if (udpDatagram.Valid) { var measuresDocument = new BsonDocument { { "imei", udpDatagram.IMEI }, { "packetNumber", udpDatagram.PacketNumber }, { "triggerEvent", udpDatagram.TriggerEvent }, { "gsmSignalStrength", udpDatagram.GSMSignalStrength }, { "data", new BsonArray { udpDatagram.Data1, udpDatagram.Data2, udpDatagram.Data3, udpDatagram.Data4, udpDatagram.Data5, udpDatagram.Data6, udpDatagram.Data7, udpDatagram.Data8, udpDatagram.Data9, udpDatagram.Data10 } }, { "coord", new BsonArray { udpDatagram.Latitude, udpDatagram.Longitude } }, { "modelAndVersion", udpDatagram.DeviceModelAndVersion }, { "timestamp", udpDatagram.MeasureTimestamp } }; measuresCollection.InsertOne(measuresDocument); } var s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); var broadcast = IPAddress.Parse(groupEP.Address.ToString()); var sendbuf = Encoding.ASCII.GetBytes(ACKUDPDatagram); var ep = new IPEndPoint(broadcast, groupEP.Port); s.SendTo(sendbuf, ep); } } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { listener.Close(); } }