Вопрос по кодингу модуля сервера.

Стартовая страница Форумы Разработка и интеграция Вопрос по кодингу модуля сервера.

Просмотр 15 сообщений - с 16 по 30 (из 38 всего)
  • Автор
    Записи
  • #6994
    Mikhail
    Модератор

    Перезапуск сервера — это полностью новый запуск службы, поэтому конструктор вызывается. Хотя в идеале нужно стремиться к тому, чтобы при вызове OnServerStart и OnServerStop модуль корректно перезапускался.
    Если есть вопросы по отладке модуля в дебаггере — задавайте.

    #6996
    OldManSpb
    Участник

    Cпасибо.
    Теперь возник еще вопрос. Мне надо получить список текущих данных и статусов по всем каналам. То есть нужен один срез, но по всем каналам имеющимся в таблице каналов одновременно. Насколько я понял в текущем срезе могут быть не все каналы?

    #6997
    Romiros
    Участник

    Не все. Только те, данные которых изменились.
    Чтобы получить все каналы, нужно читать таблицу вручную. В onserverstart создать отдельный поток и из него обращаться к таблице текущего среза. Поищите по форуму, уже обсуждалось

    • Ответ изменён 8 лет, 11 месяцев назад пользователем Romiros.
    #6999
    Mikhail
    Модератор

    При сработке методов модуля OnCurDataProcessed и OnCurDataCalculated вам передаётся ссылка на срез всех каналов. Вам достаточно получать срез внутри этих методов? Чтобы получить срез из заданных каналов используйте переменную ServerData.
    Читать срез напрямую из файла допустимо, но не очень красиво, на мой взгляд, потому что срез уже есть в памяти.
    Вы разобрались, как использовать отладчик Visual Studio?

    #7002
    OldManSpb
    Участник

    Я должен передать другому серверу раз в три минуты данные по каждому каналу и статус плюс единицы измерения, название КП, объекта и т п. Это делается в отдельном потоке, по таймеру. Список каналов я беру из соответствущей таблицы. Соответственно надо добавить в это сообщение текущие значения и статусы по каждому каналу. Внутри методов OnCurDataProcessed и OnCurDataCalculated устраивает, я могу работать и асинхронно. Просто могу в своем модуле хранить срез всех каналов и обновлять его при приходе новых данных, а когда надо передать то брать оттуда.
    С отладкой еще не разбирался.

    #7008
    Mikhail
    Модератор

    OnCurDataCalculated вызывается постоянно, поэтому рекомендую в нём получать нужные данные. В текущей реализации ссылка на текущий срез, который передаётся в этих методах, не меняется, но нет гарантии, что так и будет дальше.

    Если не хотите «грязное чтение» из среза, то при его чтении сделайте lock (curSrez)
    Однако, при неосторожном обращении с lock Сервер может зависнуть из-за взаимных блокировок.

    #7009
    OldManSpb
    Участник

    То есть я правильно понимаю, что в первом аргументе OnCurDataProcessed и OnCurDataCalculated передаются каналы которые в данный момент обновились, а во втором просто ссылка на полный срез? То есть можно в своем модуле не хранить ничего в памяти?

    #7015
    Mikhail
    Модератор

    OnCurDataProcessed(int[] cnlNums, SrezTableLight.Srez curSrez)
    OnCurDataCalculated(int[] cnlNums, SrezTableLight.Srez curSrez)

    Аргументы curSrez — один и тот же полный срез, а cnlNums каждый раз разные по смыслу

    #7016
    OldManSpb
    Участник

    Понятно, спасибо, разобрался. Все работает, Михаил спасибо огромное. Сейчас есть задача сделать СМС шлюз для https://smsbliss.ru/ я так понимаю готового ничего нет, надо писать? Если да, готов подключиться к github, так как это в отличие от предыдущего моего проекта может пригодиться всем. В принципе можно сделать универсальный модуль, который будет формировать POST запрос для любого шлюза.

    • Ответ изменён 8 лет, 11 месяцев назад пользователем OldManSpb.
    #7021
    manjey73
    Участник

    Не обязательно присоединиться, можно просто выложить на github, а Михаил если что сделает ссылку на драйвер или модуль.

    #7030
    Mikhail
    Модератор

    Есть готовый не опубликованный драйвер, который мы используем для https://smsc.ru/
    Думаю, он подойдет. Вот ссылка, но проблема в том, что драйвер собран под новую версию Коммуникатора, может не заработать на текущей. Думаю, что нужно будет включить этот драйвер в дистрибутив для всех.

    Применительно в выкладыванию модулей, однозначно рекомендую GitHub. Есть хорошие аналоги, но всё же GitHub самый популярный.

    #7060
    OldManSpb
    Участник

    Я сделал модуль для https://smsbliss.ru/. Михаил, мне его залить в ваш GitHub или в свой? Для вашего надо доступ.

    #7068
    Mikhail
    Модератор

    Выкладывайте на свой аккаунт и присылайте ссылку. Желательно на гитхабе сделать подробное описание, как здесь и также добавить вариант описания на английском. Тогда я смогу опубликовать драйвер в репозитории модулей.

    Вы не пробовали тот драйвер, ссылку на который я публиковал?

    #7069
    Mikhail
    Модератор

    Идеология Rapid SCADA такова, что чем больше авторов и разнообразных модулей, тем лучше. При этом автор сам поддерживает свои модули в актуальном состоянии и отвечает на вопросы по нему, добровольно конечно ))

    #7088
    OldManSpb
    Участник
Просмотр 15 сообщений - с 16 по 30 (из 38 всего)
  • Для ответа в этой теме необходимо авторизоваться.