Browse Source

Migrate RoomActions away from SOCKET_SEND_MESSAGE action.

pull/1/head
Titouan Rigoudy 9 years ago
parent
commit
2b5ae5e368
4 changed files with 52 additions and 46 deletions
  1. +19
    -31
      src/actions/RoomActions.js
  2. +5
    -3
      src/components/RoomList.js
  3. +5
    -4
      src/constants/ActionTypes.js
  4. +23
    -8
      src/reducers/socket.js

+ 19
- 31
src/actions/RoomActions.js View File

@ -1,48 +1,36 @@
import {
ROOM_GET_LIST,
ROOM_JOIN,
ROOM_LEAVE,
ROOM_MESSAGE,
ROOM_SELECT
} from "../constants/ActionTypes";
import SocketActions from "./SocketActions";
import ControlRequest from "../utils/ControlRequest";
export default ({
getRoomList: () => SocketActions.send(ControlRequest.roomList()),
getList: () => ({
type: ROOM_GET_LIST
}),
join: (room_name) => (dispatch) => {
dispatch({
type: ROOM_JOIN,
payload: room_name
});
dispatch(SocketActions.send(ControlRequest.roomJoin(room_name)));
},
join: (room_name) => ({
type: ROOM_JOIN,
payload: room_name
}),
leave: (room_name) => (dispatch) => {
dispatch({
type: ROOM_LEAVE,
payload: room_name
});
dispatch(SocketActions.send(ControlRequest.roomLeave(room_name)));
},
leave: (room_name) => ({
type: ROOM_LEAVE,
payload: room_name
}),
select: (room_name) => ({
type: ROOM_SELECT,
payload: room_name
}),
sendMessage: (room_name, message) => (dispatch) => {
dispatch({
type: ROOM_MESSAGE,
payload: {
room_name,
message
}
});
dispatch(SocketActions.send(
ControlRequest.roomMessage(room_name, message)
));
}
sendMessage: (room_name, message) => ({
type: ROOM_MESSAGE,
payload: {
room_name,
message
}
})
});

+ 5
- 3
src/components/RoomList.js View File

@ -9,7 +9,7 @@ class RoomList extends React.Component {
}
componentDidMount() {
this.props.roomActions.getRoomList();
this.props.roomActions.getList();
}
render() {
@ -36,7 +36,7 @@ class RoomList extends React.Component {
return (
<div id="room-list">
<RoomListHeader refresh={this.props.roomActions.getRoomList}/>
<RoomListHeader refresh={this.props.roomActions.getList}/>
<ul> {children} </ul>
</div>
);
@ -45,7 +45,9 @@ class RoomList extends React.Component {
RoomList.propTypes = {
rooms: PropTypes.object.isRequired,
roomActions: PropTypes.object.isRequired,
roomActions: PropTypes.shape({
getList: PropTypes.func.isRequired
}).isRequired,
selected: PropTypes.string
};


+ 5
- 4
src/constants/ActionTypes.js View File

@ -11,7 +11,8 @@ export const SOCKET_SEND_MESSAGE = "SOCKET_SEND_MESSAGE";
export const LOGIN_GET_STATUS = "LOGIN_GET_STATUS";
// Room actions
export const ROOM_SELECT = "ROOM_SELECT";
export const ROOM_JOIN = "ROOM_JOIN";
export const ROOM_LEAVE = "ROOM_LEAVE";
export const ROOM_MESSAGE = "ROOM_MESSAGE";
export const ROOM_GET_LIST = "ROOM_GET_LIST";
export const ROOM_SELECT = "ROOM_SELECT";
export const ROOM_JOIN = "ROOM_JOIN";
export const ROOM_LEAVE = "ROOM_LEAVE";
export const ROOM_MESSAGE = "ROOM_MESSAGE";

+ 23
- 8
src/reducers/socket.js View File

@ -9,22 +9,22 @@ const initialState = {
state: STATE_CLOSED
};
export default (state = initialState, action) => {
export default (state = initialState, { type, payload }) => {
const sendRequest = (controlRequest) => {
try {
state.socket.send(JSON.stringify(controlRequest));
} catch (err) {
console.log(`Socket error: failed to send ${action.payload}`);
console.log(`Socket error: failed to send ${controlRequest}`);
}
};
switch (action.type) {
switch (type) {
case types.SOCKET_SET_OPENING:
{
if (state.state !== STATE_CLOSED) {
console.log("Cannot open socket, already open");
}
const { url, onopen, onclose, onerror, onmessage } = action.payload;
const { url, onopen, onclose, onerror, onmessage } = payload;
const socket = new WebSocket(url);
socket.onopen = onopen;
socket.onclose = onclose;
@ -53,14 +53,29 @@ export default (state = initialState, action) => {
console.log("Socket error");
return { ...state, state: state.socket.readyState };
case types.SOCKET_SEND_MESSAGE:
sendRequest(action.payload);
return state;
case types.LOGIN_GET_STATUS:
sendRequest(ControlRequest.loginStatus());
return state;
case types.ROOM_GET_LIST:
sendRequest(ControlRequest.roomList());
return state;
case types.ROOM_JOIN:
sendRequest(ControlRequest.roomJoin(payload));
return state;
case types.ROOM_LEAVE:
sendRequest(ControlRequest.roomLeave(payload));
return state;
case types.ROOM_MESSAGE:
{
const { room_name, message } = payload;
sendRequest(ControlRequest.roomMessage(room_name, message));
return state;
}
default:
return state;
}


Loading…
Cancel
Save