colony names in mdns
parent
655cb671f9
commit
4e76133bc6
|
|
@ -7,11 +7,13 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/blessed": "^0.1.17",
|
"@types/blessed": "^0.1.17",
|
||||||
"@types/bonjour": "^3.5.8",
|
"@types/bonjour": "^3.5.8",
|
||||||
|
"@types/faker": "^5.5.6",
|
||||||
"@types/uuid": "^8.3.0",
|
"@types/uuid": "^8.3.0",
|
||||||
"bonjour": "^3.5.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",
|
||||||
|
"get-port": "^5.1.1",
|
||||||
"logger": "^0.0.1",
|
"logger": "^0.0.1",
|
||||||
"neo-blessed": "^0.2.0",
|
"neo-blessed": "^0.2.0",
|
||||||
"printable-characters": "^1.0.42",
|
"printable-characters": "^1.0.42",
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,12 @@ import { TaskList } from './TaskList.js';
|
||||||
import { Inventory } from './Inventory.js';
|
import { Inventory } from './Inventory.js';
|
||||||
import { Menu } from './Menu.js';
|
import { Menu } from './Menu.js';
|
||||||
import Time, { Tickable } from './Time.js';
|
import Time, { Tickable } from './Time.js';
|
||||||
import { render, Renderable } from './UI.js';
|
import { render, Renderable, setTitle } from './UI.js';
|
||||||
import log from './log.js';
|
import log from './log.js';
|
||||||
import { ChopTreeTask } from './ChopTreeTask.js';
|
import { ChopTreeTask } from './ChopTreeTask.js';
|
||||||
import { Task } from './Task.js';
|
import { Task } from './Task.js';
|
||||||
import { ready } from './mDNS.js';
|
import { ready } from './mDNS.js';
|
||||||
|
import faker from 'faker';
|
||||||
|
|
||||||
let game = null;
|
let game = null;
|
||||||
|
|
||||||
|
|
@ -20,6 +21,7 @@ export class Game extends Frigid implements Tickable, Renderable {
|
||||||
board: TaskList;
|
board: TaskList;
|
||||||
menu: Menu;
|
menu: Menu;
|
||||||
clock: Time;
|
clock: Time;
|
||||||
|
name: string;
|
||||||
|
|
||||||
[DEBUG] = true;
|
[DEBUG] = true;
|
||||||
|
|
||||||
|
|
@ -55,6 +57,8 @@ export class Game extends Frigid implements Tickable, Renderable {
|
||||||
|
|
||||||
ctor () {
|
ctor () {
|
||||||
game = this;
|
game = this;
|
||||||
|
this.name ??= faker.address.city();
|
||||||
|
setTitle(this.name);
|
||||||
this.pawns ??= [];
|
this.pawns ??= [];
|
||||||
this.selected ??= this.pawns[0] || null;
|
this.selected ??= this.pawns[0] || null;
|
||||||
this.menu = new Menu();
|
this.menu = new Menu();
|
||||||
|
|
@ -63,7 +67,7 @@ export class Game extends Frigid implements Tickable, Renderable {
|
||||||
this.clock ??= new Time();
|
this.clock ??= new Time();
|
||||||
this.clock.thing = this;
|
this.clock.thing = this;
|
||||||
this.clock.start();
|
this.clock.start();
|
||||||
ready();
|
ready(this.name);
|
||||||
render(this);
|
render(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,10 +31,13 @@ export class Pawn extends Serializable implements Tickable {
|
||||||
};
|
};
|
||||||
job: Task;
|
job: Task;
|
||||||
awake: boolean;
|
awake: boolean;
|
||||||
|
sex: number;
|
||||||
|
|
||||||
energy: number;
|
energy: number;
|
||||||
fun: number;
|
fun: number;
|
||||||
|
|
||||||
|
age: number;
|
||||||
|
|
||||||
async tick() {
|
async tick() {
|
||||||
this.energy -= energyScale;
|
this.energy -= energyScale;
|
||||||
|
|
||||||
|
|
@ -78,6 +81,10 @@ export class Pawn extends Serializable implements Tickable {
|
||||||
first: faker.name.firstName(),
|
first: faker.name.firstName(),
|
||||||
last: faker.name.lastName()
|
last: faker.name.lastName()
|
||||||
};
|
};
|
||||||
|
if(!this.sex) {
|
||||||
|
this.sex = Math.round(Math.random());
|
||||||
|
this.name.first = faker.name.firstName(this.sex);
|
||||||
|
}
|
||||||
this.awake ??= true;
|
this.awake ??= true;
|
||||||
this.energy ??= 100;
|
this.energy ??= 100;
|
||||||
if(this.job?.completed) {
|
if(this.job?.completed) {
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ export default class Time extends Serializable{
|
||||||
}
|
}
|
||||||
|
|
||||||
ctor() {
|
ctor() {
|
||||||
this.rate ??= 10;
|
this.rate = 60;
|
||||||
this.minute ??= 0;
|
this.minute ??= 0;
|
||||||
this.hour ??= 0;
|
this.hour ??= 0;
|
||||||
this.day ??= 0;
|
this.day ??= 0;
|
||||||
|
|
|
||||||
|
|
@ -76,9 +76,14 @@ const titleBar = blessed.box({
|
||||||
width: '100%',
|
width: '100%',
|
||||||
height: 1,
|
height: 1,
|
||||||
tags: true,
|
tags: true,
|
||||||
content: ' Colony Manager Sim{|}{bold}{black-fg}v0.1.0 {/}'
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export function setTitle(title) {
|
||||||
|
titleBar.setContent(` ${title}{|}{bold}{black-fg}v0.1.0 {/}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
setTitle('');
|
||||||
|
|
||||||
menuPanel.focus();
|
menuPanel.focus();
|
||||||
|
|
||||||
screen.append(tasksPanel);
|
screen.append(tasksPanel);
|
||||||
|
|
|
||||||
19
src/mDNS.ts
19
src/mDNS.ts
|
|
@ -1,15 +1,17 @@
|
||||||
|
|
||||||
import bonjour from 'bonjour';
|
import bonjour from 'bonjour';
|
||||||
import log from './log.js';
|
import log from './log.js';
|
||||||
|
import getPort from 'get-port';
|
||||||
import os from 'os'
|
import os from 'os'
|
||||||
import * as uuid from 'uuid';
|
import * as uuid from 'uuid';
|
||||||
|
import faker from 'faker';
|
||||||
|
|
||||||
const mdns = bonjour();
|
const mdns = bonjour();
|
||||||
const ID = uuid.v4();
|
const ID = uuid.v4();
|
||||||
let devices = [];
|
let devices = [];
|
||||||
|
|
||||||
class Player {
|
class Player {
|
||||||
name: string;
|
name: string;
|
||||||
address: string;
|
host: string;
|
||||||
port: number;
|
port: number;
|
||||||
|
|
||||||
toString() {
|
toString() {
|
||||||
|
|
@ -25,19 +27,22 @@ const network = {
|
||||||
|
|
||||||
export default network;
|
export default network;
|
||||||
|
|
||||||
export function ready() {
|
export async function ready(name, onThing?) {
|
||||||
|
const port = await getPort({port: getPort.makeRange(52300, 52399)});
|
||||||
mdns.publish({
|
mdns.publish({
|
||||||
type: 'dfi',
|
type: 'dfi',
|
||||||
name: os.hostname() + '-' + ID,
|
name,
|
||||||
port: 6969
|
port: port
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
mdns.find({
|
mdns.find({
|
||||||
type: 'dfi'
|
type: 'dfi'
|
||||||
}, (service) => {
|
}, (service) => {
|
||||||
log.info('found network device', service);
|
|
||||||
const p = new Player();
|
const p = new Player();
|
||||||
p.name = service.fqdn;
|
p.name = service.name;
|
||||||
|
p.host = service.host;
|
||||||
|
p.port = service.port;
|
||||||
|
log.info('Found player', p);
|
||||||
devices.push(p);
|
devices.push(p);
|
||||||
});
|
});
|
||||||
|
|
@ -14,6 +14,10 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/faker@^5.5.6":
|
||||||
|
version "5.5.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/faker/-/faker-5.5.6.tgz#039b700a9d8ad9150ecc842bf5e717e2027b6f75"
|
||||||
|
|
||||||
"@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"
|
||||||
|
|
@ -125,6 +129,10 @@ get-intrinsic@^1.0.2:
|
||||||
has "^1.0.3"
|
has "^1.0.3"
|
||||||
has-symbols "^1.0.1"
|
has-symbols "^1.0.1"
|
||||||
|
|
||||||
|
get-port@^5.1.1:
|
||||||
|
version "5.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193"
|
||||||
|
|
||||||
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"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue