import { resolve } from "path"; import Tinypool from "tinypool"; import type { UDPReceiveProcotol, UDPSendProtocol } from "./udpProtocol"; import type { udp } from "bun"; import { Option } from "ts-results-es"; const SERVER_PATH = resolve(__dirname, "./udpServer.ts") const CLIENT_PATH = resolve(__dirname, "./udpClient.ts") export type UDPBodyType = ( udp.Data | UDPSendProtocol.CmdPackage | UDPSendProtocol.DataPackage | UDPReceiveProcotol.ReadPackage | UDPReceiveProcotol.WritePackage ) type UDPDataType = { address: string, body: T, port: number, date?: string, } const udpClientsPool = new Tinypool({ filename: CLIENT_PATH, workerData: {} }) const udpServerPool = new Tinypool({ filename: SERVER_PATH, workerData: {}, maxThreads: 1, minThreads: 1, }) export namespace udpServer { export async function port(): Promise { return udpServerPool.run(null, { name: "port" }) } export async function lastestData(address: string): Promise>> { return udpServerPool.run(address, { name: "lastestData" }) } export async function oldestData(address: string): Promise>> { return udpServerPool.run(address, { name: "oldestData" }) } } export namespace udpClient { export async function sendString(data: string, port: number, address: string): Promise { return udpClientsPool.run({ body: data, port: port, address: address } as UDPDataType, { name: "sendString" }) } export async function sendUint8Array(data: Uint8Array, port: number, address: string): Promise { return udpClientsPool.run({ body: data, port: port, address: address } as UDPDataType, { name: "sendUint8Array" }) } export async function sendBunData(data: udp.Data, port: number, address: string): Promise { return udpClientsPool.run({ body: data, port: port, address: address } as UDPDataType, { name: "sendUint8Array" }) } } export type { UDPDataType }