diff --git a/src/actions/RoomActions.js b/src/actions/RoomActions.js
index 2a6d243..9f05e6b 100644
--- a/src/actions/RoomActions.js
+++ b/src/actions/RoomActions.js
@@ -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
+ }
+ })
});
diff --git a/src/components/RoomList.js b/src/components/RoomList.js
index cccdb1e..64b0970 100644
--- a/src/components/RoomList.js
+++ b/src/components/RoomList.js
@@ -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 (
);
@@ -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
};
diff --git a/src/constants/ActionTypes.js b/src/constants/ActionTypes.js
index b19828d..58ea56e 100644
--- a/src/constants/ActionTypes.js
+++ b/src/constants/ActionTypes.js
@@ -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";
diff --git a/src/reducers/socket.js b/src/reducers/socket.js
index 9ad7148..273534c 100644
--- a/src/reducers/socket.js
+++ b/src/reducers/socket.js
@@ -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;
}