Пример #1
0
        public void setControllerMode(ushort serialNumber, ZG_CTR_MODE mode)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Читаем режим
                hr = ZGIntf.ZG_Ctr_SetCtrMode(ControllerHandler, mode);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_SetCtrMode (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_SetCtrMode").setErrorCode(hr);
                }
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Пример #2
0
        public List <ControllerEvent> getEvents(ushort serialNumber, int eventIndex, int eventCount)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                return(fetchEventsBlock(ControllerHandler, eventIndex, eventCount).items);
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Пример #3
0
        public void clearKey(ushort serialNumber, int keyIndex)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Удаляем ключ
                hr = ZGIntf.ZG_Ctr_ClearKeys(ControllerHandler, keyIndex, 1, null, default(IntPtr), 0, true);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_ClearKeys (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_ClearKeys").setErrorCode(hr);
                }
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Пример #4
0
        public List <ControllerKey> getKeys(ushort serialNumber, int keyIndex, int keyCount)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            ZG_CTR_KEY[]         aKeys   = new ZG_CTR_KEY[keyCount];
            List <ControllerKey> keyList = new List <ControllerKey>();
            ControllerKey        newKey;

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Читаем список карт
                hr = ZGIntf.ZG_Ctr_ReadKeys(ControllerHandler, keyIndex, aKeys, keyCount, null, IntPtr.Zero, 0);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_ReadKeys (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_ReadKeys").setErrorCode(hr);
                }
                for (int i = 0; i < keyCount; i++)
                {
                    if (aKeys[i].nType.Equals(ZG_CTR_KEY_TYPE.ZG_KEY_NORMAL))
                    {
                        newKey          = new ControllerKey();
                        newKey.code     = CardArrayToString(aKeys[i].rNum);
                        newKey.isErased = aKeys[i].fErased;
                        keyList.Add(newKey);
                        //log.Info("KEY: " + newKey.name + ", " + aKeys[i].nAccess + ", " + aKeys[i].nFlags);
                    }
                    else
                    {
                        keyList.Add(null);
                    }
                }
                return(keyList);
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Пример #5
0
        public void addKey(ushort serialNumber, int keyIndex, String code)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Пишем ключ
                ZG_CTR_KEY[] aKeys = new ZG_CTR_KEY[1];
                aKeys[0].nType   = ZG_CTR_KEY_TYPE.ZG_KEY_NORMAL;
                aKeys[0].rNum    = CardStringToArray(code);
                aKeys[0].nAccess = 255; //Доступ без рассписания
                aKeys[0].nFlags  = ZGIntf.ZG_KF_SHORTNUM;
                int _keyIndex = -1;
                if (keyIndex == -1)
                {
                    hr = ZGIntf.ZG_Ctr_GetKeyTopIndex(ControllerHandler, ref _keyIndex, 0);
                    if (hr < 0)
                    {
                        log.Fatal("Ошибка ZG_Ctr_GetKeyTopIndex (" + hr + ")");
                        throw new ZCommonException("Ошибка ZG_Ctr_GetKeyTopIndex").setErrorCode(hr);
                    }
                }
                else
                {
                    _keyIndex = keyIndex;
                }
                hr = ZGIntf.ZG_Ctr_WriteKeys(ControllerHandler, _keyIndex, aKeys, 1, null, default(IntPtr), 0, true);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_WriteKeys (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_WriteKeys").setErrorCode(hr);
                }
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Пример #6
0
        public List <ControllerInfoShort> GetControllers()
        {
            IntPtr      ControllerHandler   = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo      = new ZG_CTR_INFO();
            ZG_CTR_MODE ControllerMode      = ZG_CTR_MODE.ZG_MODE_UNDEF;
            uint        ControllerModeFlags = 0;

            tmpControllerInfoShortList = new List <ControllerInfoShort>();
            int hr = ZGIntf.ZG_Cvt_EnumControllers(ConverterHandler, tmpEnumConverters, IntPtr.Zero);

            if (hr < 0)
            {
                log.Fatal("Ошибка ZG_Cvt_EnumControllers (" + hr + ").");
                throw new ZCommonException("Ошибка ZG_Cvt_EnumControllers").setErrorCode(hr);
            }
            if (tmpControllerInfoShortList.Count > 0)
            {
                for (int i = 0; i < tmpControllerInfoShortList.Count; i++)
                {
                    try
                    {
                        //Открываем контроллер
                        hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, tmpControllerInfoShortList[i].serialNumber, ref ControllerInfo);
                        if (hr < 0)
                        {
                            log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                            throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                        }
                        //Читаем режим
                        hr = ZGIntf.ZG_Ctr_GetCtrModeInfo(ControllerHandler, ref ControllerMode, ref ControllerModeFlags);
                        if (hr < 0)
                        {
                            log.Fatal("Ошибка ZG_Ctr_GetCtrModeInfo (" + hr + ")");
                            throw new ZCommonException("Ошибка ZG_Ctr_GetCtrModeInfo").setErrorCode(hr);
                        }
                        tmpControllerInfoShortList[i].mode = ControllerMode;
                    }
                    finally
                    {
                        //Автоматически закрываем контроллер
                        if (ControllerHandler != IntPtr.Zero)
                        {
                            ZGIntf.ZG_CloseHandle(ControllerHandler);
                        }
                    }
                }
            }
            return(tmpControllerInfoShortList);
        }
Пример #7
0
        public ControllerDateTime getControllerDateTime(ushort serialNumber)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Ставим контроллеру дату/время
                ZG_CTR_CLOCK clock = new ZG_CTR_CLOCK();
                hr = ZGIntf.ZG_Ctr_GetClock(ControllerHandler, ref clock);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_GetClock (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_GetClock").setErrorCode(hr);
                }
                ControllerDateTime response = new ControllerDateTime();
                response.year   = clock.nYear;
                response.month  = clock.nMonth;
                response.day    = clock.nDay;
                response.hour   = clock.nHour;
                response.minute = clock.nMinute;
                response.second = clock.nSecond;
                return(response);
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Пример #8
0
        public void setControllerDateTime(ushort serialNumber, ushort year, ushort month, ushort day, ushort hour, ushort minute, ushort second)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Ставим контроллеру дату/время
                ZG_CTR_CLOCK clock = new ZG_CTR_CLOCK();
                clock.fStopped = false;
                clock.nYear    = year;
                clock.nMonth   = month;
                clock.nDay     = day;
                clock.nHour    = hour;
                clock.nMinute  = minute;
                clock.nSecond  = second;
                hr             = ZGIntf.ZG_Ctr_SetClock(ControllerHandler, ref clock);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_SetClock (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_SetClock").setErrorCode(hr);
                }
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Пример #9
0
        internal static void Main(string[] args)
        {
            ZG_CTR_INFO rCtrInfo = new ZG_CTR_INFO();
            int         hr;
            IntPtr      hCvt;
            string      msg;

            //if (TestDeviceAccess(out hCvt, ref rCtrInfo)) return;

            if (TestDevices.TestDeviceAccess(out hCvt, ref rCtrInfo))
            {
                return;                                                       // Тестирование Доступа К Устройству
            }
            try
            {
                m_nCtrMaxEvents = rCtrInfo.nMaxEvents;
                m_fProximity    = ((rCtrInfo.nFlags & ZGIntf.ZG_CTR_F_PROXIMITY) != 0);
                m_nCtrFlags     = rCtrInfo.nFlags;

                msg = string.Format("{0} адрес: {1}, с/н: {2}, v{3}.{4}, Количество событий: {5}, Тип ключей: {6}.",
                                    CtrTypeStrs[(int)rCtrInfo.nType],
                                    rCtrInfo.nAddr,
                                    rCtrInfo.nSn,
                                    rCtrInfo.nVersion & 0xff, (rCtrInfo.nVersion >> 8) & 0xff,
                                    rCtrInfo.nMaxEvents,
                                    KeyModeStrs[m_fProximity ? 1 : 0]);
                Console.WriteLine(msg);
                OnReportHandler(msg);
                m_fCtrNotifyEnabled = false;
                int nWrIdx = 0;
                int nRdIdx = 0;
                hr = ZGIntf.ZG_Ctr_ReadEventIdxs(m_hCtr, ref nWrIdx, ref nRdIdx);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_ReadEventIdxs ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                m_nAppReadEventIdx = nWrIdx;
                //Console.WriteLine("-----");
                msg = "-----";
                Console.WriteLine(msg);
                OnReportHandler(msg);
            }
            catch (Exception ex)
            {
                OnReportHandler(ex.Message);
                throw;     // бросаемся дальше
            }



            try
            {
                string s;
                while (true)
                {
                    Console.WriteLine("Введите номер команды:");
                    Console.WriteLine("1 - показать новые события");
                    Console.WriteLine("2 - показать все события ({0})", m_nCtrMaxEvents);
                    Console.WriteLine("3 - {0} уведомления о новых событиях.",
                                      m_fCtrNotifyEnabled ? "Выключить" : "Включить");
                    Console.WriteLine("9 - Восстановить заводские настройки (сброс индексов)");
                    Console.WriteLine("0 - выход");


                    s = Console.ReadLine();
                    bool returnAfterExecute = false;
                    if (args != null && args.Length > 0)
                    {
                        s = args[0];
                        // для примера чисто тебе напишу вариант с одним параметром, ты уже сам сможешь придумать обработку нескольких или вызов методов отдельно от этого шлака
                        returnAfterExecute = true;
                    }
                    //Console.WriteLine();
                    if (s != "")
                    {
                        Console.WriteLine();
                        switch (Convert.ToInt32(s))
                        {
                        case 1:
                            DoShowNewEvents();
                            if (returnAfterExecute)
                            {
                                return;
                            }
                            break;

                        case 2:
                            DoShowAllEvents();
                            if (returnAfterExecute)
                            {
                                return;
                            }
                            break;

                        case 3:
                            // Активация контроля за новыми событиями через отдельный поток
                            ToggleEventNotifyer();
                            if (returnAfterExecute)
                            {
                                return;
                            }
                            break;

                        case 9:
                            DoRestoreFactorySettings();
                            break;

                        case 0:
                            return;

                        default:
                            Console.WriteLine("Неверная команда.");
                            break;
                        }
                    }
                    Console.WriteLine("-----");
                }
            }
            finally
            {
                StopNotifyThread();
                if (m_hCtr != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(m_hCtr);
                }
                if (hCvt != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(hCvt);
                }
                ZGIntf.ZG_Finalyze();
            }
        }
Пример #10
0
        private void Form1_Load(object sender, EventArgs e)
        {
            // Проверяем версию SDK
            UInt32 nVersion = ZGIntf.ZG_GetVersion();

            if ((((nVersion & 0xFF)) != ZGIntf.ZG_SDK_VER_MAJOR) || (((nVersion >> 8) & 0xFF) != ZGIntf.ZG_SDK_VER_MINOR))
            {
                Console.WriteLine("Неправильная версия SDK Guard.");
                Console.ReadLine();
                return;
            }

            IntPtr hCvt = new IntPtr(0);

            m_hCtr = new IntPtr(0);
            int hr;

            hr = ZGIntf.ZG_Initialize(ZPIntf.ZP_IF_NO_MSG_LOOP);
            if (hr < 0)
            {
                Console.WriteLine("Ошибка ZG_Initialize ({0}).", hr);
                Console.ReadLine();
                return;
            }
            try
            {
                ZG_CVT_INFO        rInfo = new ZG_CVT_INFO();
                ZG_CVT_OPEN_PARAMS rOp   = new ZG_CVT_OPEN_PARAMS();
                rOp.nPortType = CvtPortType;
                rOp.pszName   = CvtPortName;
                rOp.nSpeed    = ZG_CVT_SPEED.ZG_SPEED_57600;
                hr            = ZGIntf.ZG_Cvt_Open(ref hCvt, ref rOp, rInfo);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Cvt_Open ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                ZG_CTR_INFO rCtrInfo = new ZG_CTR_INFO();
                hr = ZGIntf.ZG_Ctr_Open(ref m_hCtr, hCvt, CtrAddr, 0, ref rCtrInfo);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_Open ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                m_nCtrMaxBanks = ((rCtrInfo.nFlags & ZGIntf.ZG_CTR_F_2BANKS) != 0) ? 2 : 1;
                m_fProximity   = ((rCtrInfo.nFlags & ZGIntf.ZG_CTR_F_PROXIMITY) != 0);
                Console.WriteLine("{0} адрес: {1}, с/н: {2}, v{3}.{4}, Количество банков: {5}, Тип ключей: {6}.",
                                  CtrTypeStrs[(int)rCtrInfo.nType],
                                  rCtrInfo.nAddr,
                                  rCtrInfo.nSn,
                                  rCtrInfo.nVersion & 0xff, (rCtrInfo.nVersion >> 8) & 0xff,
                                  m_nCtrMaxBanks,
                                  KeyModeStrs[m_fProximity ? 1 : 0]);
                m_oEvent = new ManualResetEvent(false);
                ZG_CTR_NOTIFY_SETTINGS rNS = new ZG_CTR_NOTIFY_SETTINGS(
                    ZGIntf.ZG_NF_CTR_KEY_TOP, m_oEvent.SafeWaitHandle, IntPtr.Zero, 0,
                    0,
                    3000, // Период проверки верхней границы ключей
                    0);
                hr = ZGIntf.ZG_Ctr_SetNotification(m_hCtr, rNS);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_SetNotification ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                StartNotifyThread();
                Console.WriteLine("-----");
                //while (true)
                //{
                //DoOpenLock(0);

                /*
                 * Console.WriteLine("Введите номер команды:");
                 * Console.WriteLine("1 - показать времена замков");
                 * Console.WriteLine("2 - установить времена замков...");
                 * Console.WriteLine("3 - открыть замок (Вход)");
                 * Console.WriteLine("4 - открыть замок (Выход)");
                 * Console.WriteLine("9 - восстановить заводские настройки (для всех банков)");
                 * Console.WriteLine("0 - выход");
                 * s = Console.ReadLine();
                 * if (s != "")
                 * {
                 *  Console.WriteLine();
                 *  switch (Convert.ToInt32(s))
                 *  {
                 *      case 1:
                 *          //ShowLockTimes();
                 *          break;
                 *      case 2:
                 *          //DoSetLockTimes();
                 *          break;
                 *      case 3:
                 *          DoOpenLock(0);
                 *          break;
                 *      case 4:
                 *          DoOpenLock(1);
                 *          break;
                 *      case 9:
                 *          //DoRestoreFactorySettings();
                 *          break;
                 *      case 0:
                 *          return;
                 *      default:
                 *          Console.WriteLine("Неверная команда.");
                 *          break;
                 *  }
                 * }
                 * Console.WriteLine("-----");
                 */
                //}
            }
            finally
            {
                if (m_hCtr != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(m_hCtr);
                }
                if (hCvt != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(hCvt);
                }
                ZGIntf.ZG_Finalyze();
            }
        }
Пример #11
0
        internal static void Main(string[] args)
        {
            ZG_CTR_INFO rCtrInfo = new ZG_CTR_INFO();
            int         hr;
            IntPtr      hCvt;
            string      msg;

            //if (TestDeviceAccess(out hCvt, ref rCtrInfo)) return;
            //if (TestDevice.TestDeviceAccess(out hCvt, ref rCtrInfo)) return; // Тестирование Доступа К Устройству


            try
            {
                m_nCtrMaxBanks = ((rCtrInfo.nFlags & ZGIntf.ZG_CTR_F_2BANKS) != 0) ? 2 : 1;
                m_fProximity   = ((rCtrInfo.nFlags & ZGIntf.ZG_CTR_F_PROXIMITY) != 0);
                // в любом месте, где мы хотим видеть текст не только в консоли, но и в результате вывода, вызываем OnReportHandler
                msg = string.Format("{0} адрес: {1}, с/н: {2}, v{3}.{4}, Количество банков: {5}, Тип ключей: {6}.",
                                    CtrTypeStrs[(int)rCtrInfo.nType],
                                    rCtrInfo.nAddr,
                                    rCtrInfo.nSn,
                                    rCtrInfo.nVersion & 0xff, (rCtrInfo.nVersion >> 8) & 0xff,
                                    m_nCtrMaxBanks,
                                    KeyModeStrs[m_fProximity ? 1 : 0]);
                Console.WriteLine(msg);
                OnReportHandler(msg);
            }
            catch (Exception ex)
            {
                OnReportHandler(ex.Message);
                throw; // бросаемся дальше
            }


            try
            {
                m_oEvent = new ManualResetEvent(false);
                ZG_CTR_NOTIFY_SETTINGS rNS = new ZG_CTR_NOTIFY_SETTINGS(
                    ZGIntf.ZG_NF_CTR_KEY_TOP, m_oEvent.SafeWaitHandle, IntPtr.Zero, 0,
                    0,
                    3000, // Период проверки верхней границы ключей
                    0);
                hr = ZGIntf.ZG_Ctr_SetNotification(m_hCtr, rNS);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_SetNotification ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                StartNotifyThread();
                Console.WriteLine("-----");
                string s;

                while (true)
                {
                    Console.WriteLine("Введите номер команды:");
                    Console.WriteLine("1 - показать ключи");
                    Console.WriteLine("2 - поиск ключа по номеру...");
                    Console.WriteLine("3 - показать верхнюю границу ключей");
                    Console.WriteLine("6 - установка ключа...");
                    Console.WriteLine("7 - стирание ключа...");
                    Console.WriteLine("8 - стирание всех ключей...");
                    Console.WriteLine("0 - выход");
                    s = Console.ReadLine();
                    bool returnAfterExecute = false;
                    if (args != null && args.Length > 0)
                    {
                        s = args[0];
                        // для примера чисто тебе напишу вариант с одним параметром, ты уже сам сможешь придумать обработку нескольких или вызов методов отдельно от этого шлака
                        returnAfterExecute = true;
                    }
                    if (s != "")
                    {
                        Console.WriteLine();
                        switch (Convert.ToInt32(s))
                        {
                        case 1:
                            ShowKeys();
                            if (returnAfterExecute)
                            {
                                return;
                            }
                            break;

                        case 2:
                            DoFindKeyByNumber();
                            break;

                        case 3:
                            ShowKeyTopIndex();
                            break;

                        case 6:
                            DoSetKey();
                            if (returnAfterExecute)
                            {
                                return;
                            }
                            break;

                        case 7:
                            DoClearKey();
                            break;

                        case 8:
                            DoClearAllKeys();
                            break;

                        case 0:
                            return;

                        default:
                            Console.WriteLine("Неверная команда.");
                            break;
                        }
                    }
                    Console.WriteLine("-----");
                }
            }
            catch (Exception ex)
            {
                OnReportHandler(ex.Message);
                throw; // бросаемся дальше
            }
            finally
            {
                StopNotifyThread();
                if (m_hCtr != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(m_hCtr);
                }
                if (hCvt != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(hCvt);
                }
                ZGIntf.ZG_Finalyze();
            }
        }
Пример #12
0
        public GetUnreadEventsResult getUnreadEvents(ushort serialNumber, int lastReadIndex, int lastReadMonth, int lastReadDay, int lastReadHour, int lastReadMinute, int lastReadSecond, int maxEvents)
        {
            IntPtr                ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO           ControllerInfo    = new ZG_CTR_INFO();
            GetUnreadEventsResult result            = new GetUnreadEventsResult();

            result.items = new List <ControllerEvent>();
            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Читаем указатель на следующее записываемое событие
                int writeIndex = 0;
                int _readIndex = 0;
                hr = ZGIntf.ZG_Ctr_ReadEventIdxs(ControllerHandler, ref writeIndex, ref _readIndex);
                //log.Info("WriteIndex: " + writeIndex);
                if (lastReadIndex == -1)
                {
                    //Никогда не читали событий из контроллера
                    //log.Info("Не читали события из контроллера");
                    if (writeIndex > 0)
                    {
                        FetchEventsResult fetchEventsResult = fetchEventsBlock(ControllerHandler, 0, writeIndex);
                        if (fetchEventsResult.items.Count > 0)
                        {
                            result.items          = fetchEventsResult.items;
                            result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                            result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                            result.lastReadDay    = fetchEventsResult.lastReadDay;
                            result.lastReadHour   = fetchEventsResult.lastReadHour;
                            result.lastReadMinute = fetchEventsResult.lastReadMinute;
                            result.lastReadSecond = fetchEventsResult.lastReadSecond;
                        }
                        else
                        {
                            result.lastReadIndex = -1;
                        }
                    }
                    else
                    {
                        //Если следующий индекс, в который будет производиться запись, равен нулю, то ничего пока не читаем
                        result.lastReadIndex = -1;
                    }
                }
                else
                {
                    //Читаем последнее полученное в прошлый раз событие
                    FetchEventsResult fetchEventsResult = fetchEventsBlock(ControllerHandler, lastReadIndex, 1);
                    //Если на прежнем месте события нет, или оно по свойствам отличается от последнего прочитанного, значит был сбой в работе контроллера
                    //и нужно перечитать все события с него
                    if ((fetchEventsResult.items.Count == 0) ||
                        !(fetchEventsResult.items[0].month == lastReadMonth) ||
                        !(fetchEventsResult.items[0].day == lastReadDay) ||
                        !(fetchEventsResult.items[0].hour == lastReadHour) ||
                        !(fetchEventsResult.items[0].minute == lastReadMinute) ||
                        !(fetchEventsResult.items[0].second == lastReadSecond)
                        )
                    {
                        //log.Info("Последнее событие отличается");
                        //Читаем хвост от следующего индекса записи до конца списка
                        fetchEventsResult = fetchEventsBlock(ControllerHandler, writeIndex, maxEvents - writeIndex);
                        if (fetchEventsResult.items.Count > 0)
                        {
                            result.items.AddRange(fetchEventsResult.items);
                            result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                            result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                            result.lastReadDay    = fetchEventsResult.lastReadDay;
                            result.lastReadHour   = fetchEventsResult.lastReadHour;
                            result.lastReadMinute = fetchEventsResult.lastReadMinute;
                            result.lastReadSecond = fetchEventsResult.lastReadSecond;
                        }
                        //Читаем от начала списка до следующего индекса записи
                        if (writeIndex > 0)
                        {
                            fetchEventsResult = fetchEventsBlock(ControllerHandler, 0, writeIndex);
                            if (fetchEventsResult.items.Count > 0)
                            {
                                result.items.AddRange(fetchEventsResult.items);
                                result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                                result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                                result.lastReadDay    = fetchEventsResult.lastReadDay;
                                result.lastReadHour   = fetchEventsResult.lastReadHour;
                                result.lastReadMinute = fetchEventsResult.lastReadMinute;
                                result.lastReadSecond = fetchEventsResult.lastReadSecond;
                            }
                        }
                        if (result.items.Count == 0)
                        {
                            result.lastReadIndex = -1;
                        }
                    }
                    else
                    {
                        //log.Info("Последнее событие в порядке");
                        if (writeIndex > lastReadIndex)
                        {
                            //Читаем небольшой хвост от текущего индекса до следующего индекса записи
                            fetchEventsResult = fetchEventsBlock(ControllerHandler, lastReadIndex + 1, writeIndex - lastReadIndex - 1);
                            if (fetchEventsResult.items.Count > 0)
                            {
                                result.items          = fetchEventsResult.items;
                                result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                                result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                                result.lastReadDay    = fetchEventsResult.lastReadDay;
                                result.lastReadHour   = fetchEventsResult.lastReadHour;
                                result.lastReadMinute = fetchEventsResult.lastReadMinute;
                                result.lastReadSecond = fetchEventsResult.lastReadSecond;
                            }
                            else
                            {
                                result.lastReadIndex  = lastReadIndex;
                                result.lastReadMonth  = lastReadMonth;
                                result.lastReadDay    = lastReadDay;
                                result.lastReadHour   = lastReadHour;
                                result.lastReadMinute = lastReadMinute;
                                result.lastReadSecond = lastReadSecond;
                            }
                        }
                        else
                        {
                            //Индекс записи до шёл до конца списка и теперь отстаёт от нас
                            //Читаем вначале хвост от нас до конца списка
                            if (lastReadIndex < maxEvents - 1)
                            {
                                fetchEventsResult = fetchEventsBlock(ControllerHandler, lastReadIndex + 1, maxEvents - lastReadIndex - 1);
                                if (fetchEventsResult.items.Count > 0)
                                {
                                    result.items.AddRange(fetchEventsResult.items);
                                    result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                                    result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                                    result.lastReadDay    = fetchEventsResult.lastReadDay;
                                    result.lastReadHour   = fetchEventsResult.lastReadHour;
                                    result.lastReadMinute = fetchEventsResult.lastReadMinute;
                                    result.lastReadSecond = fetchEventsResult.lastReadSecond;
                                }
                            }
                            //Читаем от начала списка до индекса записи
                            if (writeIndex > 0)
                            {
                                fetchEventsResult = fetchEventsBlock(ControllerHandler, 0, writeIndex);
                                if (fetchEventsResult.items.Count > 0)
                                {
                                    result.items.AddRange(fetchEventsResult.items);
                                    result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                                    result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                                    result.lastReadDay    = fetchEventsResult.lastReadDay;
                                    result.lastReadHour   = fetchEventsResult.lastReadHour;
                                    result.lastReadMinute = fetchEventsResult.lastReadMinute;
                                    result.lastReadSecond = fetchEventsResult.lastReadSecond;
                                }
                            }
                            if (result.items.Count == 0)
                            {
                                result.lastReadIndex  = lastReadIndex;
                                result.lastReadMonth  = lastReadMonth;
                                result.lastReadDay    = lastReadDay;
                                result.lastReadHour   = lastReadHour;
                                result.lastReadMinute = lastReadMinute;
                                result.lastReadSecond = lastReadSecond;
                            }
                        }
                    }
                }
                //log.Info("Событий вернулось: " + result.items.Count);
                return(result);
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }