| 890 | } |
| 891 | |
| 892 | func (s *Server) subscribe(ctx context.Context, req *SubscribeRequest) (*emptyResult, error) { |
| 893 | if s.opts.SubscribeHandler == nil { |
| 894 | return nil, fmt.Errorf("%w: server does not support resource subscriptions", jsonrpc2.ErrMethodNotFound) |
| 895 | } |
| 896 | if err := s.opts.SubscribeHandler(ctx, req); err != nil { |
| 897 | return nil, err |
| 898 | } |
| 899 | |
| 900 | s.mu.Lock() |
| 901 | defer s.mu.Unlock() |
| 902 | if s.resourceSubscriptions[req.Params.URI] == nil { |
| 903 | s.resourceSubscriptions[req.Params.URI] = make(map[*ServerSession]bool) |
| 904 | } |
| 905 | s.resourceSubscriptions[req.Params.URI][req.Session] = true |
| 906 | s.opts.Logger.Info("resource subscribed", "uri", req.Params.URI, "session_id", req.Session.ID()) |
| 907 | |
| 908 | return &emptyResult{}, nil |
| 909 | } |
| 910 | |
| 911 | func (s *Server) unsubscribe(ctx context.Context, req *UnsubscribeRequest) (*emptyResult, error) { |
| 912 | if s.opts.UnsubscribeHandler == nil { |