Skip to content

Commit 9e381af

Browse files
committed
회원간 채팅 구현 socket.io
1 parent d6e15f7 commit 9e381af

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+41437
-23
lines changed

app.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,22 @@ app.use(cookieParser());//cookie parser 사용
6060
app.use('/uploads',express.static('uploads'));
6161

6262
//session 관련 셋팅
63-
app.use(session({
63+
var connectMongo = require('connect-mongo');
64+
var MongoStore = connectMongo(session);
65+
66+
var sessionMiddleWare = session({
6467
secret: 'fastcampus',
6568
resave: false,
6669
saveUninitialized: true,
6770
cookie: {
6871
maxAge: 2000 * 60 * 60 //지속시간 2시간
69-
}
70-
}));
72+
},
73+
store: new MongoStore({//storage로 저장하면 서버 부담 줄어듬
74+
mongooseConnection: mongoose.connection,
75+
ttl: 14 * 24 * 60 * 60
76+
})
77+
});
78+
app.use(sessionMiddleWare);
7179

7280
//passport 적용
7381
app.use(passport.initialize());
@@ -101,5 +109,9 @@ var server = app.listen(port, function () { //서버에 띄어주는
101109

102110
var listen = require('socket.io');
103111
var io = listen(server);//server 붙여버리기
112+
//socket io passport 접근하기 위한 미들웨어 적용
113+
io.use(function(socket,next){//io.use
114+
sessionMiddleWare(socket.request,socket.request.res,next);
115+
});
104116

105117
require('./libs/socketConnection')(io);//불러오고 바로 실행

libs/removeByValue.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module.exports =function(){
2+
Array.prototype.removeByValue = function(search){
3+
var index = this.indexOf(search);
4+
if(index !== -1){
5+
this.splice(index,1);
6+
}
7+
};
8+
};

libs/socketConnection.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,25 @@
1+
require('./removeByValue')();
2+
13
module.exports = function (io) {
4+
var userList = [];//사용자 리스트를 저장할 곳
25
io.on('connection', function (socket) {
6+
7+
//아래 두줄로 passport의 req.user의 데이터에 접근한다.
8+
var session = socket.request.session.passport;
9+
var user = (typeof session !== 'undefined') ? (session.user) : "";
10+
11+
// userList 필드에 사용자 명이 존재 하지 않으면 삽입
12+
if (userList.indexOf(user.displayname) === -1) {//index가 -1인 경우는 존재하지 않는 경우
13+
userList.push(user.displayname);
14+
}
15+
io.emit('join', userList);//존재하면 io.emit에 뿌려줘
16+
//사용자 명과 메시지를 같이 반환한다.
317
socket.on('client message', function (data) {//받을 준비
4-
io.emit('server message', data.message);//보낼 준비
18+
io.emit('server message', { message: data.message, displayname: user.displayname });//보낼 준비
19+
});
20+
socket.on('disconnect',function(){
21+
userList.removeByValue(user.displayname);
22+
io.emit('leave',userList);
523
});
624
});
725
};

node_modules/connect-mongo/.nyc_output/e8bbf277a4263b71d11bbef96115cb2f.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/connect-mongo/.nyc_output/f61fa152834ee58915cb17fdb44e68b8.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/connect-mongo/.travis.yml

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/connect-mongo/CHANGELOG.md

Lines changed: 199 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/connect-mongo/LICENSE

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)