@@ -28,7 +28,7 @@ class Client
2828 * @param ?LoopInterface $loop
2929 * @param ?MulticastFactory $multicast
3030 */
31- public function __construct (LoopInterface $ loop = null , MulticastFactory $ multicast = null )
31+ public function __construct (? LoopInterface $ loop = null , ? MulticastFactory $ multicast = null )
3232 {
3333 $ this ->loop = $ loop ?: Loop::get ();
3434 $ this ->multicast = $ multicast ?: new MulticastFactory ($ this ->loop );
@@ -46,29 +46,38 @@ public function search($searchTarget = 'ssdp:all', $mx = 2)
4646 $ socket = $ this ->multicast ->createSender ();
4747 // TODO: The TTL for the IP packet SHOULD default to 2 and SHOULD be configurable.
4848
49- $ timer = $ this ->loop ->addTimer ($ mx , function () use ($ socket , &$ deferred ) {
50- $ deferred ->resolve ();
51- $ socket ->close ();
52- });
53-
5449 $ loop = $ this ->loop ;
55- $ deferred = new Deferred (function () use ($ socket , &$ timer , $ loop ) {
50+ $ timer = null ;
51+
52+ $ deferred = new Deferred (function () use (&$ socket , &$ timer , $ loop ) {
5653 // canceling resulting promise cancels timer and closes socket
57- $ loop ->cancelTimer ($ timer );
54+ if ($ timer !== null ) {
55+ $ loop ->cancelTimer ($ timer );
56+ }
5857 $ socket ->close ();
5958 throw new RuntimeException ('Cancelled ' );
6059 });
6160
62- $ that = $ this ;
63- $ socket ->on ('message ' , function ($ data , $ remote ) use ($ deferred , $ that ) {
64- $ message = $ that ->parseMessage ($ data , $ remote );
61+ $ timer = $ this ->loop ->addTimer ($ mx , function () use ($ socket , $ deferred ) {
62+ $ deferred ->resolve ();
63+ $ socket ->close ();
64+ });
6565
66- $ deferred ->progress ($ message );
67- });
66+ $ that = $ this ;
67+ $ socket ->on ('message ' , function ($ data , $ remote ) use ($ deferred , $ that ) {
68+ $ message = $ that ->parseMessage ($ data , $ remote );
69+
70+ // React Promise v3+ doesn't support progress(), use notify() instead
71+ if (method_exists ($ deferred , 'progress ' )) {
72+ $ deferred ->progress ($ message );
73+ } else {
74+ $ deferred ->notify ($ message );
75+ }
76+ });
6877
69- $ socket ->send ($ data , self ::ADDRESS );
78+ $ socket ->send ($ data , self ::ADDRESS );
7079
71- return $ deferred ->promise ();
80+ return $ deferred ->promise ();
7281 }
7382
7483 /** @internal */
0 commit comments