Skip to content

Commit

Permalink
calls methods moved to ws client
Browse files Browse the repository at this point in the history
  • Loading branch information
sdfsdhgjkbmnmxc committed Mar 17, 2021
1 parent 396c1c6 commit bd8d759
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 96 deletions.
96 changes: 0 additions & 96 deletions utils.go
Original file line number Diff line number Diff line change
@@ -1,98 +1,2 @@
package tdclient

import (
"fmt"
"log"
"math/rand"

"github.com/pion/webrtc/v2"
"github.com/tada-team/tdproto"
)

func NewPeerConnection(login string, iceServer string) (peerConnection *webrtc.PeerConnection, offer webrtc.SessionDescription, outputTrack *webrtc.Track, err error) {
peerConnection, err = webrtc.NewPeerConnection(webrtc.Configuration{
ICEServers: []webrtc.ICEServer{{
URLs: []string{
iceServer,
},
}},
})
if err != nil {
return nil, offer, nil, fmt.Errorf("%v: NewPeerConnection fail: %v", login, err)
}

mediaEngine := webrtc.MediaEngine{}
mediaEngine.RegisterCodec(webrtc.NewRTPOpusCodec(webrtc.DefaultPayloadTypeOpus, 48000))

// Add codecs
audioCodecs := mediaEngine.GetCodecsByKind(webrtc.RTPCodecTypeAudio)
if len(audioCodecs) == 0 {
return nil, offer, nil, fmt.Errorf("%v: offer contained no video codecs", login)
}
outputTrack, err = peerConnection.NewTrack(audioCodecs[0].PayloadType, rand.Uint32(), "audio", "pion")
if err != nil {
return nil, offer, nil, err
}
if _, err = peerConnection.AddTrack(outputTrack); err != nil {
return nil, offer, nil, err
}

offer, err = peerConnection.CreateOffer(nil)
if err != nil {
return nil, offer, nil, fmt.Errorf("%v: CreateOffer fail: %v", login, err)
}

err = mediaEngine.PopulateFromSDP(offer)
if err != nil {
return nil, offer, nil, err
}

err = peerConnection.SetLocalDescription(offer)
if err != nil {
return nil, offer, nil, fmt.Errorf("%v: SetLocalDescription fail: %v", login, err)
}

//write output if program "hear" something
peerConnection.OnTrack(func(track *webrtc.Track, receiver *webrtc.RTPReceiver) {
log.Printf("%v: got new track, id: %v \n", login, track.ID())
})

return peerConnection, offer, outputTrack, nil
}

func SendCallOffer(c *WsSession, userName string, callJid *tdproto.JID, sdp string) (res webrtc.SessionDescription, err error) {
callOffer := new(tdproto.ClientCallOffer)
callOffer.Name = callOffer.GetName()
callOffer.Params.Jid = *callJid
callOffer.Params.Trickle = false
callOffer.Params.Sdp = sdp
c.Send(callOffer)
log.Printf("%v: OFFER: %v\n", userName, callOffer.String())

callAnswer := new(tdproto.ServerCallAnswer)
err = c.WaitFor(callAnswer)
if err != nil {
return res, fmt.Errorf("%v: server.call.answer fail: %v", userName, err)
}
log.Printf("%v: ANSWER: %v\n", userName, callAnswer.String())

return webrtc.SessionDescription{
Type: webrtc.SDPTypeAnswer,
SDP: callAnswer.Params.JSEP.SDP,
}, nil
}

func SendCallLeave(c *WsSession, userName string, callJid *tdproto.JID) {
callLeave := new(tdproto.ClientCallLeave)
callLeave.Name = callLeave.GetName()
callLeave.Params.Jid = *callJid
callLeave.Params.Reason = ""
c.Send(callLeave)

serverLeaveAnswer := new(tdproto.ServerCallLeave)
if err := c.WaitFor(serverLeaveAnswer); err != nil {
log.Println(fmt.Sprintf("%v: server.call.leave fail: %v", userName, err))
} else {
log.Printf("%v: LEAVE: %v\n", userName, serverLeaveAnswer.String())
}
}
36 changes: 36 additions & 0 deletions ws.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

"github.com/google/uuid"
"github.com/gorilla/websocket"
"github.com/pion/webrtc/v2"
"github.com/pkg/errors"
"github.com/tada-team/tdproto"
"github.com/tada-team/timerpool"
Expand Down Expand Up @@ -236,3 +237,38 @@ func (w WsSession) inboxLoop() {
}
}
}

func (w *WsSession) SendCallOffer(jid tdproto.JID, sdp string) (res webrtc.SessionDescription, err error) {
callOffer := new(tdproto.ClientCallOffer)
callOffer.Name = callOffer.GetName()
callOffer.Params.Jid = jid
callOffer.Params.Trickle = false
callOffer.Params.Sdp = sdp
w.Send(callOffer)

callAnswer := new(tdproto.ServerCallAnswer)
if err := w.WaitFor(callAnswer); err != nil {
return res, err
}

return webrtc.SessionDescription{
Type: webrtc.SDPTypeAnswer,
SDP: callAnswer.Params.JSEP.SDP,
}, nil
}

func (w *WsSession) SendCallLeave(jid tdproto.JID) error {
callLeave := new(tdproto.ClientCallLeave)
callLeave.Name = callLeave.GetName()
callLeave.Params.Jid = jid
callLeave.Params.Reason = ""
w.Send(callLeave)

serverLeaveAnswer := new(tdproto.ServerCallLeave)
if err := w.WaitFor(serverLeaveAnswer); err != nil {
return err
}

return nil
}

0 comments on commit bd8d759

Please sign in to comment.