MCPcopy Index your code
hub / github.com/coder/coder / StreamDERPMaps

Method StreamDERPMaps

tailnet/service.go:156–185  ·  view source on GitHub ↗
(_ *proto.StreamDERPMapsRequest, stream proto.DRPCTailnet_StreamDERPMapsStream)

Source from the content-addressed store, hash-verified

154}
155
156func (s *DRPCService) StreamDERPMaps(_ *proto.StreamDERPMapsRequest, stream proto.DRPCTailnet_StreamDERPMapsStream) error {
157 defer stream.Close()
158
159 ticker := time.NewTicker(s.DerpMapUpdateFrequency)
160 defer ticker.Stop()
161
162 var lastDERPMap *tailcfg.DERPMap
163 for {
164 derpMap := s.DerpMapFn()
165 if derpMap == nil {
166 // in testing, we send nil to close the stream.
167 return io.EOF
168 }
169 if lastDERPMap == nil || !CompareDERPMaps(lastDERPMap, derpMap) {
170 protoDERPMap := DERPMapToProto(derpMap)
171 err := stream.Send(protoDERPMap)
172 if err != nil {
173 return xerrors.Errorf("send derp map: %w", err)
174 }
175 lastDERPMap = derpMap
176 }
177
178 ticker.Reset(s.DerpMapUpdateFrequency)
179 select {
180 case <-stream.Context().Done():
181 return nil
182 case <-ticker.C:
183 }
184 }
185}
186
187func (s *DRPCService) RefreshResumeToken(ctx context.Context, _ *proto.RefreshResumeTokenRequest) (*proto.RefreshResumeTokenResponse, error) {
188 streamID, ok := ctx.Value(streamIDContextKey{}).(StreamID)

Callers

nothing calls this directly

Calls 9

CompareDERPMapsFunction · 0.85
DERPMapToProtoFunction · 0.85
CloseMethod · 0.65
StopMethod · 0.65
SendMethod · 0.65
ResetMethod · 0.65
ContextMethod · 0.65
ErrorfMethod · 0.45
DoneMethod · 0.45

Tested by

no test coverage detected