colony names in mdns
parent
655cb671f9
commit
4e76133bc6
|
|
@ -7,11 +7,13 @@
|
|||
"dependencies": {
|
||||
"@types/blessed": "^0.1.17",
|
||||
"@types/bonjour": "^3.5.8",
|
||||
"@types/faker": "^5.5.6",
|
||||
"@types/uuid": "^8.3.0",
|
||||
"bonjour": "^3.5.0",
|
||||
"chalk": "^4.1.1",
|
||||
"faker": "^5.5.3",
|
||||
"frigid": "^1.3.6",
|
||||
"get-port": "^5.1.1",
|
||||
"logger": "^0.0.1",
|
||||
"neo-blessed": "^0.2.0",
|
||||
"printable-characters": "^1.0.42",
|
||||
|
|
|
|||
|
|
@ -5,11 +5,12 @@ import { TaskList } from './TaskList.js';
|
|||
import { Inventory } from './Inventory.js';
|
||||
import { Menu } from './Menu.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 { ChopTreeTask } from './ChopTreeTask.js';
|
||||
import { Task } from './Task.js';
|
||||
import { ready } from './mDNS.js';
|
||||
import faker from 'faker';
|
||||
|
||||
let game = null;
|
||||
|
||||
|
|
@ -20,6 +21,7 @@ export class Game extends Frigid implements Tickable, Renderable {
|
|||
board: TaskList;
|
||||
menu: Menu;
|
||||
clock: Time;
|
||||
name: string;
|
||||
|
||||
[DEBUG] = true;
|
||||
|
||||
|
|
@ -55,6 +57,8 @@ export class Game extends Frigid implements Tickable, Renderable {
|
|||
|
||||
ctor () {
|
||||
game = this;
|
||||
this.name ??= faker.address.city();
|
||||
setTitle(this.name);
|
||||
this.pawns ??= [];
|
||||
this.selected ??= this.pawns[0] || null;
|
||||
this.menu = new Menu();
|
||||
|
|
@ -63,7 +67,7 @@ export class Game extends Frigid implements Tickable, Renderable {
|
|||
this.clock ??= new Time();
|
||||
this.clock.thing = this;
|
||||
this.clock.start();
|
||||
ready();
|
||||
ready(this.name);
|
||||
render(this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,10 +31,13 @@ export class Pawn extends Serializable implements Tickable {
|
|||
};
|
||||
job: Task;
|
||||
awake: boolean;
|
||||
sex: number;
|
||||
|
||||
energy: number;
|
||||
fun: number;
|
||||
|
||||
age: number;
|
||||
|
||||
async tick() {
|
||||
this.energy -= energyScale;
|
||||
|
||||
|
|
@ -78,6 +81,10 @@ export class Pawn extends Serializable implements Tickable {
|
|||
first: faker.name.firstName(),
|
||||
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.energy ??= 100;
|
||||
if(this.job?.completed) {
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ export default class Time extends Serializable{
|
|||
}
|
||||
|
||||
ctor() {
|
||||
this.rate ??= 10;
|
||||
this.rate = 60;
|
||||
this.minute ??= 0;
|
||||
this.hour ??= 0;
|
||||
this.day ??= 0;
|
||||
|
|
|
|||
|
|
@ -76,9 +76,14 @@ const titleBar = blessed.box({
|
|||
width: '100%',
|
||||
height: 1,
|
||||
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();
|
||||
|
||||
screen.append(tasksPanel);
|
||||
|
|
|
|||
19
src/mDNS.ts
19
src/mDNS.ts
|
|
@ -1,15 +1,17 @@
|
|||
|
||||
import bonjour from 'bonjour';
|
||||
import log from './log.js';
|
||||
import getPort from 'get-port';
|
||||
import os from 'os'
|
||||
import * as uuid from 'uuid';
|
||||
import faker from 'faker';
|
||||
|
||||
const mdns = bonjour();
|
||||
const ID = uuid.v4();
|
||||
let devices = [];
|
||||
|
||||
class Player {
|
||||
name: string;
|
||||
address: string;
|
||||
host: string;
|
||||
port: number;
|
||||
|
||||
toString() {
|
||||
|
|
@ -25,19 +27,22 @@ const network = {
|
|||
|
||||
export default network;
|
||||
|
||||
export function ready() {
|
||||
export async function ready(name, onThing?) {
|
||||
const port = await getPort({port: getPort.makeRange(52300, 52399)});
|
||||
mdns.publish({
|
||||
type: 'dfi',
|
||||
name: os.hostname() + '-' + ID,
|
||||
port: 6969
|
||||
name,
|
||||
port: port
|
||||
});
|
||||
}
|
||||
|
||||
mdns.find({
|
||||
type: 'dfi'
|
||||
}, (service) => {
|
||||
log.info('found network device', service);
|
||||
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);
|
||||
});
|
||||
|
|
@ -14,6 +14,10 @@
|
|||
dependencies:
|
||||
"@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@*":
|
||||
version "15.12.2"
|
||||
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-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:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
|
||||
|
|
|
|||
Loading…
Reference in New Issue