@@ -7,13 +7,16 @@ import { PortLimitReachedError } from "#src/utils/errors.ts";
77import os from "node:os" ;
88
99const availablePorts : Set < number > = new Set ( ) ;
10+ let unique = 1 ;
1011
1112export interface RtcWorker extends mediasoup . types . Worker {
1213 appData : {
1314 webRtcServer ?: mediasoup . types . WebRtcServer ;
1415 } ;
1516}
1617
18+ // TODO maybe write some docstring, file used to manage resources such as folders, workers, ports
19+
1720const logger = new Logger ( "RESOURCES" ) ;
1821const workers = new Set < RtcWorker > ( ) ;
1922const tempDir = os . tmpdir ( ) + "/ongoing_recordings" ;
@@ -86,27 +89,39 @@ export async function getWorker(): Promise<mediasoup.types.Worker> {
8689 return leastUsedWorker ;
8790}
8891
89- export function getFolder ( ) {
90- const tempName = `${ Date . now ( ) } ` ;
91- const path = `${ tempDir } /${ tempName } ` ;
92- // TODO we may want to track these temp folders to remove them periodically (although os.tempDir() has already such a mechanism)
93- return {
94- path,
95- sealFolder : ( name : string = tempName ) => {
96- // TODO move whatever is in path to
97- console . log ( `${ config . recording . directory } /${ name } ` ) ;
98- } ,
92+ class Folder {
93+ path : string ;
94+
95+ constructor ( path : string ) {
96+ this . path = path ;
97+ }
98+
99+ seal ( name : string ) {
100+ console . trace ( `TO IMPLEMENT, MOVING TO ${ config . recording . directory } /${ name } ` ) ;
99101 }
100102}
101103
102- export function getPort ( ) : number {
103- const port = availablePorts . values ( ) . next ( ) . value ;
104- if ( ! port ) {
105- throw new PortLimitReachedError ( ) ;
104+ export function getFolder ( ) : Folder {
105+ return new Folder ( `${ tempDir } /${ Date . now ( ) } -${ unique ++ } ` ) ;
106+ }
107+
108+ class DynamicPort {
109+ number : number ;
110+
111+ constructor ( number : number ) {
112+ availablePorts . delete ( number ) ;
113+ this . number = number ;
114+ }
115+
116+ release ( ) {
117+ availablePorts . add ( this . number ) ;
106118 }
107- return port ;
108119}
109120
110- export function releasePort ( port : number ) {
111- availablePorts . add ( port ) ;
121+ export function getPort ( ) : DynamicPort {
122+ const number = availablePorts . values ( ) . next ( ) . value ;
123+ if ( ! number ) {
124+ throw new PortLimitReachedError ( ) ;
125+ }
126+ return new DynamicPort ( number ) ;
112127}
0 commit comments