Upnpx LastChangeParser

Я тестирую библиотеку upnpx для управления многокомнатной аудиосистемой Sonos... работает хорошо. У меня есть только одна основная проблема с событиями. Если я получаю событие изменения громкости от рендерера Sonos, например

<Event xmlns="urn:schemas-upnp-org:metadata-1-0/RCS/"><InstanceID val="0"><Volume channel="Master" val="66"/><Volume channel="LF" val="100"/><Volume channel="RF" val="100"/></InstanceID></Event>

я получаю не событие отверстия и неправильные значения в
-(void)UPnPEvent:(BasicUPnPService*)sender events:(NSDictionary*)events{

InstanceID = 100; Volume = 100;

так должно быть ...

InstanceID = 0; Volume = 66;

Я был бы очень рад, если бы кто-то мог посоветовать мне правильное направление!

С уважением, ФТЗ.

upnpxdemo[66489:1310b] BasicParser.h didStartElement: propertyset

upnpxdemo[66489:1310b] BasicParser.h didStartElement: property

upnpxdemo[66489:1310b] BasicParser.h didStartElement: LastChange

upnpxdemo[66489:1310b] BasicParser.h didEndElement: LastChange, obj: <Event xmlns="urn:schemas-upnp-org:metadata-1-0/RCS/"><InstanceID val="0"><Volume channel="Master" val="52"/><Volume channel="LF" val="100"/><Volume channel="RF" val="100"/></InstanceID></Event>

upnpxdemo[66489:1310b] LastChange - element:LastChange, value:<Event xmlns="urn:schemas-upnp-org:metadata-1-0/RCS/"><InstanceID val="0"><Volume channel="Master" val="52"/><Volume channel="LF" val="100"/><Volume channel="RF" val="100"/></InstanceID></Event>

upnpxdemo[66489:1310b] BasicParser.h didStartElement: Event

upnpxdemo[66489:1310b] BasicParser.h didStartElement: InstanceID

upnpxdemo[66489:1310b] BasicParser.h didStartElement: Volume

upnpxdemo[66489:1310b] LastChangeParser.h void propertyName name:Volume value:52

upnpxdemo[66489:1310b] BasicParser.h didStartElement: Volume

upnpxdemo[66489:1310b] LastChangeParser.h void propertyName name:Volume value:100

upnpxdemo[66489:1310b] BasicParser.h didStartElement: Volume

upnpxdemo[66489:1310b] LastChangeParser.h void propertyName name:Volume value:100

upnpxdemo[66489:1310b] LastChangeParser.h void propertyName name:InstanceID value:100

upnpxdemo[66489:1310b] Event Digctionary: {
    InstanceID = 100;
    Volume = 100;
}

person user1386639    schedule 01.11.2012    source источник


Ответы (1)


Событие правильное. Я скачал исходный код upnpx, но не мог сразу понять логику BasicParser и UPnPEventParser - я работал в Objective-C только так долго. Интересно, как upnpx учитывает тот факт, что у вас может быть несколько значений для одного и того же ключа, отличающихся только атрибутом channel. Это исключение в соглашении об именах для события LastChange, ключи обычно уникальны. Последнее Volume, представленное в событии, равно 100, поэтому upnpx, возможно, все время заменяет значение для ключа Volume.

Однако это не объясняет неправильную нумерацию InstanceID. Вы уверены, что правильно поняли? Можете выложить полный дамп events NSDictionary?

person Pavel Zdenek    schedule 02.11.2012
comment
Спасибо за ваш ответ, я добавил журнал событий... спасибо FTZ - person user1386639; 04.11.2012
comment
Так что я был прав насчет Volume. Журнал обращается к нему 3 раза без упоминания свойства channel, что означает, что 3 значения хранятся в одном и том же ключе NSDictionary (перезаписывая предыдущее значение). Неправильный InstanceID, кажется, как-то связан с этой перезаписью, так как он получает то же значение. У меня нет времени изучать код upnpx. Но это определенно ошибка, и дефект должен быть заполнен на сайте upnpx. - person Pavel Zdenek; 05.11.2012
comment
Здравствуйте Павел, спасибо за оценку проблемы!! Я заполню вопрос в группе upnpx. - person user1386639; 05.11.2012
comment
Благодарность за переполнение стека = голосование и/или принятие ответа :) - person Pavel Zdenek; 05.11.2012