Skip to content

Commit 318cfad

Browse files
authored
Merge pull request #53 from boostcamp-2020/feat/chatting-integrate
채팅창 백/프론트 합치기
2 parents 7f40371 + 14f4e95 commit 318cfad

File tree

4 files changed

+55
-18
lines changed

4 files changed

+55
-18
lines changed

src/backend/routes/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@ import Games from '@game/Games';
33

44
const router = express.Router();
55

6-
router.get('/rooms/:roomID', (req, res) => {
6+
const getRoomsRouter = (req, res) => {
77
const { roomID } = req.params;
88
if (Games.isEnterableRoom(roomID)) {
99
return res.status(200).json({});
1010
}
1111

1212
return res.status(403).json({});
13-
});
13+
};
14+
15+
router.get('/rooms', getRoomsRouter);
16+
router.get('/rooms/:roomID', getRoomsRouter);
1417

1518
router.post('/rooms', (req, res) => {
1619
const roomID = Games.createGame();

src/frontend/game/game.js

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
import './game.scss';
2-
import renderWaitingRoom from '@scenes/waitingRoom';
2+
import { renderWaitingRoom, setupWaitingRoomSocket } from '@scenes/waitingRoom';
33
import socket from '@utils/socket';
4+
import requestHandler from '@utils/requestHandler';
5+
6+
const scrollToBottom = (component) => {
7+
const scrollOption = {
8+
top: component.scrollHeight,
9+
};
10+
component.scrollTo(scrollOption);
11+
};
412

513
const initializeLayout = () => {
614
const chatMessageLog = document.getElementById('chat-message-log');
@@ -9,50 +17,74 @@ const initializeLayout = () => {
917
chatForm.addEventListener('submit', (e) => {
1018
e.preventDefault();
1119
const message = e.target.message.value;
20+
if (!message.length) return;
1221
e.target.message.value = '';
1322

1423
// TODO: initialize에서 분리하기
1524
const sendMessageToServer = () => {
1625
const messageWrapper = document.createElement('div');
1726
const messageBox = document.createElement('div');
27+
1828
messageWrapper.classList.add('chat-mine');
19-
messageBox.classList.add('chat-message');
2029
messageWrapper.appendChild(messageBox);
21-
chatMessageLog.appendChild(messageWrapper);
30+
31+
messageBox.classList.add('chat-message');
2232
messageBox.innerText = message;
23-
};
2433

25-
// sendMessageToServer();
34+
chatMessageLog.appendChild(messageWrapper);
35+
};
2636

27-
socket.emit('send chat', { message }, sendMessageToServer);
37+
socket.emit('send chat', { message });
38+
sendMessageToServer();
39+
scrollToBottom(chatMessageLog);
2840
});
2941

3042
// TODO: initialize에서 분리하기
3143
const getMessageFromServer = ({ nickname, message }) => {
3244
const messageWrapper = document.createElement('div');
3345
const nicknameBox = document.createElement('div');
3446
const messageBox = document.createElement('div');
47+
3548
messageWrapper.classList.add('chat-other-player');
36-
nicknameBox.classList.add('chat-nickname');
37-
messageBox.classList.add('chat-message');
3849
messageWrapper.appendChild(nicknameBox);
3950
messageWrapper.appendChild(messageBox);
40-
chatMessageLog.appendChild(messageWrapper);
51+
52+
nicknameBox.classList.add('chat-nickname');
4153
nicknameBox.innerText = nickname;
54+
55+
messageBox.classList.add('chat-message');
4256
messageBox.innerText = message;
57+
58+
chatMessageLog.appendChild(messageWrapper);
59+
scrollToBottom(chatMessageLog);
4360
};
4461

4562
socket.on('send chat', getMessageFromServer);
4663
};
4764

48-
const initialize = () => {
65+
const initialize = async () => {
4966
const urlParams = new URLSearchParams(window.location.search);
5067
const roomID = urlParams.get('room');
68+
const config = { method: 'GET', uri: `/rooms/${roomID}` };
69+
const { success } = await requestHandler(config);
70+
if (!success) {
71+
window.alert('올바르지 않은 코드입니다.');
72+
window.location.href = '/';
73+
return;
74+
}
5175
socket.emit('join player', { roomID });
5276

5377
initializeLayout();
5478

55-
renderWaitingRoom(roomID);
79+
const { NicknameInput } = renderWaitingRoom(roomID);
80+
// const { PlayerList } = renderLeftTab();
81+
setupWaitingRoomSocket();
82+
83+
socket.on('enter room', ({ nickname, color, players }) => {
84+
NicknameInput.setValue(nickname);
85+
// NicknameInput.instance.style.backgroundColor = color;
86+
// PlayerList.setListItems(players);
87+
});
5688
};
5789

5890
initialize();

src/frontend/game/game.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,5 @@ $right-size: 330px;
7979
padding: 0.3em;
8080
border-radius: 0.5em;
8181
font-size: larger;
82+
word-break: break-word;
8283
}

src/frontend/scenes/waitingRoom/index.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import TextObject from '@engine/TextObject';
55
import InputObject from '@engine/InputObject';
66
import SvgObject from '@engine/SvgObject';
77
import Svg from '@utils/svg';
8+
import socket from '@utils/socket';
89
import { copyGameCode, redirectToLobby } from './events';
910

10-
const setupGameLayout = (roomID) => {
11+
export const renderWaitingRoom = (roomID = '') => {
1112
const Header = new GameObject();
1213
Header.toggleClass('waiting-header');
1314
Header.attachToRoot();
@@ -64,10 +65,10 @@ const setupGameLayout = (roomID) => {
6465
const CopyIcon = new SvgObject();
6566
CopyIcon.setInnerHtml(Svg.copy);
6667
CopyIcon.attachToObject(GameCodeCopyButton);
67-
};
6868

69-
const waitingRoom = (roomID = '') => {
70-
setupGameLayout(roomID);
69+
return {
70+
NicknameInput,
71+
};
7172
};
7273

73-
export default waitingRoom;
74+
export const setupWaitingRoomSocket = () => {};

0 commit comments

Comments
 (0)