private void DoWork() { var daoFactory = new DAOFactory(); var buffer = new Byte[420]; Connect(); var receive = true; while (receive) { try { _socket.ReceiveFrom(buffer, 0, 419, SocketFlags.None, ref _remoteEndPoint); if (buffer[9] != 0x51) { continue; } var mac = BitConverter.ToString(buffer, 10, 6).Replace("-", String.Empty); var dev = daoFactory.DispositivoDAO.GetByIMEI(mac); if (dev == null) { STrace.Error(GetType().FullName, String.Format("Access no esta dado de alta, dar de alta un Dispositivo con el Imei: {0}", mac)); continue; } var rfid = BitConverter.ToString(buffer, 31, 4).Replace("-", String.Empty); var entrada = StringUtils.AreBitsSet(buffer[27], 0x01); var dt = new DateTime(buffer[26] + (DateTime.UtcNow.Year / 100) * 100, buffer[25], buffer[24], buffer[23], buffer[22], buffer[21]); var msg = MessageIdentifierX.FactoryRfid(dev.Id, 0, null, dt, rfid, entrada ? 3 : 4); if (msg == null) { STrace.Debug(GetType().FullName, dev.Id, String.Format("Se descarta: DateTime={0} UserId={1} EsEntrada={2}", dt, rfid, entrada)); continue; } STrace.Debug(GetType().FullName, String.Format("Llego: DateTime={0} UserId={1} EsEntrada={2}", dt, rfid, entrada)); Dispatcher.Dispatch(msg); } catch (ThreadAbortException) { receive = false; } catch (Exception e) { STrace.Exception(GetType().FullName, e, "Stopping Access Main Loop due to exception"); } } }