Поскольку ваше выбранное состояние само по себе является наблюдаемым, вы можете объединить его в свой поток с оператором withLatestFrom
.
Это грубый пример, но я думаю, что вы ищете что-то вроде:
@Effect()
loadEstateOwners$ = this.actions$.pipe(
ofType(EstateOwnerListActionTypes.LoadEstateOwners),
withLatestFrom(this.store.select('userProfile')),
map(([actions, user]) => {
// Do something ...
})
);
Подробнее о withLatestFrom
в документации по rxjs здесь: https: // www.learnrxjs.io/operators/combination/withlatestfrom.html
Я думаю, что необходимо добавить IP_MULTICAST_IF
struct ip_mreq multi;
multi.imr_multiaddr.s_addr = inet_addr(group.c_str());
multi.imr_interface.s_addr = (source_iface.empty() ?
htonl(INADDR_ANY): inet_addr(source_iface.c_str()));
status = setsockopt(me->ns_fd, IPPROTO_IP, IP_MULTICAST_IF,
(char *)&multi.imr_interface.s_addr,
sizeof(multi.imr_interface.s_addr));
Я надеюсь, что это помогает.
После некоторого поиска и тестирования я нашел здесь, что при привязке udp многоадресно передавал сокет, мы указываем, что порт и отпуск обращаются пустой, например, указывают INADDR_ANY
.
Так следующее
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = (source_iface.empty() ?
htonl(INADDR_ANY) :
inet_addr(source_iface.c_str()));
должен быть будьте похожи:
КОММЕНТАРИЙ: Если я понимаю Ваш код, необходимо связывать с групповым адресом не подстановочный адрес. Если Вы свяжете с подстановочным адресом, то Вы сможете получить одноадресные пакеты на своем порте многоадресной передачи. Привязка к Вашему групповому адресу предотвратит это и гарантирует, чтобы Вы только получили многоадресные пакеты на том порте.
Править: Зафиксированный код на основе вышеупомянутого комментария, обязывая с групповым адресом, сохраненным в 'группе', в противоположность INADDR_ANY получать только многоадресные пакеты, отправленные в групповой адрес.
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = (group.empty() ?
htonl(INADDR_ANY) :
inet_addr(group.c_str()));
Это решило проблему. Добавление IP_MULTICAST_IF
не поможет, потому что это - для выбора определенного интерфейса для отправки udp данные, проблема выше была на получении стороны.