Сначала сделайте свои хаб-события наблюдаемыми. Я адаптировал этот код для работы. против ASP.NET Core SignalR.
Затем создайте эпос для запуска хаба (я использую машинописный текст), отправьте это действие где-нибудь при запуске.
const startNotificationHubEpic: Epic<RootAction, RootAction, RootState, Services> = (action$, store, { notificationHub }) => {
return action$.pipe(
filter(isActionOf(startNotificationHub.request)),
switchMap(action =>
from(notificationHub.start()).pipe(
map(() => startNotificationHub.success()),
catchError(err => of(startNotificationHub.failure(err)))
)));
}
Наконец, используйте действие startNotificationHub.success, чтобы начать прослушивание потоков событий rsjx на хабе для каждого интересующего вас события.
const listenForMessageEpic: Epic<RootAction, RootAction, RootState, Services> = (action$, store, { notificationHub }) => {
return action$.pipe(
filter(isActionOf(startNotificationHub.success)),
switchMap(act =>
notificationHub.on("Message", (messag: string) => ({message})).pipe(
map(notif => onMessage(notif))
)));
}
Действие onMessage, в свою очередь, может использоваться другим эпиком или использоваться в редукторе для передачи данных уведомления компоненту.
person
Nic Strong
schedule
07.09.2018