basic Websocket client-server

This commit is contained in:
LuckyLaszlo
2022-11-16 15:40:44 +01:00
parent 2f62331559
commit a873b23d0f
9 changed files with 305 additions and 40 deletions

81
src/client/ws.ts Normal file
View File

@@ -0,0 +1,81 @@
import * as g from "./pong.js"
import {startGame} from "./pong.js";
const wsPort = 8042;
const wsUrl = "ws://" + document.location.hostname + ":" + wsPort + "/pong";
const socket = new WebSocket(wsUrl, "json");
enum EventTypes {
gameUpdate = 1,
start,
pause,
resume
}
interface EventData {
type: EventTypes;
}
class EventGameUpdate implements EventData {
type: EventTypes = EventTypes.gameUpdate;
player1 = {y: 0};
player2 = {y: 0};
ball = {x: 0, y: 0, speed: 0};
}
socket.addEventListener("message", logListener);
socket.addEventListener("message", matchmakingListener);
function logListener(event: MessageEvent) {
console.log("data: " + event.data + " | [" + Date.now() + "]");
}
function matchmakingListener(event: MessageEvent)
{
console.log("matchmakingListener");
const data: EventData = JSON.parse(event.data);
if (data.type == EventTypes.start)
{
console.log("Event type = start");
socket.removeEventListener("message", matchmakingListener);
socket.addEventListener("message", inGameListener);
startGame();
}
}
function inGameListener(event: MessageEvent)
{
console.log("inGameListener");
const data: EventData = JSON.parse(event.data);
switch (data.type) {
case EventTypes.gameUpdate:
console.log("Event type = gameUpdate");
serverGameUpdate(data as EventGameUpdate);
break;
case EventTypes.pause:
console.log("Event type = pause");
break;
case EventTypes.resume:
console.log("Event type = resume");
break;
}
}
function serverGameUpdate(data: EventGameUpdate)
{
g.player1.clear();
g.player1.pos.y = Math.floor(data.player1.y);
g.player1.update();
g.player2.clear();
g.player2.pos.y = Math.floor(data.player2.y);
g.player2.update();
}
// socket.addEventListener("open", (event) => {
// console.log("socket state %i", socket.readyState);
// });
export {socket}