diff options
| author | Adam Soltys <[email protected]> | 2024-10-08 20:13:48 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-10-10 12:17:05 -0700 |
| commit | 0a2734dfb5ae312f5283f93ab2e3f819ace3f94b (patch) | |
| tree | 9170fc9bb3c7e9bb5b05ccea407321eb6c7302ef /lib/strfry.ts | |
| parent | 372c635714f6e7de8a0da135980697b49f207f2c (diff) | |
| download | coinos-server-0a2734dfb5ae312f5283f93ab2e3f819ace3f94b.tar.gz coinos-server-0a2734dfb5ae312f5283f93ab2e3f819ace3f94b.zip | |
nostr revamp wip
Diffstat (limited to 'lib/strfry.ts')
| -rw-r--r-- | lib/strfry.ts | 68 |
1 files changed, 48 insertions, 20 deletions
diff --git a/lib/strfry.ts b/lib/strfry.ts index ebc14ed3..029c8eee 100644 --- a/lib/strfry.ts +++ b/lib/strfry.ts @@ -1,30 +1,58 @@ -import { connect } from "net"; +import { createServer, connect } from "net"; +import { randomUUID } from "crypto"; -export default (cmd) => - new Promise((r, j) => { - let results = []; - let c = `/app/strfry ${cmd} 2>/dev/null\n`; - let client = connect("/sockets/ctrl", () => client.write(c)); +let exec = async (cmd) => + new Promise((resolve, reject) => { + let c = `/app/strfry ${cmd} 2>/dev/null`; + let id = randomUUID(); + const resultSocketPath = `/sockets/result_${id}`; - let s = ""; - client.on("data", (data) => { - s += data.toString(); - // console.log("S", s); + const resultServer = createServer((socket) => { + let resultBuffer = ""; - try { - let parts = s.split("}"); + let results = []; + socket.on("data", (data) => { + resultBuffer += data.toString(); + + let parts = resultBuffer.split("\n"); for (let i = 0; i < parts.length - 1; i++) { - let completeJson = parts[i] + "}"; - results.push(JSON.parse(completeJson)); + try { + let parsedObject = JSON.parse(parts[i]); + results.push(parsedObject); + } catch (e) { + console.error(parts[i]); + } } - s = parts[parts.length - 1]; - } catch (err) { - console.error("Error parsing JSON:", err.message); - } + resultBuffer = parts[parts.length - 1]; + }); + + socket.on("end", () => { + socket.write("DONE"); + resolve(results); + socket.end(); + + resultServer.close(); + }); }); - client.on("error", (e) => j(e.message)); - client.on("close", () => r(results)); + resultServer.listen(resultSocketPath, () => { + const controlClient = connect("/sockets/ctrl", () => { + const message = `${resultSocketPath} ${c}\n`; + controlClient.write(message); + controlClient.end(); + }); + + controlClient.on("error", (e) => + reject(`Control socket error: ${e.message}`), + ); + }); + + resultServer.on("error", (e) => + reject(`Result server error: ${e.message}`), + ); }); + +export let scan = (f) => exec(`scan '${JSON.stringify(f)}'\n`) +export let sync = (r, f) => exec(`sync ${r} --dir down --filter '${JSON.stringify(f)}'\n`) |
