/
nikrontech
/
KatranKit
Обзор
Документация
Войти
/
nikrontech
/
KatranKit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
master
src/server.ts
59 строк
2 KB
Alreadyfi
Сделал всю логику, оно всё работает. Так же в комплекте идёт игрушка, не особо работающая н опоказывающая как работать с шаблоном игры.
28 апр 2025, 01:01
28 апр 2025, 01:01
5745adc
Код
Авторство
О чём код?
import express, { Request } from 'express'; import http from 'http'; import { Server as WSS, CloseEvent } from 'ws'; import cors from 'cors'; import { TransfitRoom, WebSocketClient } from './interfaces'; import { games } from './data'; import { createGame, triggerSignal } from './misc'; const app = express(); app.use(cors()); const server = http.createServer(app); const wss = new WSS({ server }); wss.on('connection', (ws: WebSocketClient, req: Request) => { console.log('Клиент подключился!'); const url = new URL(req.url, `http://${req.headers.host}`); const params = Object.fromEntries(url.searchParams.entries()); if (!('id' in params)) { ws.terminate(); return;} ws.id = params.id ws.game = params.game ws.send('["message", "success"]'); ws.on('message', (message: string) => { const Data = JSON.parse(message) console.log(`Получено сообщение: ${message}`); const type = Data.type Data.data.ws = ws if( !games[ws.game] || !(games[ws.game].getPlayersID().includes(ws.id))) { ws.close(400); return;} triggerSignal(ws.game, type, Data.data) }); ws.onclose = (e: CloseEvent) => { triggerSignal(ws.game, "leave", {ws: ws}) } }); app.get('/', (req, res) => { res.send('Это простой сервер с поддержкой WebSocket!'); }); app.post('/transfit', (req, res) => { const data = req.body as TransfitRoom; createGame(data) }); const port = process.env.PORT || 3000; server.listen(port, () => { console.log(`Сервер запущен на порте ${port}.`); createGame({ id: "11111", playersID: ["1111", "2222"]}) });