@@ -17,12 +17,14 @@ package signalling
17
17
import (
18
18
"bytes"
19
19
"context"
20
+ "encoding/json"
20
21
"net/http"
21
22
"net/url"
22
23
"runtime"
23
24
24
25
"github.com/livekit/protocol/livekit"
25
26
"github.com/livekit/protocol/logger"
27
+ protosignalling "github.com/livekit/protocol/signalling"
26
28
"google.golang.org/protobuf/proto"
27
29
)
28
30
@@ -36,11 +38,16 @@ type signallingv2 struct {
36
38
signallingUnimplemented
37
39
38
40
params Signallingv2Params
41
+
42
+ signalCache * protosignalling.Signalv2ClientMessageCache
39
43
}
40
44
41
45
func NewSignallingv2 (params Signallingv2Params ) Signalling {
42
46
return & signallingv2 {
43
47
params : params ,
48
+ signalCache : protosignalling .NewSignalv2ClientMessageCache (protosignalling.SignalCacheParams {
49
+ Logger : params .Logger ,
50
+ }),
44
51
}
45
52
}
46
53
@@ -133,12 +140,39 @@ func (s *signallingv2) HTTPRequestForValidate(
133
140
return req , nil
134
141
}
135
142
143
+ func (s * signallingv2 ) DecodeErrorResponse (details []byte ) string {
144
+ var errorDetails struct {
145
+ Error string `json:"error"`
146
+ }
147
+ err := json .Unmarshal (details , & errorDetails )
148
+ if err != nil {
149
+ return string (details )
150
+ }
151
+
152
+ return errorDetails .Error
153
+ }
154
+
136
155
func (s * signallingv2 ) AckMessageId (ackMessageId uint32 ) {
137
- // SIGNALLING-V2-TODO s.signalCache.Clear(ackMessageId)
156
+ s .signalCache .Clear (ackMessageId )
138
157
}
139
158
140
159
func (s * signallingv2 ) SetLastProcessedRemoteMessageId (lastProcessedRemoteMessageId uint32 ) {
141
- // SIGNALLING-V2-TODO s.signalCache.SetLastProcessedRemoteMessageId(lastProcessedRemoteMessageId)
160
+ s .signalCache .SetLastProcessedRemoteMessageId (lastProcessedRemoteMessageId )
161
+ }
162
+
163
+ func (s * signallingv2 ) PendingMessages () proto.Message {
164
+ clientMessages := s .signalCache .GetFromFront ()
165
+ if len (clientMessages ) == 0 {
166
+ return nil
167
+ }
168
+
169
+ return & livekit.Signalv2WireMessage {
170
+ Message : & livekit.Signalv2WireMessage_Envelope {
171
+ Envelope : & livekit.Envelope {
172
+ ClientMessages : clientMessages ,
173
+ },
174
+ },
175
+ }
142
176
}
143
177
144
178
func (s * signallingv2 ) SignalConnectRequest (connectRequest * livekit.ConnectRequest ) proto.Message {
@@ -168,13 +202,20 @@ func (s *signallingv2) SignalSdpAnswer(answer *livekit.SessionDescription) proto
168
202
return s .cacheAndReturnEnvelope (clientMessage )
169
203
}
170
204
205
+ func (s * signallingv2 ) SignalICECandidate (trickle * livekit.TrickleRequest ) proto.Message {
206
+ clientMessage := & livekit.Signalv2ClientMessage {
207
+ Message : & livekit.Signalv2ClientMessage_Trickle {
208
+ Trickle : trickle ,
209
+ },
210
+ }
211
+ return s .cacheAndReturnEnvelope (clientMessage )
212
+ }
213
+
171
214
func (s * signallingv2 ) cacheAndReturnEnvelope (cm * livekit.Signalv2ClientMessage ) proto.Message {
172
- /* SIGNALLING-V2-TODO
173
- sm = s.signalCache.Add(sm)
174
- if sm == nil {
215
+ cm = s .signalCache .Add (cm )
216
+ if cm == nil {
175
217
return nil
176
218
}
177
- */
178
219
179
220
return & livekit.Signalv2WireMessage {
180
221
Message : & livekit.Signalv2WireMessage_Envelope {
0 commit comments