@@ -323,6 +323,22 @@ func (srv *Memberlist) Broadcast(b memberlist.Broadcast) {
323323 srv .delegate .QueueBroadcast (b )
324324}
325325
326+ func (srv * Memberlist ) Broadcast2 (b memberlist.Broadcast ) {
327+ if ! srv .CanBroadcast () {
328+ b .Finished ()
329+
330+ return
331+ }
332+
333+ if srv .metricsCollector != nil {
334+ srv .metricsCollector .RecordMemberlistBroadcast ()
335+ }
336+
337+ srv .Log ().Trace ().Interface ("broadcast" , b ).Msg ("enqueue broadcast" )
338+
339+ srv .delegate .QueueBroadcast2 (b )
340+ }
341+
326342func (srv * Memberlist ) CallbackBroadcast (b []byte , id string , notifych chan struct {}) error {
327343 if ! srv .CanBroadcast () {
328344 if notifych != nil {
@@ -352,6 +368,35 @@ func (srv *Memberlist) CallbackBroadcast(b []byte, id string, notifych chan stru
352368 return nil
353369}
354370
371+ func (srv * Memberlist ) CallbackBroadcast2 (b []byte , id string , notifych chan struct {}) error {
372+ if ! srv .CanBroadcast () {
373+ if notifych != nil {
374+ close (notifych )
375+ }
376+
377+ return nil
378+ }
379+
380+ // NOTE save b in cache first
381+ srv .cbcache .Set (id , b , srv .args .CallbackBroadcastMessageExpire )
382+
383+ switch i , err := srv .args .Encoder .Marshal (
384+ NewConnInfoBroadcastMessage (id , srv .local .ConnInfo ())); {
385+ case err != nil :
386+ return err
387+ default :
388+ buf := bytes .NewBuffer (nil )
389+ defer buf .Reset ()
390+
391+ _ , _ = buf .Write (callbackBroadcastMessageHeaderPrefix )
392+ _ , _ = buf .Write (i )
393+
394+ srv .Broadcast2 (NewBroadcast (buf .Bytes (), id , notifych ))
395+ }
396+
397+ return nil
398+ }
399+
355400func (srv * Memberlist ) CallbackBroadcastHandler () quicstreamheader.Handler [CallbackBroadcastMessageHeader ] {
356401 var sg singleflight.Group
357402
0 commit comments