serverside multiplayer
parent
5417eb125b
commit
280ba9a137
|
|
@ -6,6 +6,9 @@
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/blessed": "^0.1.17",
|
"@types/blessed": "^0.1.17",
|
||||||
|
"@types/bonjour": "^3.5.8",
|
||||||
|
"@types/uuid": "^8.3.0",
|
||||||
|
"bonjour": "^3.5.0",
|
||||||
"chalk": "^4.1.1",
|
"chalk": "^4.1.1",
|
||||||
"faker": "^5.5.3",
|
"faker": "^5.5.3",
|
||||||
"frigid": "^1.3.6",
|
"frigid": "^1.3.6",
|
||||||
|
|
@ -14,6 +17,7 @@
|
||||||
"printable-characters": "^1.0.42",
|
"printable-characters": "^1.0.42",
|
||||||
"sisteransi": "^1.0.5",
|
"sisteransi": "^1.0.5",
|
||||||
"typescript": "^4.3.2",
|
"typescript": "^4.3.2",
|
||||||
|
"uuid": "^8.3.2",
|
||||||
"yarn": "^1.22.10"
|
"yarn": "^1.22.10"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,6 @@ export class Game extends Frigid implements Tickable, Renderable {
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
log.info('=== [ render ] ===');
|
|
||||||
this.menu.render();
|
this.menu.render();
|
||||||
this.board.render();
|
this.board.render();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import { ChopTreeTask } from './ChopTreeTask.js';
|
||||||
import { progressbar } from './Progressbar.js';
|
import { progressbar } from './Progressbar.js';
|
||||||
import { inspect } from 'util';
|
import { inspect } from 'util';
|
||||||
import { Popup } from './Popup.js';
|
import { Popup } from './Popup.js';
|
||||||
|
import mdns from './mDNS.js';
|
||||||
|
|
||||||
enum SubMenu {
|
enum SubMenu {
|
||||||
NONE = 'NONE',
|
NONE = 'NONE',
|
||||||
|
|
@ -17,7 +18,7 @@ enum SubMenu {
|
||||||
enum View {
|
enum View {
|
||||||
PAWNS = 'Pawns',
|
PAWNS = 'Pawns',
|
||||||
INVENTORY = 'Inventory',
|
INVENTORY = 'Inventory',
|
||||||
BUILDINGS = 'Buildings',
|
MULTIPLAYER = 'Multiplayer',
|
||||||
};
|
};
|
||||||
|
|
||||||
export class Menu implements Renderable {
|
export class Menu implements Renderable {
|
||||||
|
|
@ -142,10 +143,16 @@ export class Menu implements Renderable {
|
||||||
switch(this.view) {
|
switch(this.view) {
|
||||||
case View.PAWNS: return this.renderPawns();
|
case View.PAWNS: return this.renderPawns();
|
||||||
case View.INVENTORY: return this.renderInv();
|
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() {
|
renderInv() {
|
||||||
return Game.current.inv.render();
|
return Game.current.inv.render();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
import { Game } from './Game.js';
|
import { Game } from './Game.js';
|
||||||
import { render } from './UI.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);
|
render(game);
|
||||||
|
|
|
||||||
|
|
@ -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
154
yarn.lock
|
|
@ -8,16 +8,52 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@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@*":
|
"@types/node@*":
|
||||||
version "15.12.2"
|
version "15.12.2"
|
||||||
resolved "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz"
|
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:
|
ansi-styles@^4.1.0:
|
||||||
version "4.3.0"
|
version "4.3.0"
|
||||||
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
|
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
|
||||||
dependencies:
|
dependencies:
|
||||||
color-convert "^2.0.1"
|
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:
|
chalk@^4.1.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz"
|
resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz"
|
||||||
|
|
@ -35,6 +71,40 @@ color-name@~1.1.4:
|
||||||
version "1.1.4"
|
version "1.1.4"
|
||||||
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
|
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:
|
faker@^5.5.3:
|
||||||
version "5.5.3"
|
version "5.5.3"
|
||||||
resolved "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz"
|
resolved "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz"
|
||||||
|
|
@ -43,22 +113,98 @@ frigid@^1.3.6:
|
||||||
version "1.3.6"
|
version "1.3.6"
|
||||||
resolved "https://registry.yarnpkg.com/frigid/-/frigid-1.3.6.tgz#45cc8a9ae855263c1a7255c5ccc500ba17097634"
|
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:
|
has-flag@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
|
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:
|
logger@^0.0.1:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/logger/-/logger-0.0.1.tgz#cb08171f8a6f6f674b8499dadf50bed4befb72c4"
|
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:
|
neo-blessed@^0.2.0:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/neo-blessed/-/neo-blessed-0.2.0.tgz#30f9495fdd104494402b62c6273a9c9b82de4f2b"
|
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:
|
printable-characters@^1.0.42:
|
||||||
version "1.0.42"
|
version "1.0.42"
|
||||||
resolved "https://registry.yarnpkg.com/printable-characters/-/printable-characters-1.0.42.tgz#3f18e977a9bd8eb37fcc4ff5659d7be90868b3d8"
|
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:
|
sisteransi@^1.0.5:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz"
|
resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz"
|
||||||
|
|
@ -69,10 +215,18 @@ supports-color@^7.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
has-flag "^4.0.0"
|
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:
|
typescript@^4.3.2:
|
||||||
version "4.3.2"
|
version "4.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805"
|
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:
|
yarn@^1.22.10:
|
||||||
version "1.22.10"
|
version "1.22.10"
|
||||||
resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c"
|
resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue