@@ -564,6 +564,34 @@ func (s *ClientSession) SetClient(client *Client) *Client {
564564 return prev
565565}
566566
567+ func (s * ClientSession ) sendOffer (client McuClient , sender string , streamType string , offer map [string ]interface {}) {
568+ offer_message := & AnswerOfferMessage {
569+ To : s .PublicId (),
570+ From : sender ,
571+ Type : "offer" ,
572+ RoomType : streamType ,
573+ Payload : offer ,
574+ Update : true ,
575+ }
576+ offer_data , err := json .Marshal (offer_message )
577+ if err != nil {
578+ log .Println ("Could not serialize offer" , offer_message , err )
579+ return
580+ }
581+ response_message := & ServerMessage {
582+ Type : "message" ,
583+ Message : & MessageServerMessage {
584+ Sender : & MessageServerMessageSender {
585+ Type : "session" ,
586+ SessionId : sender ,
587+ },
588+ Data : (* json .RawMessage )(& offer_data ),
589+ },
590+ }
591+
592+ s .sendMessageUnlocked (response_message )
593+ }
594+
567595func (s * ClientSession ) sendCandidate (client McuClient , sender string , streamType string , candidate interface {}) {
568596 candidate_message := & AnswerOfferMessage {
569597 To : s .PublicId (),
@@ -629,6 +657,18 @@ func (s *ClientSession) SendMessages(messages []*ServerMessage) bool {
629657 return true
630658}
631659
660+ func (s * ClientSession ) OnUpdateOffer (client McuClient , offer map [string ]interface {}) {
661+ s .mu .Lock ()
662+ defer s .mu .Unlock ()
663+
664+ for _ , sub := range s .subscribers {
665+ if sub .Id () == client .Id () {
666+ s .sendOffer (client , sub .Publisher (), client .StreamType (), offer )
667+ return
668+ }
669+ }
670+ }
671+
632672func (s * ClientSession ) OnIceCandidate (client McuClient , candidate interface {}) {
633673 s .mu .Lock ()
634674 defer s .mu .Unlock ()
0 commit comments