mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-21 16:52:55 +02:00
Did some changes of the remote api and added documentation
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
export class RFAMessage {
|
||||
jsonrpc = "2.0"; // Transmits version of JSON-RPC. Compliance maybe allows some funky interaction with external tools?
|
||||
public method?: string; // Is defined when it's a request/notification, otherwise undefined
|
||||
public result?: string; // Is defined when it's a response, otherwise undefined
|
||||
public result?: string | number; // Is defined when it's a response, otherwise undefined
|
||||
public params?: FileMetadata; // Optional parameters to method
|
||||
public error?: string; // Only defined on error
|
||||
public id?: number; // ID to keep track of request -> response interaction, undefined with notifications, defined with request/response
|
||||
|
||||
constructor(obj: { method?: string; result?: string; params?: FileMetadata; error?: string; id?: number } = {}) {
|
||||
constructor(
|
||||
obj: { method?: string; result?: string | number; params?: FileMetadata; error?: string; id?: number } = {},
|
||||
) {
|
||||
this.method = obj.method;
|
||||
this.result = obj.result;
|
||||
this.params = obj.params;
|
||||
|
||||
@@ -12,12 +12,10 @@ import {
|
||||
FileLocation,
|
||||
isFileData,
|
||||
} from "./MessageDefinitions";
|
||||
//@ts-ignore: Complaint of import ending with .d.ts
|
||||
|
||||
import libSource from "!!raw-loader!../ScriptEditor/NetscriptDefinitions.d.ts";
|
||||
import { RFALogger } from "./RFALogger";
|
||||
|
||||
function error(errorMsg: string, { id }: RFAMessage): RFAMessage {
|
||||
RFALogger.error((typeof id === "undefined" ? "" : `Request ${id}: `) + errorMsg);
|
||||
return new RFAMessage({ error: errorMsg, id: id });
|
||||
}
|
||||
|
||||
@@ -129,12 +127,11 @@ export const RFARequestHandler: Record<string, (message: RFAMessage) => void | R
|
||||
if (!script) return error("File doesn't exist", msg);
|
||||
const ramUsage = script.ramUsage;
|
||||
|
||||
return new RFAMessage({ result: String(ramUsage), id: msg.id });
|
||||
return new RFAMessage({ result: ramUsage, id: msg.id });
|
||||
},
|
||||
|
||||
getDefinitionFile: function (msg: RFAMessage): RFAMessage {
|
||||
const source = (libSource + "").replace(/export /g, "");
|
||||
console.log(source);
|
||||
return new RFAMessage({ result: source, id: msg.id });
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
class RemoteFileAPILogger {
|
||||
_enabled = true;
|
||||
_prefix = "[RFA]";
|
||||
_error_prefix = "[RFA-ERROR]";
|
||||
|
||||
constructor(enabled: boolean) {
|
||||
this._enabled = enabled;
|
||||
}
|
||||
|
||||
public error(...message: any[]): void {
|
||||
if (this._enabled) console.error(this._error_prefix, ...message);
|
||||
}
|
||||
|
||||
public log(...message: any[]): void {
|
||||
if (this._enabled) console.log(this._prefix, ...message);
|
||||
}
|
||||
|
||||
public disable(): void {
|
||||
this._enabled = false;
|
||||
}
|
||||
|
||||
public enable(): void {
|
||||
this._enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
export const RFALogger = new RemoteFileAPILogger(true);
|
||||
+23
-20
@@ -1,10 +1,10 @@
|
||||
import { RFALogger } from "./RFALogger";
|
||||
import { RFAMessage } from "./MessageDefinitions";
|
||||
import { RFARequestHandler } from "./MessageHandlers";
|
||||
import { SnackbarEvents, ToastVariant } from "../ui/React/Snackbar";
|
||||
|
||||
export class Remote {
|
||||
connection?: WebSocket;
|
||||
protocol = "ws";
|
||||
static protocol = "ws";
|
||||
ipaddr: string;
|
||||
port: number;
|
||||
|
||||
@@ -18,32 +18,35 @@ export class Remote {
|
||||
}
|
||||
|
||||
public startConnection(): void {
|
||||
RFALogger.log("Trying to connect.");
|
||||
this.connection = new WebSocket(this.protocol + "://" + this.ipaddr + ":" + this.port);
|
||||
const address = Remote.protocol + "://" + this.ipaddr + ":" + this.port;
|
||||
this.connection = new WebSocket(address);
|
||||
|
||||
this.connection.addEventListener("error", (e: Event) => RFALogger.error(e));
|
||||
this.connection.addEventListener("error", (e: Event) =>
|
||||
SnackbarEvents.emit(`Error with websocket ${address}, details: ${JSON.stringify(e)}`, ToastVariant.ERROR, 5000),
|
||||
);
|
||||
this.connection.addEventListener("message", handleMessageEvent);
|
||||
this.connection.addEventListener("open", () =>
|
||||
RFALogger.log("Connection established: ", this.ipaddr, ":", this.port),
|
||||
SnackbarEvents.emit(
|
||||
`Remote API connection established on ${this.ipaddr}:${this.port}`,
|
||||
ToastVariant.SUCCESS,
|
||||
2000,
|
||||
),
|
||||
);
|
||||
this.connection.addEventListener("close", () =>
|
||||
SnackbarEvents.emit("Remote API connection closed", ToastVariant.WARNING, 2000),
|
||||
);
|
||||
this.connection.addEventListener("close", () => RFALogger.log("Connection closed"));
|
||||
}
|
||||
}
|
||||
|
||||
function handleMessageEvent(this: WebSocket, e: MessageEvent): void {
|
||||
const msg: RFAMessage = JSON.parse(e.data);
|
||||
RFALogger.log("Message received:", msg);
|
||||
|
||||
if (msg.method) {
|
||||
if (!RFARequestHandler[msg.method]) {
|
||||
const response = new RFAMessage({ error: "Unknown message received", id: msg.id });
|
||||
this.send(JSON.stringify(response));
|
||||
return;
|
||||
}
|
||||
const response = RFARequestHandler[msg.method](msg);
|
||||
RFALogger.log("Sending response: ", response);
|
||||
if (response) this.send(JSON.stringify(response));
|
||||
} else if (msg.result) RFALogger.log("Somehow retrieved a result message.");
|
||||
else if (msg.error) RFALogger.error("Received an error from server", msg);
|
||||
else RFALogger.error("Incorrect Message", msg);
|
||||
if (!msg.method || !RFARequestHandler[msg.method]) {
|
||||
const response = new RFAMessage({ error: "Unknown message received", id: msg.id });
|
||||
this.send(JSON.stringify(response));
|
||||
return;
|
||||
}
|
||||
const response = RFARequestHandler[msg.method](msg);
|
||||
if (!response) return;
|
||||
this.send(JSON.stringify(response));
|
||||
}
|
||||
|
||||
@@ -4,14 +4,9 @@ import { Remote } from "./Remote";
|
||||
let server: Remote;
|
||||
|
||||
export function newRemoteFileApiConnection(): void {
|
||||
if (server == undefined) {
|
||||
server = new Remote("localhost", Settings.RemoteFileApiPort);
|
||||
server.startConnection();
|
||||
} else {
|
||||
server.stopConnection();
|
||||
server = new Remote("localhost", Settings.RemoteFileApiPort);
|
||||
server.startConnection();
|
||||
}
|
||||
if (server) server.stopConnection();
|
||||
server = new Remote("localhost", Settings.RemoteFileApiPort);
|
||||
server.startConnection();
|
||||
}
|
||||
|
||||
export function isRemoteFileApiConnectionLive(): boolean {
|
||||
|
||||
Reference in New Issue
Block a user