Active users throttle
This commit is contained in:
parent
53b7e5c5cb
commit
069bad4a99
|
@ -75,7 +75,7 @@ export const SERVER = createRequestTypes('SERVER', [
|
||||||
]);
|
]);
|
||||||
export const METEOR = createRequestTypes('METEOR_CONNECT', [...defaultTypes, 'DISCONNECT']);
|
export const METEOR = createRequestTypes('METEOR_CONNECT', [...defaultTypes, 'DISCONNECT']);
|
||||||
export const LOGOUT = 'LOGOUT'; // logout is always success
|
export const LOGOUT = 'LOGOUT'; // logout is always success
|
||||||
export const ACTIVE_USERS = createRequestTypes('ACTIVE_USERS', ['SET']);
|
export const ACTIVE_USERS = createRequestTypes('ACTIVE_USERS', ['SET', 'REQUEST']);
|
||||||
|
|
||||||
export const INCREMENT = 'INCREMENT';
|
export const INCREMENT = 'INCREMENT';
|
||||||
export const DECREMENT = 'DECREMENT';
|
export const DECREMENT = 'DECREMENT';
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
import * as types from './actionsTypes';
|
import * as types from './actionsTypes';
|
||||||
|
|
||||||
|
export function requestActiveUser(user) {
|
||||||
export function setActiveUser(user) {
|
|
||||||
return {
|
return {
|
||||||
type: types.ACTIVE_USERS.SET,
|
type: types.ACTIVE_USERS.REQUEST,
|
||||||
user
|
user
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function setActiveUser(data) {
|
||||||
|
return {
|
||||||
|
type: types.ACTIVE_USERS.SET,
|
||||||
|
data
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ import * as actions from '../actions';
|
||||||
import { someoneTyping } from '../actions/room';
|
import { someoneTyping } from '../actions/room';
|
||||||
import { setUser } from '../actions/login';
|
import { setUser } from '../actions/login';
|
||||||
import { disconnect, connectSuccess } from '../actions/connect';
|
import { disconnect, connectSuccess } from '../actions/connect';
|
||||||
import { setActiveUser } from '../actions/activeUsers';
|
import { requestActiveUser } from '../actions/activeUsers';
|
||||||
|
|
||||||
export { Accounts } from 'react-native-meteor';
|
export { Accounts } from 'react-native-meteor';
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ const RocketChat = {
|
||||||
|
|
||||||
const activeUser = {};
|
const activeUser = {};
|
||||||
activeUser[ddpMessage.id] = status;
|
activeUser[ddpMessage.id] = status;
|
||||||
return reduxStore.dispatch(setActiveUser(activeUser));
|
return reduxStore.dispatch(requestActiveUser(activeUser));
|
||||||
},
|
},
|
||||||
connect(_url) {
|
connect(_url) {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
import { put, take, race, fork } from 'redux-saga/effects';
|
||||||
|
import { delay } from 'redux-saga';
|
||||||
|
import * as types from '../actions/actionsTypes';
|
||||||
|
|
||||||
|
import { setActiveUser } from '../actions/activeUsers';
|
||||||
|
|
||||||
|
const watchActiveUsers = function* handleInput() {
|
||||||
|
let obj = {};
|
||||||
|
while (true) {
|
||||||
|
const { status, timeout } = yield race({
|
||||||
|
status: take(types.ACTIVE_USERS.REQUEST),
|
||||||
|
timeout: delay(3000)
|
||||||
|
});
|
||||||
|
if (timeout) {
|
||||||
|
yield put(setActiveUser(obj));
|
||||||
|
obj = {};
|
||||||
|
}
|
||||||
|
if (status) {
|
||||||
|
obj = {
|
||||||
|
...obj,
|
||||||
|
...status.user
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const root = function* root() {
|
||||||
|
yield fork(watchActiveUsers);
|
||||||
|
};
|
||||||
|
export default root;
|
|
@ -8,6 +8,7 @@ import selectServer from './selectServer';
|
||||||
import createChannel from './createChannel';
|
import createChannel from './createChannel';
|
||||||
import init from './init';
|
import init from './init';
|
||||||
import state from './state';
|
import state from './state';
|
||||||
|
import activeUsers from './activeUsers';
|
||||||
|
|
||||||
const root = function* root() {
|
const root = function* root() {
|
||||||
yield all([
|
yield all([
|
||||||
|
@ -19,7 +20,8 @@ const root = function* root() {
|
||||||
connect(),
|
connect(),
|
||||||
messages(),
|
messages(),
|
||||||
selectServer(),
|
selectServer(),
|
||||||
state()
|
state(),
|
||||||
|
activeUsers()
|
||||||
]);
|
]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue