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

Function NewClientService

tailnet/service.go:77–108  ·  view source on GitHub ↗

NewClientService returns a ClientService based on the given Coordinator pointer. The pointer is loaded on each processed connection.

(options ClientServiceOptions)

Source from the content-addressed store, hash-verified

75// NewClientService returns a ClientService based on the given Coordinator pointer. The pointer is
76// loaded on each processed connection.
77func NewClientService(options ClientServiceOptions) (
78 *ClientService, error,
79) {
80 s := &ClientService{Logger: options.Logger, CoordPtr: options.CoordPtr}
81 mux := drpcmux.New()
82 drpcService := &DRPCService{
83 CoordPtr: options.CoordPtr,
84 Logger: options.Logger,
85 DerpMapUpdateFrequency: options.DERPMapUpdateFrequency,
86 DerpMapFn: options.DERPMapFn,
87 NetworkTelemetryHandler: options.NetworkTelemetryHandler,
88 ResumeTokenProvider: options.ResumeTokenProvider,
89 WorkspaceUpdatesProvider: options.WorkspaceUpdatesProvider,
90 }
91 err := proto.DRPCRegisterTailnet(mux, drpcService)
92 if err != nil {
93 return nil, xerrors.Errorf("register DRPC service: %w", err)
94 }
95 server := drpcserver.NewWithOptions(mux, drpcserver.Options{
96 Manager: drpcsdk.DefaultDRPCOptions(nil),
97 Log: func(err error) {
98 if xerrors.Is(err, io.EOF) ||
99 xerrors.Is(err, context.Canceled) ||
100 xerrors.Is(err, context.DeadlineExceeded) {
101 return
102 }
103 options.Logger.Debug(context.Background(), "drpc server error", slog.Error(err))
104 },
105 })
106 s.drpc = server
107 return s, nil
108}
109
110func (s *ClientService) ServeClient(ctx context.Context, version string, conn net.Conn, streamID StreamID) error {
111 major, _, err := apiversion.Parse(version)

Calls 6

DRPCRegisterTailnetFunction · 0.92
DefaultDRPCOptionsFunction · 0.92
NewMethod · 0.65
ErrorfMethod · 0.45
IsMethod · 0.45
ErrorMethod · 0.45