Add backend
This commit is contained in:
parent
4ad60813c9
commit
0f0a1eaf67
19 changed files with 355 additions and 45 deletions
29
backend/src/index.html
Normal file
29
backend/src/index.html
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<script
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.1/socket.io.js"
|
||||
integrity="sha512-AcZyhRP/tbAEsXCCGlziPun5iFvcSUpEz2jKkx0blkYKbxU81F+iq8FURwPn1sYFeksJ+sDDrI5XujsqSobWdQ=="
|
||||
crossorigin="anonymous"
|
||||
></script>
|
||||
<title>Server info</title>
|
||||
</head>
|
||||
<body></body>
|
||||
<script>
|
||||
const socket = io({
|
||||
transports: ['websocket'],
|
||||
});
|
||||
|
||||
socket.on('reconnect_attempt', () => {
|
||||
socket.io.opts.transports = ['polling', 'websocket'];
|
||||
});
|
||||
|
||||
socket.emit('join', 'insights');
|
||||
|
||||
socket.on('insights', (message) => {
|
||||
document.body.innerText += message;
|
||||
});
|
||||
</script>
|
||||
</html>
|
||||
61
backend/src/main.ts
Normal file
61
backend/src/main.ts
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
import ioserver, { Socket } from 'socket.io';
|
||||
import express from 'express';
|
||||
import { Server } from 'http';
|
||||
import cors from 'cors';
|
||||
|
||||
import { PlayerContainer } from './players/player-container';
|
||||
import './index.html';
|
||||
import { TransportEvents } from '../../shared/src/transport/transport-events';
|
||||
import { Player } from './players/player';
|
||||
|
||||
const app = express();
|
||||
|
||||
app.use(
|
||||
cors({
|
||||
origin: (origin, callback) => {
|
||||
callback(null, true);
|
||||
},
|
||||
credentials: true,
|
||||
})
|
||||
);
|
||||
|
||||
const port = 3000;
|
||||
const server = new Server(app);
|
||||
const io = ioserver(server);
|
||||
|
||||
const players = new PlayerContainer();
|
||||
|
||||
const log = (text: string) => {
|
||||
io.to('insights').emit('insights', text + '\n');
|
||||
};
|
||||
|
||||
app.get('/', function (req, res) {
|
||||
res.sendFile('dist/index.html', { root: '.' });
|
||||
});
|
||||
|
||||
io.on('connection', (socket: SocketIO.Socket) => {
|
||||
socket.on(TransportEvents.PlayerJoining, () => {
|
||||
log('player joined');
|
||||
|
||||
const player = new Player(socket);
|
||||
players.addPlayer(player);
|
||||
|
||||
socket.on(TransportEvents.PlayerSendingInfo, () => {});
|
||||
|
||||
socket.on('disconnect', () => {
|
||||
log('player disconnected');
|
||||
|
||||
players.removePlayerBySocketId(player.socketId);
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('join', (room_name: string) => {
|
||||
socket.join(room_name);
|
||||
});
|
||||
|
||||
//socket.on('disconnect', () => {});
|
||||
});
|
||||
|
||||
server.listen(port, () => {
|
||||
console.log(`server started at http://localhost:${port}`);
|
||||
});
|
||||
13
backend/src/players/player-container.ts
Normal file
13
backend/src/players/player-container.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import { Player } from './player';
|
||||
|
||||
export class PlayerContainer {
|
||||
private socketIdToPlayer = new Map<string, Player>();
|
||||
|
||||
public addPlayer(player: Player) {
|
||||
this.socketIdToPlayer.set(player.socketId, player);
|
||||
}
|
||||
|
||||
public removePlayerBySocketId(socketId: string) {
|
||||
this.socketIdToPlayer.delete(socketId);
|
||||
}
|
||||
}
|
||||
9
backend/src/players/player.ts
Normal file
9
backend/src/players/player.ts
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
import { Socket } from 'dgram';
|
||||
|
||||
export class Player {
|
||||
constructor(private readonly socket: SocketIO.Socket) {}
|
||||
|
||||
public get socketId(): string {
|
||||
return this.socket.id;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue