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
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"passport": "^0.7.0",
"passport-kakao": "^1.0.1",
"prisma": "^6.1.0",
"socket.io": "^4.8.1",
"swagger-jsdoc": "^6.2.8",
"swagger-ui-express": "^5.0.1",
"ws": "^8.18.1"
Expand Down
1 change: 1 addition & 0 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import cookieParser from 'cookie-parser';
import {prisma} from './db.config.js';
import {RegisterRoutes} from './routers/tsoaRoutes.js';
import {authRouter} from './routers/auth.router.js';
import './ws-study-status-server.js';

dotenv.config();

Expand Down
33 changes: 33 additions & 0 deletions src/ws-study-status-server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import express, {Express} from 'express';
import {createServer} from 'http';
import {Server as SocketIOServer, Socket} from 'socket.io';

const app: Express = express();
const httpServer = createServer(app);
const io = new SocketIOServer(httpServer, {
cors: {origin: '*'},
});

// REST API 예시 라우트
app.get('/api/hello', (req, res) => {
res.json({message: 'Hello from REST API!'});
});

let timer = 0;
const status = '게임중';

// 1초마다 타이머 값 증가 및 브로드캐스트
setInterval(() => {
timer += 1;
io.emit('timer', {status, timer});
}, 1000);

io.on('connection', (socket: Socket) => {
// 클라이언트가 새로 접속하면 현재 상태 전송
socket.emit('timer', {status, timer});
});

const PORT = 3000; // REST와 웹소켓 모두 3000번 포트에서 운영
httpServer.listen(PORT, () => {
console.log(`서버가 ${PORT} 포트에서 REST와 WebSocket을 함께 운영 중`);
});