| 122 | } |
| 123 | |
| 124 | func (s *session) send(ctx context.Context, msg Message) error { |
| 125 | select { |
| 126 | case <-s.closed: |
| 127 | return errClosed |
| 128 | default: |
| 129 | } |
| 130 | s.writeMutex.Lock() |
| 131 | defer s.writeMutex.Unlock() |
| 132 | if err := s.conn.SetWriteDeadline(time.Now().Add(writeTimeout)); err != nil { |
| 133 | return fmt.Errorf("set write deadline: %w", err) |
| 134 | } |
| 135 | if err := s.conn.WriteJSON(msg); err != nil { |
| 136 | return fmt.Errorf("write json: %w", err) |
| 137 | } |
| 138 | return nil |
| 139 | } |
| 140 | |
| 141 | func (s *session) request(ctx context.Context, msg Message) (<-chan Message, error) { |
| 142 | if msg.ID == "" { |