Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
package-lock.json
14 changes: 14 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const express = require('express');
const path = require('path');
const fs = require('fs');

const app = express();
app.set('port', process.env.PORT || 8888);
const webSocket = require('./socket.js');

// express 서버 litern
const server = app.listen(app.get('port'), () => {
console.log(app.get('port'), '번 포트에서 대기중');
})

webSocket(server);
21 changes: 21 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "project1",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node app.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"cookie-parser": "^1.4.5",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"express-session": "^1.17.2",
"morgan": "^1.10.0",
"nunjucks": "^3.2.3",
"socket.io": "^4.1.3"
}
}
13 changes: 13 additions & 0 deletions room/CreateID.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
data = require('./rooms');

function Create(data) {
const id = 1
for (var i in data) {
if (id === i) {
id++;
}
}
data.push(id);
}

module.exports = Create;
30 changes: 30 additions & 0 deletions room/Createroom.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const CreateID = require('./CreateID.js');

module.exports = class Room{
constructor(data){
this.Id = CreateID();
this.roomname = data.roomname;
this.password = data.password;
this.host = data.user;
if (this.password) {
this.isOpen = true;
} else {
this.isOpen = false;
}
this.max_users = data.max_users;
this.members = []
}

JoinRoom (data) {
// data 는 user 이름
this.members.append(data);
}

LeaveRoom (data) {
this.members.remove(data);
}

CountUsers() {
return this.members.length
}
}
Empty file added room/Users.js
Empty file.
1 change: 1 addition & 0 deletions room/rooms.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports.rooms = [];
93 changes: 93 additions & 0 deletions socket.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
const SocketIO = require('socket.io');
const Room = require('./room/Createroom');
const rooms = require('./room/rooms.js');

module.exports = (server) => {
const io = SocketIO(server, {path: '/socket.io', transports: ['websocket']});

io.on('connection', (socket) => {
const req = socket.request;
const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
console.log( ip + '의 새로운 유저가 접속하였습니다.');

socket.on('createRoom', function(data) {
console.log("CreateRoom Event");
room = new Room(data);

socket.join('room:' + room.roomId);
room.host = data.name;
if (data.password == null) {
room.isOpen = true;
} else {
room.isOpen = false;
room.password = data.password;
}
room.max_user = data.max_user;
room.members.push(data.name);
rooms.push(room);
});

socket.on('JoinRoom', function(data) {
console.log("JoinRoom Event");
if (!rooms.room.data.roomId) {
console.log("방이 존재하지 않습니다.");
socket.emit("Fail", { command : 'not existed'});
} else {
const currentRoom = rooms.room.data.roomIds;
if (!currentRoom.isOpen && currentRoom.password !== data.password) {
console.log("비밀번호가 틀렸습니다.")
socket.emit("again");
// 다시 화면으로
} else if (currentRoom.max_user < data.max_user) {
console.log("방에 인원이 다 차있습니다.");
socket.emit("Fail");
} else {
socket.join('room:' + data.roomId);
}
}
});
socket.on('Update', function(data) {
const currentRoom = rooms.room.data.roomId;
currentRoom.name = data.roomName;
currentRoom.password = data.password;
currentRoom.host = data.name;
currentRoom.max_user = data.max_user;
});

socket.on('DeleteRoom', function(data) {
// 방소유주가 아닐 경우
if (rooms.room.data.roomId) {
// 방이 만들어지지 않은 경우
console.log('방이 만들어져있지 않습니다.')
} else {
const currentRoom = rooms.room.data.roomId;

if (currentRoom.host == data.name) {
socket.leave(currentRoom);
rooms.remove(room.roomId);
socket.broadcast.to(currentRoom).emit("Delete", { message :
'방이 삭제되었습니다.' }); // 본인제외 방없어진 메시지 보내기
} else {
console.log("권한이 없습니다.");
socket.emit("Fail_delete",); // event 수정
}
}
});

socket.on('LeaveRoom', function(data) {
const currentRoom = rooms.room.data.roomId;
if (currentRoom.host == data.name) {
const randomNum = Math.random() * currentRoom.length();
currentRoom.host = currentRoom.members[Math.floor(randomNum)];
currentRoom.members.remove(data.name);
socket.leave(currentRoom);
} else if (currentRoom.host == data.name && currentRoom.members.length == 1){
socket.leave(currentRoom);
rooms.remove(room.roomId);
} else {
currentRoom.members.remove(data.name);
socket.leave(currentRoom);
}
});
});
};
Empty file added users.js
Empty file.