Итак, я сделал действие, которое выполняет другие действия и упаковывает их:
export class RemoteDispatch {
static readonly type = '[Connection] RemoteDispatch';
public packedAction: any;
constructor(action: any) {
const type: string = action.__proto__.constructor.type;
this.packedAction = { type: type, ...action };
}
}
Это примет действие в качестве аргумента, извлечет его строку типа и данные и сохранит его в мета-действии в сочетании с упакованным действием. Атрибут.
В состоянии вы можете добавить обработчик, который отправляет упакованное действие через некоторое соединение:
@Action(RemoteDispatch)
dispatch(context: StateContext<ConnectionModel>, action: RemoteDispatch) {
this.connection.send(action.packedAction);
}
Наконец, на приемнике вы можете просто отправить переданное действие:
connection.on('data', this.store.dispatch);
Чтобы отправить действие клиенту, можно просто сделать:
const action = new SomeAction("some payload");
this.store.dispatch(new RemoteDispatch(action));