Add backend

This commit is contained in:
schmelczerandras 2020-10-04 19:05:32 +02:00
parent 4ad60813c9
commit 0f0a1eaf67
19 changed files with 355 additions and 45 deletions

29
backend/src/index.html Normal file
View 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
View 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}`);
});

View 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);
}
}

View 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;
}
}