Synchronize missing files on start (rq #4044)
Synchronize files that the game doesn't have yet, skip any files it knows about already. Requires Bitburner PR #4044: https://github.com/danielyxie/bitburner/pull/4044
This commit is contained in:
parent
ccf38f2df4
commit
880cc5be51
6 changed files with 63 additions and 20 deletions
|
@ -1,4 +1,5 @@
|
|||
export class EventType {
|
||||
static ConnectionMade = "ConnectionMade";
|
||||
static FileChanged = "FileChanged";
|
||||
static FileDeleted = "FileDeleted";
|
||||
static MessageReceived = "MessageReceived";
|
||||
|
|
|
@ -11,13 +11,13 @@ function fileFilter(file) {
|
|||
return false;
|
||||
}
|
||||
|
||||
export async function setupWatch(signaller) {
|
||||
const watch = new CheapWatch({
|
||||
dir: config.get("scriptsFolder"),
|
||||
filter: fileFilter,
|
||||
watch: !config.get("dry")
|
||||
});
|
||||
|
||||
const watch = new CheapWatch({
|
||||
dir: config.get("scriptsFolder"),
|
||||
filter: fileFilter,
|
||||
watch: !config.get("dry")
|
||||
});
|
||||
export async function setupWatch(signaller) {
|
||||
|
||||
if(!config.get("quiet")) console.log("Watching folder", resolve(config.get("scriptsFolder")))
|
||||
|
||||
|
@ -30,7 +30,11 @@ export async function setupWatch(signaller) {
|
|||
if(config.get("dry")) {
|
||||
console.log("Watch would've synchronised:\n", watch.paths)
|
||||
process.exit();
|
||||
}
|
||||
}
|
||||
|
||||
return watch;
|
||||
}
|
||||
|
||||
export function watchedFiles() {
|
||||
return watch.paths;
|
||||
}
|
19
src/index.js
19
src/index.js
|
@ -3,7 +3,7 @@ import { setupWatch } from "./fileWatch.js";
|
|||
import { config, loadConfig } from "./config.js";
|
||||
import { setupSocket } from "./networking/webSocket.js";
|
||||
import signal from "signal-js";
|
||||
import { fileChangeEventToMsg, fileRemovalEventToMsg, requestDefinitionFile } from "./networking/messageGenerators.js";
|
||||
import { fileChangeEventToMsg, fileRemovalEventToMsg, requestFilenames } from "./networking/messageGenerators.js";
|
||||
import { EventType } from "./eventTypes.js";
|
||||
import { messageHandler } from "./networking/messageHandler.js";
|
||||
|
||||
|
@ -12,13 +12,28 @@ export async function start() {
|
|||
const watch = await setupWatch(signal);
|
||||
const socket = setupSocket(signal);
|
||||
|
||||
signal.on(EventType.MessageReceived, msg => messageHandler(msg));
|
||||
// Add a handler for received messages.
|
||||
signal.on(EventType.MessageReceived, msg => messageHandler(signal, msg));
|
||||
|
||||
// Add a handler for when a connection to a game is made.
|
||||
signal.on(EventType.ConnectionMade, () => {
|
||||
console.log("Connection made!");
|
||||
|
||||
if (config.get("definitionFile").update) {
|
||||
signal.emit(EventType.MessageSend, requestDefinitionFile());
|
||||
}
|
||||
|
||||
// Upload missing files to the game.
|
||||
signal.emit(EventType.MessageSend, requestFilenames());
|
||||
})
|
||||
|
||||
// Add a handler for changed files.
|
||||
signal.on(EventType.FileChanged, fileEvent => {
|
||||
if (!config.get("quiet")) console.log(fileEvent.path + " changed");
|
||||
signal.emit(EventType.MessageSend, fileChangeEventToMsg(fileEvent))
|
||||
});
|
||||
|
||||
// Add a handler for removed files, if allowed.
|
||||
if (config.get("allowDeletingFiles"))
|
||||
signal.on(EventType.FileDeleted, fileEvent =>
|
||||
signal.emit(EventType.MessageSend, fileRemovalEventToMsg(fileEvent)));
|
||||
|
|
|
@ -34,4 +34,15 @@ export function requestDefinitionFile(){
|
|||
"method": "getDefinitionFile",
|
||||
"id":messageCounter++
|
||||
}
|
||||
}
|
||||
|
||||
export function requestFilenames(){
|
||||
return {
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getFileNames",
|
||||
"params": {
|
||||
"server": "home",
|
||||
},
|
||||
"id":messageCounter++
|
||||
}
|
||||
}
|
|
@ -1,26 +1,42 @@
|
|||
import { messageTracker } from "./messageTracker.js";
|
||||
import {writeFile} from "fs";
|
||||
import { writeFile } from "fs";
|
||||
import { config } from "../config.js";
|
||||
import { watchedFiles } from "../fileWatch.js";
|
||||
import { EventType } from "../eventTypes.js";
|
||||
import { fileChangeEventToMsg } from "./messageGenerators.js";
|
||||
|
||||
export function messageHandler(msg) {
|
||||
export function messageHandler(signaller, msg) {
|
||||
let incoming;
|
||||
|
||||
try {incoming = JSON.parse(msg.toString());}
|
||||
catch {return;}
|
||||
catch (err) {return console.log(err);}
|
||||
console.log(incoming)
|
||||
if (incoming.id == undefined) return;
|
||||
|
||||
if (incoming.result) {
|
||||
const request = messageTracker.get(incoming.id);
|
||||
console.log(messageTracker.data);
|
||||
console.log("REQUEST: ", request);
|
||||
if (request.method &&
|
||||
request.method == "getDefinitionFile"
|
||||
&& incoming.result) {
|
||||
writeFile(config.get("definitionFile").location, incoming.result, (err) => {
|
||||
if (err) return console.log(err);
|
||||
console.log("wrote definition")
|
||||
});
|
||||
}
|
||||
|
||||
if (request.method &&
|
||||
request.method == "getFileNames"
|
||||
&& incoming.result) {
|
||||
const gameFiles = incoming.result.map(file => removeLeadingSlash(file));
|
||||
|
||||
watchedFiles().forEach((stats, fileName) => {
|
||||
if(!stats.isDirectory() && !gameFiles.includes(fileName))
|
||||
signaller.emit(EventType.MessageSend, fileChangeEventToMsg({path:fileName}));
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function removeLeadingSlash(path){
|
||||
const reg = /^\//;
|
||||
return path.replace(reg, "")
|
||||
}
|
|
@ -23,11 +23,7 @@ export function setupSocket(signaller){
|
|||
sendMessage(msg);
|
||||
});
|
||||
|
||||
if (config.get("definitionFile").update) {
|
||||
sendMessage(requestDefinitionFile());
|
||||
}
|
||||
|
||||
console.log("Connection made!");
|
||||
signaller.trigger(EventType.ConnectionMade);
|
||||
});
|
||||
|
||||
return wss;
|
||||
|
|
Loading…
Add table
Reference in a new issue