Автоматизация внешних приложений

Здесь обсуждаются любые продукты компании СофтЛаб-НСК для телевизионного вещания (Форвард Т, Форвард ТС, Форвард Голкипер, Форвард Рефери, Форвард Офис, Форвард Инжест)

Модераторы: ElenVR, Людмила, PR

Закрыто
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Даниленко Сергей писал(а):
Кстати, не подскажете, как определить версию уже установленного ПО?
Как это сделать "руками-глазами" описано здесь:
http://www.softlab-nsk.com/rus/forward/qna.html#a2_14

Или нужно программно?
Нет, пока нужно только глозами...спасибо за помощь!
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

ок
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Здраствуйте!

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

Код: Выделить всё

    LPUNKNOWN ptr=0;
    HRESULT res=Connection->CreateQueue(&ErrorCode,&ResultCode,QueueName,
      (long)NotifyWindow,NotifyMessage,NotifyWParam,NotifyLParam,&ptr));
    if (res!=S_OK) {ResultCode=res; return 0;}
    if (ErrorCode!=mcSuccess) return 0;
    ResultCode=ptr->QueryInterface(IID_ISLMSQueue,(void**)&Queue));
    if (ResultCode!=S_OK) return 0;
    // готов к работе с сообщениями
    return 1;
Вопрос такой: увеличивает ли счетчик ссылок на экземпляр очереди метод CreateQueue?
Если да, то правильно ли я понимаю, что пропущен вызов ptr->Release()?
Если нет, тогда весьма странно, каким же там образом создается экземпляр COM-объекта очереди.
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

Если да, то правильно ли я понимаю, что пропущен вызов ptr->Release()?
Да, в этом куске кода нужен вызов Release.
Последний раз редактировалось Даниленко Сергей 10 сен 2008 09:31, всего редактировалось 1 раз.
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Даниленко Сергей писал(а):Если да, то правильно ли я понимаю, что пропущен вызов ptr->Release()?
Да, в этом куске кода нужен вызов Release.
Спасибо.

Еще момент :)
После выполнения всех действий порегистрации компонентов сервера сообщений, при потыке создания экземляра класса Connection, возращается ошибка "Class not registered".
Однако, OleView показывает, что библиотеки типов зарегистрированы.

Не подскажете, в чем здесь проблема?
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

1) Здесь лежит наше тестовое приложение:
ftp://ftp.sl.iae.nsk.su/Public/ForwardT ... MSTest.zip
Попробуйте его запустить на "усеченном" варианте ПО
2)Попробуйте все таки установить ПО ForwardT Software полностью. Это поможет понять все ли необходимые компоненты есть ( или нужно что-то дополнительно) или проблем в вашем коде. В дальнейшем можно будет опять вернуться к минимальному набору компонентов для SLMessageServer.
3)А можно как-нибудь получить кусок кода, в котором происходит ошибка? Можно его скинуть на forward@sl.iae.nsk.su.
4)А .Net Framework 3.0 установлен?
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Даниленко Сергей писал(а): 4)А .Net Framework 3.0 установлен?
М-да, лажанулся...прошу прощения.

Объекты стали создаваться, но сообщения не приходят, т.е. сервер сообщений запущен, создается слушающее соединение. При запуске плей-листа на OnAir открывается входящее соединение с моей машиной по порту 51051, но в программу сообщения не доходят.
Пробовал и свой тест, и пример на C# из SDK (SLMessageSample), и тест по ссылке выше - одинаково. В очереди нет сообщений.

В OnAir в настройках поставил галку "Отправлять сообщения..." и добавил свою машину, о чем, собсно, свидетельствует открытое на моей машине входящее соединение.

Может еще чего не сделал? В хелпе рылся - ничего не нашел...
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

Сообщение Даниленко Сергей »

1)Грыжики в программе OnAir в этом случае ставить не надо - они нужны только для опции зеркалирования.
2)А в нашей тестовой программе вы пробовали соединиться с OnAir? Есть ли в ней связь?
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Даниленко Сергей писал(а):1)Грыжики в программе OnAir в этом случае ставить не надо - они нужны только для опции зеркалирования.
Хм, может и машины в список добавлять не надо? Они тоже добавляются на закладке "Зеркалирование". Тогда как, в таком случае, сервер узнает куда команды кидать? :?
Даниленко Сергей писал(а): 2)А в нашей тестовой программе вы пробовали соединиться с OnAir? Есть ли в ней связь?
Я пробовал только получать сообщения, создав очередь.
Можете обяснить подробнее, как с помощью тестовой программы проверить работоспособность связки клиент-сервер?
А то там слишком много кнопок...

А вообще, насколько я понял из примеров, никакого соединения создавать не надо (мне нужно только принимать команды).
Я должен создать на своей стороне Connection и Queue и сидеть ждать. Однако, в этом случае непонятно, откуда сервер узнает, что я жду?
Или он шлет широковещательные запросы в сеть?

PS: Надеюсь, сервер шлет команды по каждому событию, т.е. нет необходимости у элемента плей-листа выставлять какие-нибудь флаги дополнительные?
krukovna
Сообщения: 57
Зарегистрирован: 30 май 2007 17:18

Сообщение krukovna »

kasa, приветствую!

Я сам недавно разбирались со всей этой системой и возможно сумею Вам ответить. Заодно проверим, правильно ли я все понял)

Вы не должны просто сидеть и ждать. Вы посылаете Форварду комманду, а он на нее отвечает. Список комманд пригалался к описанию SLMessageServerSDK.doc

Если хотите, могу выслать исходники моего рабочего приложения. Делает оно следующее - время от времени опрашивает Форвард и получает информацию о текущем проигрываемом файле. В зависимости от этого уже можно делать все что угодно дальше) А если я Вас правильно понял, то вам примерно это и надо.
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

здравствуйте, krukovna!

спасибо за то, что откликнулись!
однако, тогда я не понимаю, зачем мне создавать очередь сообщений на своей машине? это во всех примерах сделано...
по вашей логике, мне будет достаточно создать соединение...стоп, а через соединение я не могу послать команду, только через очередь...м-да, что-то тут для меня не все интуитивно...

тогда получается, что:
1. я создаю соединение
2. создаю очередь
3. делаю запрос состояния через SendMessage
4. выбираю ответы в виде сообщений через GetMessage

я правильно понял механизЬм?

а если так, то вопрос к разработчикам: а сервер дает ответ синхронно или асинхронно? или так: могу ли я сразу же после отправки запроса забирать ответ?

ЗЫ: а вообще, я каким-то странным образом пропустил главу Опрос состояния приложения FDOnAir в документе...не заметил :roll:
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

Хм, я тут подумал...что-то не очень мне нравится перспектива долбить сервер по сети каждую секунду. Да и неправильно это, имхо.
Такой механизм можно использовать, разве что, для пинга сервера, раз в минут пять, на предмет выявления обрыва связи...

Мне кажется, что я бы мог использовать для своей задачи механизм зеркалирования.
Я ведь правильно понимаю, что в этом режиме сервер уже сам шлет команды другому серверу?
А что тогда мешает моей программе прикинуться сервером?

Тогда вопрос такой: как прикинуться сервером? :)
krukovna
Сообщения: 57
Зарегистрирован: 30 май 2007 17:18

Сообщение krukovna »

kasa, вроде да, логика именно такая должна быть.

меня тоже смущает вопрос постоянного опроса сервера, он немного поднимался уже вот в этой теме. Но так как другого варианта я не нашел, то пришлось оптимизировать алгоритм опроса. Так как мне нужна информация о состоянии плейлиста, я заранее прикидываю когда нужно опросить в след раз, ну плюс-минус разумеется :).
С другой стороны, что плохого в постоянном опросе? Разговор же идет о "разе в секунды", а не "разы в секунду".

Про зеркалирование я не очень в теме, но вроде для совсем других нужд оно используется. Все же да, хотелось бы получить ответ на этот вопрос.
kasa
Сообщения: 90
Зарегистрирован: 04 сен 2008 01:50
Откуда: Красноярск

Сообщение kasa »

krukovna писал(а):С другой стороны, что плохого в постоянном опросе?
Архитектура :)
krukovna писал(а): Про зеркалирование я не очень в теме, но вроде для совсем других нужд оно используется. Все же да, хотелось бы получить ответ на этот вопрос.
Думаю, что цели могут быть и другие, а вот команды те же :)
Предполагаю, что то, что пишется в лог команд, то же и пуляется на те машины, которые указаны в списке настроек зеркалирования...но нужно подтверждение разработчиков...

Сдается мне, что надо просто в своей программе создать очередь с именем "FDOnAir2", ибо для пуляния команд пулятель должен знать название очереди, а мы это название не можем сообщить серверу через настройки...значит, надо использовать стандартное :)
krukovna
Сообщения: 57
Зарегистрирован: 30 май 2007 17:18

Сообщение krukovna »

kasa писал(а):Предполагаю, что то, что пишется в лог команд, то же и пуляется на те машины, которые указаны в списке настроек зеркалирования...
согласен, но нужно именно
kasa писал(а):но нужно подтверждение разработчиков...
kasa писал(а):Сдается мне, что надо просто в своей программе создать очередь с именем "FDOnAir2", ибо для пуляния команд пулятель должен знать название очереди, а мы это название не можем сообщить серверу через настройки...значит, надо использовать стандартное
Название очереди может быть любое, как я понимаю. Главное указать получателя - т.е. экземпляр OnAir. А он ответит в ту же очередь.
Закрыто