Skip to content

Commit 17891f2

Browse files
author
dodortus
committed
* add lobby
1 parent ad8dc41 commit 17891f2

File tree

4 files changed

+70
-33
lines changed

4 files changed

+70
-33
lines changed

contents/css/style.css

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,33 @@ button[disabled]:hover { background-color: #d84a38 }
2828
.btn.small { padding: 0.2em 0.4em; font-size: 0.6em; margin-bottom: 0.2em; }
2929
.btn.small.black { background-color: #000; }
3030

31-
31+
header { position: relative; margin-bottom: 10px; }
3232
h1 {
3333
border-bottom: 1px solid #ccc; height: 50px; line-height: 50px;
3434
font-weight: bold; margin: 0; padding: 0 0 0.2em 0;
3535
}
3636
h1 a { font-weight: 300; margin: 0 10px 0 0; white-space: nowrap; }
3737

3838
#wrap {
39-
position: relative; width: 340px; margin: 30px auto; font-size: 1.2em;
39+
position: relative; width: 340px; min-height: 490px;
40+
margin: 30px auto; font-size: 1.2em;
4041
}
4142
input[type="text"] { padding: 2px 5px; border: solid 1px #bbb; font-size: 1.3em; width: 120px; }
42-
#your-name { width: 250px; }
43+
#create-room { margin-top: 100px; width: 290px; }
44+
#room-name { width: 200px; }
4345
#wrap button { vertical-align: top; min-width: 72px; }
4446

45-
header { position: relative; margin-bottom: 10px; }
46-
#lobby { display: none; }
47+
#lobby { text-align: center; }
48+
49+
.is-lobby #lobby { display: block; }
50+
.is-lobby #room { display: none; }
51+
.is-room #room { display: block; }
52+
.is-room #lobby { display: none; }
4753

4854
/* chat */
4955
#chat-wrap { position: relative; margin: 0 auto; }
5056
#chat-wrap input[type="text"] {
51-
padding: 10px; width: 238px;
57+
padding: 10px; width: 238px; line-height: 1;
5258
font-size: 14px; background: rgba(255,255,255,0.8);
5359
}
5460
#chat-content {

contents/js/base.js

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
$(function() {
88
var socket = io();
99
var nickName = /* prompt('닉네임을 입력해 주세요') || */ 'Guest-' + new Date().getTime();
10+
var roomId = '';
11+
var $body = $('body');
12+
var $roomName = $('#room-name');
1013
var $msgInput = $('#message');
1114
var $typing = $('#typing-icon');
1215

@@ -35,18 +38,39 @@ $(function() {
3538
].join('\n'));
3639
}
3740

38-
// 참여 이벤트
39-
socket.emit('join', nickName);
40-
socket.on('join', function(nickName) {
41+
function getRandomNum() {
42+
return Math.floor(Math.random() * 10000) + 1; // 1~10000
43+
}
44+
45+
// 해시 체크
46+
if (location.hash.length >= 2) {
47+
$roomName.val(location.hash.split('#')[1]);
48+
}
49+
50+
// 룸생성, 참여 이벤트
51+
$('#create-room').click(function() {
52+
socket.emit('joinRoom', getRandomNum(), nickName);
53+
});
54+
55+
$('#join-room').click(function() {
56+
socket.emit('joinRoom', $roomName.val(), nickName);
57+
});
58+
59+
socket.on('joinRoom', function(roomId, nickName) {
60+
roomId = roomId;
61+
location.hash = roomId;
62+
$body.addClass('is-room');
4163
addSystemMessage("<strong>" + nickName + "</strong> 님이 참여하였습니다.");
4264
});
4365

44-
// 종료 이벤트
66+
// 로비로 이동
4567
$('#leave-room').click(function() {
46-
socket.emit('leave', nickName);
68+
socket.emit('leaveRoom', roomId, nickName);
69+
location.hash = '';
70+
location.reload();
4771
});
4872

49-
socket.on('leave', function(nickName) {
73+
socket.on('leaveRoom', function(nickName) {
5074
addSystemMessage("<strong>" + nickName + "</strong> 님이 나갔습니다.");
5175
});
5276

server.js

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var express = require('express')
66

77
app.engine('html', require('ejs').renderFile);
88
app.set('views', __dirname + '/views');
9+
app.use(express.static(__dirname + '/contents'));
910

1011
app.get('/', function(req, res) {
1112
res.render('index.html', {
@@ -16,37 +17,43 @@ app.get('/', function(req, res) {
1617
// socket
1718
io.on('connection', function(socket){
1819
console.log('a user connected');
20+
var roomId = null;
1921

20-
socket.on('message', function(msg) {
21-
console.log('message: ' + msg);
22-
23-
socket.broadcast.emit('message', msg);
24-
//io.emit('message', msg);
25-
});
26-
27-
socket.on('disconnect', function() {
28-
console.log('a user disconnected');
22+
// 룸접속
23+
socket.on('joinRoom', function(room, nickName) {
24+
roomId = room;
25+
socket.join(roomId);
26+
io.sockets.in(roomId).emit('joinRoom', roomId, nickName);
27+
console.log('ROOM LIST', io.sockets.adapter.rooms);
2928
});
3029

31-
// 참여
32-
socket.on('join', function(nickName) {
33-
socket.broadcast.emit('join', nickName);
30+
// 룸퇴장
31+
socket.on('leaveRoom', function(room, nickName) {
32+
socket.leave(roomId);
33+
socket.broadcast.to(roomId).emit('leaveRoom', nickName);
3434
});
3535

36-
// 나가기
37-
socket.on('leave', function(nickName) {
38-
socket.broadcast.emit('leave', nickName);
36+
// 메시징
37+
socket.on('message', function(msg) {
38+
//console.log('message: ' + msg);
39+
40+
socket.broadcast.to(roomId).emit('message', msg); // 자신 제외 룸안의 유저
41+
//socket.broadcast.emit('message', msg); // 자신 제외 메시지 전송
42+
//io.emit('message', msg); // 자신 포함 전체 룸 메시지 전송
43+
//io.sockets.in(roomId).emit('message', msg); // 자신 포함 룸안의 유저
3944
});
4045

4146
// 타이핑
4247
socket.on('typing', function(nickName) {
43-
socket.broadcast.emit('typing', nickName);
48+
socket.broadcast.to(roomId).emit('typing', nickName);
49+
});
50+
51+
// 소켓 연결해제
52+
socket.on('disconnect', function() {
53+
console.log('a user disconnected');
4454
});
4555
});
4656

47-
// static 은 view 선언 다음에 사용
48-
app.use(express.static(__dirname + '/contents'));
49-
5057
// server listen start
5158
http.listen(config.webserver.port, function() {
5259
console.log('Simple Chatting server running at ' + config.webserver.host + ':' + config.webserver.port);

views/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@
99
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
1010
<link href="/css/style.css" type="text/css" rel="stylesheet" media="screen" />
1111
</head>
12-
<body>
12+
<body class="is-lobby">
1313
<header>
1414
<h1>Simple Chatting</h1>
1515
</header>
1616

1717
<div id="wrap">
1818
<section id="lobby">
1919
<button id="create-room" type="button">Create</button><br>
20-
<input type="text" id="your-name" placeholder="Your name" />
20+
<input type="text" id="room-name" placeholder="Room Number" />
2121
<button id="join-room" type="button">Join</button>
2222
</section>
2323

0 commit comments

Comments
 (0)