serverside multiplayer

master
Valerie 2021-06-15 20:05:07 -04:00
parent 5417eb125b
commit 280ba9a137
6 changed files with 205 additions and 3 deletions

View File

@ -6,6 +6,9 @@
"type": "module",
"dependencies": {
"@types/blessed": "^0.1.17",
"@types/bonjour": "^3.5.8",
"@types/uuid": "^8.3.0",
"bonjour": "^3.5.0",
"chalk": "^4.1.1",
"faker": "^5.5.3",
"frigid": "^1.3.6",
@ -14,6 +17,7 @@
"printable-characters": "^1.0.42",
"sisteransi": "^1.0.5",
"typescript": "^4.3.2",
"uuid": "^8.3.2",
"yarn": "^1.22.10"
},
"scripts": {

View File

@ -70,7 +70,6 @@ export class Game extends Frigid implements Tickable, Renderable {
}
render() {
log.info('=== [ render ] ===');
this.menu.render();
this.board.render();
}

View File

@ -8,6 +8,7 @@ import { ChopTreeTask } from './ChopTreeTask.js';
import { progressbar } from './Progressbar.js';
import { inspect } from 'util';
import { Popup } from './Popup.js';
import mdns from './mDNS.js';
enum SubMenu {
NONE = 'NONE',
@ -17,7 +18,7 @@ enum SubMenu {
enum View {
PAWNS = 'Pawns',
INVENTORY = 'Inventory',
BUILDINGS = 'Buildings',
MULTIPLAYER = 'Multiplayer',
};
export class Menu implements Renderable {
@ -142,10 +143,16 @@ export class Menu implements Renderable {
switch(this.view) {
case View.PAWNS: return this.renderPawns();
case View.INVENTORY: return this.renderInv();
case View.MULTIPLAYER: return this.renderMultiplayer();
}
})()}`
}
renderMultiplayer() {
if(mdns.players.length === 0) return `{center}${tags.bright}${tags.black.fg}No friends online{/center}`;
return mdns.players.map(player => player.toString()).join('\n');
}
renderInv() {
return Game.current.inv.render();
}

View File

@ -1,5 +1,7 @@
import { Game } from './Game.js';
import { render } from './UI.js';
const game = Game.create('data/world01.json');
const saveFile = process.argv[2];
const game = Game.create(saveFile || 'data/world01.json');
render(game);

36
src/mDNS.ts 100644
View File

@ -0,0 +1,36 @@
import bonjour from 'bonjour';
import log from './log.js';
import os from 'os'
import * as uuid from 'uuid';
const mdns = bonjour();
const ID = uuid.v4();
let devices = [];
type Player = {
name: string,
address: string,
port: number
}
const network = {
get players() {
return devices;
}
}
export default network;
export function ready() {
mdns.publish({
type: 'dfi',
name: os.hostname() + '-' + ID,
port: 6969
});
}
mdns.find({
type: 'dfi'
}, (service) => {
log.info('found network device', service);
});

154
yarn.lock
View File

@ -8,16 +8,52 @@
dependencies:
"@types/node" "*"
"@types/bonjour@^3.5.8":
version "3.5.8"
resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.8.tgz#f1dd61fa2c0c660f47624cb899f830229246bf59"
dependencies:
"@types/node" "*"
"@types/node@*":
version "15.12.2"
resolved "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz"
"@types/uuid@^8.3.0":
version "8.3.0"
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f"
ansi-styles@^4.1.0:
version "4.3.0"
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
dependencies:
color-convert "^2.0.1"
array-flatten@^2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
bonjour@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
dependencies:
array-flatten "^2.1.0"
deep-equal "^1.0.1"
dns-equal "^1.0.0"
dns-txt "^2.0.2"
multicast-dns "^6.0.1"
multicast-dns-service-types "^1.1.0"
buffer-indexof@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
dependencies:
function-bind "^1.1.1"
get-intrinsic "^1.0.2"
chalk@^4.1.1:
version "4.1.1"
resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz"
@ -35,6 +71,40 @@ color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
deep-equal@^1.0.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
dependencies:
is-arguments "^1.0.4"
is-date-object "^1.0.1"
is-regex "^1.0.4"
object-is "^1.0.1"
object-keys "^1.1.1"
regexp.prototype.flags "^1.2.0"
define-properties@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
dependencies:
object-keys "^1.0.12"
dns-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
dns-packet@^1.3.1:
version "1.3.4"
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
dependencies:
ip "^1.1.0"
safe-buffer "^5.0.1"
dns-txt@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
dependencies:
buffer-indexof "^1.0.0"
faker@^5.5.3:
version "5.5.3"
resolved "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz"
@ -43,22 +113,98 @@ frigid@^1.3.6:
version "1.3.6"
resolved "https://registry.yarnpkg.com/frigid/-/frigid-1.3.6.tgz#45cc8a9ae855263c1a7255c5ccc500ba17097634"
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
get-intrinsic@^1.0.2:
version "1.1.1"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
dependencies:
function-bind "^1.1.1"
has "^1.0.3"
has-symbols "^1.0.1"
has-flag@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
has-symbols@^1.0.1, has-symbols@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
has@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
dependencies:
function-bind "^1.1.1"
ip@^1.1.0:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
is-arguments@^1.0.4:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9"
dependencies:
call-bind "^1.0.0"
is-date-object@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5"
is-regex@^1.0.4:
version "1.1.3"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
dependencies:
call-bind "^1.0.2"
has-symbols "^1.0.2"
logger@^0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/logger/-/logger-0.0.1.tgz#cb08171f8a6f6f674b8499dadf50bed4befb72c4"
multicast-dns-service-types@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
multicast-dns@^6.0.1:
version "6.2.3"
resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
dependencies:
dns-packet "^1.3.1"
thunky "^1.0.2"
neo-blessed@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/neo-blessed/-/neo-blessed-0.2.0.tgz#30f9495fdd104494402b62c6273a9c9b82de4f2b"
object-is@^1.0.1:
version "1.1.5"
resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.3"
object-keys@^1.0.12, object-keys@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
printable-characters@^1.0.42:
version "1.0.42"
resolved "https://registry.yarnpkg.com/printable-characters/-/printable-characters-1.0.42.tgz#3f18e977a9bd8eb37fcc4ff5659d7be90868b3d8"
regexp.prototype.flags@^1.2.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.3"
safe-buffer@^5.0.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz"
@ -69,10 +215,18 @@ supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
thunky@^1.0.2:
version "1.1.0"
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
typescript@^4.3.2:
version "4.3.2"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805"
uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
yarn@^1.22.10:
version "1.22.10"
resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c"