FPGA_WebLab/server/udp.ts

59 lines
1.3 KiB
TypeScript

import type { udp } from "bun"
const udpServer = await Bun.udpSocket({
port: 33000,
socket: {
data(_socket, _buf, _port, _addr) {
// todo : Handle Recieved Data
}
}
})
export const udpSocketPool = await createUDPSocketPool(5)
type bunUDPSocket = udp.Socket<"buffer">
export function getUDPServerPort() {
return udpServer.port
}
export class UDPSocketPool {
freeSockets: Set<bunUDPSocket> = new Set()
busySockets: Set<bunUDPSocket> = new Set()
getFreeSocket(): bunUDPSocket {
const socket = this.freeSockets.values().next().value
if (socket !== undefined) {
this.busySockets.add(socket)
this.freeSockets.delete(socket)
} else {
throw Error("Failure: Create udp socket failed")
}
return socket
}
releaseSocket(socket: any) {
this.freeSockets.add(socket)
this.busySockets.delete(socket)
}
send(data: udp.Data, port: number, hostname: string) {
const socket = this.getFreeSocket()
socket.send(data, port, hostname)
this.releaseSocket(socket)
}
}
export async function createUDPSocketPool(depth: number): Promise<UDPSocketPool> {
const pool = new UDPSocketPool()
for (var i = 0; i < depth; i++) {
const socket = await Bun.udpSocket({})
pool.freeSockets.add(socket)
}
return pool
}