Esempio n. 1
0
        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");
                }
            }
        }