Redux-Saga Socket

Здраствуйте. Я подключаю сокеты через Redax-saga,При открытии сокета я могу подписыватся на каналы которые мне нужны, но когда мне нужно подписатся на что то другое я закрываю и заново открываю сокет. Могу ли я как-то в этот сокет отправлять данные для подписки?

const ws = () => `ws://localhost:8980/?_admin1`;

export const openTradeSocket = createRoutine('TRADE_SOCKET_OPEN');
export const closeTradeSocket = createRoutine('TRADE_SOCKET_CLOSE');

function tradeSocket(payload) {
    return eventChannel(emit => {
        const socket = new WebSocket(ws(payload.userId || ''), ['wamp']);
        socket.onopen = () => {
            if (payload.chat) {socket.send(JSON.stringify([5, `chat:en`]));}
            else {socket.send(JSON.stringify([5, `trades:${payload.contract}`]));}
        };
        socket.onerror = error => socket.close();
        socket.onclose = () => {};
        socket.onmessage = ({ data }) => {
            try {
                emit(JSON.parse(data));
            } catch (e) {
            }
        };

        return () => {
            socket.close();
        };
    });
}

function* tradeWatcher(channel) {
    while (true) {
        const data = yield take(channel);
        if (data[2].data) {
            switch (data[1].split(':')[0]) {
                case 'contracts':
                    yield put(updatePricelist(data[2].data));
                    break;
            }
        }
    }
}

export function* handleTradeChannel() {
    while (true) {
        const { payload } = yield take(openTradeSocket.TRIGGER);
        const socketChannel = yield call(tradeSocket, payload);
        const { cancel } = yield race({
            task: call(tradeWatcher, socketChannel),
            cancel: take(closeTradeSocket.TRIGGER),
        });
        if (cancel) {
            socketChannel.close();
        }
    }
}


Ответы (0 шт):