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

Method Transmit

codersdk/agentsdk/agentsdk.go:885–922  ·  view source on GitHub ↗

Transmit will read from the given chan and send events for as long as: * the chan remains open * the context has not been canceled * not timed out * the connection to the receiver remains open

(ctx context.Context, reinitEvents <-chan ReinitializationEvent)

Source from the content-addressed store, hash-verified

883// * not timed out
884// * the connection to the receiver remains open
885func (s *SSEAgentReinitTransmitter) Transmit(ctx context.Context, reinitEvents <-chan ReinitializationEvent) error {
886 select {
887 case <-ctx.Done():
888 return ctx.Err()
889 default:
890 }
891
892 sseSendEvent, sseSenderClosed, err := httpapi.ServerSentEventSender(s.rw, s.r)
893 if err != nil {
894 return xerrors.Errorf("failed to create sse transmitter: %w", err)
895 }
896
897 defer func() {
898 // Block returning until the ServerSentEventSender is closed
899 // to avoid a race condition where we might write or flush to rw after the handler returns.
900 <-sseSenderClosed
901 }()
902
903 for {
904 select {
905 case <-ctx.Done():
906 return ctx.Err()
907 case <-sseSenderClosed:
908 return ErrTransmissionTargetClosed
909 case reinitEvent, ok := <-reinitEvents:
910 if !ok {
911 return ErrTransmissionSourceClosed
912 }
913 err := sseSendEvent(codersdk.ServerSentEvent{
914 Type: codersdk.ServerSentEventTypeData,
915 Data: reinitEvent,
916 })
917 if err != nil {
918 return err
919 }
920 }
921 }
922}
923
924func NewSSEAgentReinitReceiver(r io.ReadCloser) *SSEAgentReinitReceiver {
925 return &SSEAgentReinitReceiver{r: r}

Callers 2

workspaceAgentReinitMethod · 0.95

Calls 4

ServerSentEventSenderFunction · 0.92
ErrMethod · 0.80
DoneMethod · 0.45
ErrorfMethod · 0.45

Tested by 1