From 1c7efe5a9e8c730fc5960ca42b26487a3ba5db9d Mon Sep 17 00:00:00 2001 From: Daniel Flanagan Date: Mon, 26 Sep 2022 20:57:53 -0500 Subject: [PATCH] WIP --- main.ts | 83 +++++++++++++++++++++------------------------------------ 1 file changed, 30 insertions(+), 53 deletions(-) diff --git a/main.ts b/main.ts index 443e7d5..a4d29b7 100644 --- a/main.ts +++ b/main.ts @@ -1,73 +1,50 @@ +import { copy } from "https://deno.land/std@0.157.0/streams/conversion.ts?s=copy"; +import { Buffer } from "https://deno.land/std@0.157.0/io/buffer.ts"; import { ByteSet } from "https://deno.land/x/bytes@1.0.3/mod.ts"; -import { JsonParseStream } from "https://deno.land/std@0.157.0/encoding/json/stream.ts"; -import { TextLineStream } from "https://deno.land/std@0.156.0/streams/delimiter.ts"; -import { writeAll, copy } from "https://deno.land/std@0.156.0/streams/conversion.ts"; -const PORT = 5588 -const listener = Deno.listen({ port: 5588 }) +const QUERY_SIZE = 9; +const PORT = 5588; -console.log(`Listening on 0.0.0.0:${PORT}`) +const listener = Deno.listen({ port: 5588 }); + +console.log(`Listening on 0.0.0.0:${PORT}`); for await (const conn of listener) { - console.log('Connection established:', conn.remoteAddr) + console.log("Connection established:", conn.remoteAddr); try { - meansToAnEnd(conn) + meansToAnEnd(conn); } catch (e) { - console.error(conn.remoteAddr, e) + console.error(conn.remoteAddr, e); } - console.log('Connection closed:', conn.remoteAddr) + console.log("Connection closed:", conn.remoteAddr); } // problem 2 -async function meansToAnEnd(conn) { - new ByteSet( -} - -// problem 1 -async function primeTime(conn) { +async function meansToAnEnd(conn: Deno.Conn) { try { - for await (const request of jsonLines(conn)) { - console.log('Request:', request) - if (request.method == "isPrime" && typeof request.number == "number") { - const response = { - method: "isPrime", - prime: isPrime(request.number), - } - console.log('Response:', response) - const writeResult = await conn.write(new TextEncoder().encode(JSON.stringify(response) + "\n")) - console.log('Wrote:', writeResult) - } else { - await conn.write("Malformed!") - } + for await (const query of queries(conn)) { + console.log("Query:", query); + conn.write(ByteSet.from(Uint8Array.from([0]), "big").buffer); } - } catch (error) { - console.error("Error:", error) + console.log("Done!"); + } catch (err) { + console.error(err); } } -function isPrime(n) { - if (!Number.isInteger(n)) return false - for (let i = 2, s = Math.sqrt(n); i <= s; i++) if (n % i === 0) return false - return n > 1 -} - -function jsonLines(conn) { - const readable = conn.readable - .pipeThrough(new TextDecoderStream()) - .pipeThrough(new TextLineStream()) - .pipeThrough(new JsonParseStream()) - +function queries(conn: Deno.Conn) { return { async *[Symbol.asyncIterator]() { - for await (const data of readable) { - yield data + const b = new Uint8Array(1024); + const q = new Uint8Array(); + let bytesRead = 0; + console.debug(b.length); + while (bytesRead < QUERY_SIZE) { + const n = await conn.read(b); + bytesRead += n; + console.debug(n, b.length); } - } - } + yield q; + }, + }; } - -// problem 0 -async function echo(conn) { - await copy(conn, conn) - conn.close() -} \ No newline at end of file