Управление форвардом из Си++

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

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

Ответить
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

И неплохо бы в документации в примечаниях обозначить, что при создании очереди, ее имя должно быть уникальным.
Про это обязательно добавим в SDK.
Т.е. объяснить момент, что каждая сторона создает свою очередь и они односторонние.
Очереди не односторонние. Очередь создается и для передачи сообщений, и для приема. Механизм приема такой: окно ловит сообщение о том, что пришли какие-то данные. Дальше нужно вызвать из очереди соответствующие методы, чтобы вынуть присланную информацию.
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

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

Маленькое уточнение.
Для "ловли" сообщений не обязательно нужно иметь окно. Работать с окном удобней, но можно и без него.
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

В интерфейсе ISLMSQueue есть метод GetCounts - его можно периодически вызывать в каком-нибудь отдельном потоке. Как только оказалось, что счетчик пришедших сообщений больше нуля, можно вынимать сообщения. При таком подходе, действительно, окно не нужно.

Даже если окно используется, то после того, как в окно пришло сообщение, в его обработчике все равно нужно делать то же самое - вызывать GetCounts и вынимать сообщения из очереди.
vd
Сообщения: 2311
Зарегистрирован: 05 мар 2003 19:21

Сообщение vd »

Написал пример Win32-программы на MS Visual C++, посылающей команду запуска расписания в первый экземпляр программы FDOnAir.

В файле stdafx.h должно присутствовать:

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

#include <atlbase.h>
#include <atlstr.h>

// SLMessageServer
#import "libid&#58;80418EB6-3E79-4F86-AB75-9549D4F38BD8" named_guids raw_interfaces_only\
	rename&#40;"GetMessage", "SLGetMessage"&#41;\
	rename&#40;"SendMessage", "SLSendMessage"&#41;
using namespace SLMessageQueue2Lib;
Основная программа:

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

#include "stdafx.h"

int _tmain&#40;int argc, _TCHAR* argv&#91;&#93;&#41;
&#123;
	&#58;&#58;CoInitialize&#40;NULL&#41;;
	// create connection
	CComPtr<ISLMSConnection> pConnection;
	if&#40;S_OK != pConnection.CoCreateInstance&#40;CLSID_SLMSConnection&#41;&#41; return -1;
	// create queue
	SLMSErrorCode ErrorCode;
	HRESULT ResultCode;
	HWND NotifyWindow = NULL; // no window is used, NotifyCmd, NotifyWParam, NotifyLParam aren't used too
	long NotifyCmd = WM_USER+100,NotifyWParam = 0,NotifyLParam = 0;
	CComBSTR bstrQName&#40;_T&#40;"TestQueue"&#41;&#41;; // IMPORTANT&#58; not "FDOnAir1" !
	CComPtr<IUnknown> pUnk;
	if&#40;S_OK != pConnection->CreateQueue&#40;&ErrorCode, &ResultCode, bstrQName,
		&#40;long&#41;NotifyWindow,NotifyCmd,NotifyWParam,NotifyLParam,&pUnk&#41;&#41; return -1;
	if&#40;ErrorCode!=mcSuccess&#41; return -1;
	// get ISLMSQueue interface
	CComQIPtr<ISLMSQueue> pQueue&#40;pUnk&#41;;
	if&#40;!pQueue&#41; return -1;
	// send 'Start schedule' command to FDOnAir #1
	CStringW queue_name = L"FDOnAir1";
	CStringW subject = L"OnAir1.Mirror";
	CStringW cmd = L"Shedule.Start";
	CStringW local = L"Localhost";
	// convert CString to CComBSTR
	CComBSTR bToQueue&#40;queue_name&#41;;
	CComBSTR bSubj&#40;subject&#41;;
	CComBSTR bBody&#40;cmd&#41;;
	CComBSTR bToMachine&#40;local&#41;;
	long MessId = 1; // any ID can be used
	pQueue->SLSendMessage&#40;&ErrorCode,&ResultCode,MessId,0,0,bToMachine,bToQueue,bSubj,bBody&#41;;

	return 0;
&#125;
AntonChik
Сообщения: 83
Зарегистрирован: 16 фев 2010 15:32
Откуда: г. Красноярск

Сообщение AntonChik »

Подскажите, пожалуйста, что не так?
Установил ForwardTxLite 5.4.0
Скачал SDK 5.3.0
Только сейчас посмотрел на версии и задумался о соответствии,
тем не менее, расскажу дальше. Запустил OnAir и SLTitlePreview, открыл в vc++2008 пример для SLTMTitleRunTimeSDK, успешно откомпилировал и запустил.
Далее в запущенном приложении при открытии титровального проекта получаю ошибку:
Error on InitProject error code =0x81234567 Титровальное Ядро не может соединиться с Видеопроцессором. Исходное сообщение: Сбой при получении производства объектов класса COM для компонента с CLSID {DD..1A} в результате следующей ошибки: 80040154 (Класс не зарегистрирован)

Что следует сделать? Дело ведь я так понимаю не в использовании версии Lite (на плате просто пока не могу попробовать)
int
Сообщения: 21
Зарегистрирован: 03 июн 2013 14:12

Сообщение int »

Дело ведь я так понимаю не в использовании версии Lite (на плате просто пока не могу попробовать)
Именно в ней. У меня тоже была такая проблема. Класс действительно не зарегистрирован в Lite версии. Не помню есть ли в Lite версии сервер, но он сам не регистрируется это точно. Лично я переносил с "боевого" эфирного форварда.

Все богатство лежит здесь:
C:\Program Files (x86)\Common Files\SoftLab-Nsk\

SLMessageServer2.exe
SLMessageRemote2.dll
SLMessageQueue2.dll

Сам класс, понятное дело, надо еще зарегистрировать. Конкретно нужен SLMessageQueue2.dll:

C:\Program Files (x86)\Common Files\SoftLab-Nsk>regsvr32 SLMessageQueue2.dll

Команду нужно выполнять из под админской консоли на системах с UAC (Windows 7, например) - "Запуск от имени администратора".
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

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

Для int:

Вы похоже вводите человека в заблуждение.
1)Компоненты SLMessageServer SDK достаточно давно входят в Форвард Lite. По крайней мере, в 5.4.0 они присутствуют.
2)Наше ПО уже тысячу лет как не ставится в C:\Program Files (x86)\Common Files\SoftLab-Nsk\
3)Ну и про регистрацию компонентов у вас, мягко говоря, не совсем верно. Вы почему то привели только регистрацию одной СОМ-библиотеки. А есть ещё и сервис. Есть ещё и .Net библиотека.

Для AntonChik:

Я попросил нащих разработчиков ответить на ваше сообщение.
int
Сообщения: 21
Зарегистрирован: 03 июн 2013 14:12

Сообщение int »

Компоненты SLMessageServer SDK достаточно давно входят в Форвард Lite
Когда я ставил летом этого года, у меня тоже ничего не работало. Не было ни COM объекта, ни службы, ни даже самих файлов сервера, версия была именно 5.4.0. Не в упрек вам и вашей команде. Согласен я не упомянул про службу. Но Форвард Лайт действительно не позволяет без вмешательства нормально работать.

P.S. Может файлы как-то по другому называются или действительно находятся в другом месте. Тогда тот факт, что они не зарегистрированы в реестре Windows это вполне баг-репорт.
Игорь Таранцев
Сообщения: 493
Зарегистрирован: 04 янв 2004 12:45
Откуда: СофтЛаб-НСК

Сообщение Игорь Таранцев »

AntonChik писал(а):Далее в запущенном приложении при открытии титровального проекта получаю ошибку:
Error on InitProject error code =0x81234567 Титровальное Ядро не может соединиться с Видеопроцессором. Исходное сообщение: Сбой при получении производства объектов класса COM для компонента с CLSID {DD..1A} в результате следующей ошибки: 80040154 (Класс не зарегистрирован)
Что следует сделать? Дело ведь я так понимаю не в использовании версии Lite (на плате просто пока не могу попробовать)
Я думаю, что ошибка связана с отсутствием какого-либо из титровальных элементов, которые используются в Вашем титровальном проекте. Вам нужно попробовать загрузить выбранный Вами титровальный проект в OnAir - он должен загрузиться без ошибок. Затем OnAir нужно закрыть (или очистить титровальный проект) и попытаться загрузить титровальный проект в тестовом приложении. Если ошибка останется, то сделайте ее скриншот (или копию полного текстового описания) и пришлите на почту техподдержки (к письму приложите титровальный проект).
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

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

Для int:
Когда я ставил летом этого года, у меня тоже ничего не работало. Не было ни COM объекта, ни службы, ни даже самих файлов сервера, версия была именно 5.4.0. Не в упрек вам и вашей команде. Согласен я не упомянул про службу. Но Форвард Лайт действительно не позволяет без вмешательства нормально работать.
Во-первых:

Машина с операционной системой Win 7 64-bit

Установлен Форвард Lite:
ИзображениеЩелкните по изображению для увеличения

Видно куда именно ставится и что компоненты SLMessageServerSDK установлены:
ИзображениеЩелкните по изображению для увеличения

Во-вторых:
Может файлы как-то по другому называются или действительно находятся в другом месте. Тогда тот факт, что они не зарегистрированы в реестре Windows это вполне баг-репорт.
Если вы не можете предоставить здесь проверенную информацию о размещении файлов и способе их регистрации, то зачем этоделать вообще?
int
Сообщения: 21
Зарегистрирован: 03 июн 2013 14:12

Сообщение int »

Предоставлю, дайте время.

По поводу C:\Program Files\Common Files\SoftLab-Nsk

Да, действительно, файлы там есть. Только вот это для x64 сборок каталог. 32-битные библиотеки должны лежать в C:\Program Files (x86)\Common Files\SoftLab-Nsk.
Последний раз редактировалось int 24 дек 2013 18:42, всего редактировалось 1 раз.
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

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

Вы кого-то хотите напугать ? :(

М ещё, пожалуйста, обратите внимание на такой факт. Да, вопрос задан в теме "управление форвардом из ...", но речь идёт несколько о другом.
открыл в vc++2008 пример для SLTMTitleRunTimeSDK
А это к теме SLMessageServerSDK не имеет никакого отношения.
int
Сообщения: 21
Зарегистрирован: 03 июн 2013 14:12

Сообщение int »

Напугать? Вы думаете я в войнушки играюсь? Я просто хочу донести до вас то, что существует проблема. Вы (в лице команды разработчиков естественно) сами же в этой теме признали, что документации не достаточно. Также меня заверили, что не зарегистрированный сервер это сбой. Так давайте я подготовлю баг-репорт и, надеюсь, помогу тем самым выяснить что стало причиной этого сбоя.
Даниленко Сергей писал(а):М ещё, пожалуйста, обратите внимание на такой факт. Да, вопрос задан в теме "управление форвардом из ...", но речь идёт несколько о другом.
открыл в vc++2008 пример для SLTMTitleRunTimeSDK
А это к теме SLMessageServerSDK не имеет никакого отношения.
Человек написал о конкретной ошибке "Класс не зарегистрирован". Я сталкивался с такой же ошибкой и класс (правда другой, вы правы), действительно не был зарегистрирован.
Даниленко Сергей
Сообщения: 7093
Зарегистрирован: 26 фев 2004 09:53
Откуда: Techsupport SoftLab-NSK

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

А имеет ли глубокий смысл ковыряться в софте почти уже годичной давности? Это я так, с целью экономии вашего времени. Всё равно та версия уже не поддаётся исправлению.
Если что-то и искать, то уж ищите в текущей версии ПО:
ftp://ftp.sl.iae.nsk.su/Public/ForwardT ... 05_300.exe

Насчёт полноты документации я просто промолчу.

Ну и ещё раз:
М ещё, пожалуйста, обратите внимание на такой факт. Да, вопрос задан в теме "управление форвардом из ...", но речь идёт несколько о другом.
открыл в vc++2008 пример для SLTMTitleRunTimeSDK
А это к теме SLMessageServerSDK не имеет никакого отношения.
int
Сообщения: 21
Зарегистрирован: 03 июн 2013 14:12

Сообщение int »

Декомпилировал ваш инсталлятор.

Вот таким образом у вас регистрируются сборки COM:

Proc [92] Export: GETREGASMPATH 8 @8
[0] PUSHVAR Base[-1] // 1
[6] CALL 93
[11] POP // 0
[12] CALC Base[-1] + ['\Microsoft.NET\Framework\v2.0.50727\regasm.exe ']
[75] RET

Т.е. вы получаете путь к regasm на основе жестко заданной версии .NET. Что если у меня другая версия .NET (хотя бы немного)? Скрипт не отработает и файл не будет зарегистрирован. Вот некоторые другие файлы у вас прописаны явно для регистрации:

Filename: "regsvr32.exe"; Parameters: "/s ""{app}\FDTitle\Logotype.dll"""; MinVersion: 4.1,4.0; Flags: skipifdoesntexist
Насчёт полноты документации я просто промолчу.
А это все, что вам остается. У Teleview тоже документация отличная, она не для всех микшеров, которые существуют у них в продаже. Ибо никому не надо, был ответ официальных представителей. Проблема русского железа в том, что оно отлично работает и лучше западных и корейских аналогов в своем ценовом диапазоне. Вот только SDK наши делать не умеют и документацию тоже (я сам работаю в IT компании и у нас та же беда). У тех же корейцев для сравнения (Datavideo) отличная документация и я с ними вообще не общался в процессе работы.

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