85 lines
2.2 KiB
Racket
85 lines
2.2 KiB
Racket
#lang racket/base
|
|
|
|
(require rackunit
|
|
racket/file
|
|
racket/tcp
|
|
racket-upnp
|
|
racket-upnp/private/model
|
|
"../main.rkt")
|
|
|
|
(define (available-port)
|
|
(let ((listener (tcp-listen 0 4 #t "127.0.0.1")))
|
|
(let-values (((_local-host port _remote-host _remote-port)
|
|
(tcp-addresses listener #t)))
|
|
(tcp-close listener)
|
|
port)))
|
|
|
|
(define (test-renderer id)
|
|
(upnp-device
|
|
id
|
|
"urn:schemas-upnp-org:device:MediaRenderer:1"
|
|
"Test renderer"
|
|
"Test"
|
|
"Test"
|
|
"1"
|
|
#f
|
|
"http://127.0.0.1/device.xml"
|
|
"127.0.0.1"
|
|
#f
|
|
'()
|
|
'()
|
|
(hash)))
|
|
|
|
(define port (available-port))
|
|
(define file (make-temporary-file "racket-audio-dlna-shared-~a.flac"))
|
|
(define server #f)
|
|
(define first-player #f)
|
|
(define second-player #f)
|
|
|
|
(dynamic-wind
|
|
(λ ()
|
|
(call-with-output-file
|
|
file
|
|
#:exists 'truncate
|
|
(λ (output)
|
|
(write-bytes #"test audio" output)))
|
|
(set! server
|
|
(start-media-file-server
|
|
(format "http://127.0.0.1:~a/media/" port)
|
|
#:listen-ip "127.0.0.1"))
|
|
(set! first-player
|
|
(make-dlna-player
|
|
(test-renderer "uuid:first")
|
|
#:media-file-server server
|
|
#:listen-ip "127.0.0.1"
|
|
#:poll-seconds 60))
|
|
(set! second-player
|
|
(make-dlna-player
|
|
(test-renderer "uuid:second")
|
|
#:media-file-server server
|
|
#:listen-ip "127.0.0.1"
|
|
#:poll-seconds 60)))
|
|
(λ ()
|
|
(dlna-player-close! first-player)
|
|
(set! first-player #f)
|
|
(define first-uri
|
|
(media-file-server-publish! server file "after-first.flac"))
|
|
(check-true (string? first-uri))
|
|
(media-file-server-unpublish! server first-uri)
|
|
|
|
(dlna-player-close! second-player)
|
|
(set! second-player #f)
|
|
(define second-uri
|
|
(media-file-server-publish! server file "after-second.flac"))
|
|
(check-true (string? second-uri))
|
|
(media-file-server-unpublish! server second-uri))
|
|
(λ ()
|
|
(when first-player
|
|
(dlna-player-close! first-player))
|
|
(when second-player
|
|
(dlna-player-close! second-player))
|
|
(when server
|
|
(media-file-server-stop! server))
|
|
(when (file-exists? file)
|
|
(delete-file file))))
|