From 621a7015cc96d99dd81165b22add5b76c36423a3 Mon Sep 17 00:00:00 2001 From: Eric McCaleb Date: Mon, 27 Jan 2025 11:27:25 -0600 Subject: [PATCH] [#63] Fix HTTP transport by removing duplication of base transport --- transport/http/http.go | 51 ++++-------------------------------------- 1 file changed, 4 insertions(+), 47 deletions(-) diff --git a/transport/http/http.go b/transport/http/http.go index 570ae1b..51e6c19 100644 --- a/transport/http/http.go +++ b/transport/http/http.go @@ -5,22 +5,14 @@ import ( "encoding/json" "fmt" "net/http" - "sync" - - "github.com/metoro-io/mcp-golang/transport" ) // HTTPTransport implements a stateless HTTP transport for MCP type HTTPTransport struct { *baseTransport - server *http.Server - endpoint string - messageHandler func(ctx context.Context, message *transport.BaseJsonRpcMessage) - errorHandler func(error) - closeHandler func() - mu sync.RWMutex - addr string - responseMap map[int64]chan *transport.BaseJsonRpcMessage + server *http.Server + endpoint string + addr string } // NewHTTPTransport creates a new HTTP transport that listens on the specified endpoint @@ -29,7 +21,6 @@ func NewHTTPTransport(endpoint string) *HTTPTransport { baseTransport: newBaseTransport(), endpoint: endpoint, addr: ":8080", // Default port - responseMap: make(map[int64]chan *transport.BaseJsonRpcMessage), } } @@ -52,17 +43,6 @@ func (t *HTTPTransport) Start(ctx context.Context) error { return t.server.ListenAndServe() } -// Send implements Transport.Send -func (t *HTTPTransport) Send(ctx context.Context, message *transport.BaseJsonRpcMessage) error { - key := message.JsonRpcResponse.Id - responseChannel := t.responseMap[int64(key)] - if responseChannel == nil { - return fmt.Errorf("no response channel found for key: %d", key) - } - responseChannel <- message - return nil -} - // Close implements Transport.Close func (t *HTTPTransport) Close() error { if t.server != nil { @@ -70,31 +50,8 @@ func (t *HTTPTransport) Close() error { return err } } - if t.closeHandler != nil { - t.closeHandler() - } - return nil -} - -// SetCloseHandler implements Transport.SetCloseHandler -func (t *HTTPTransport) SetCloseHandler(handler func()) { - t.mu.Lock() - defer t.mu.Unlock() - t.closeHandler = handler -} - -// SetErrorHandler implements Transport.SetErrorHandler -func (t *HTTPTransport) SetErrorHandler(handler func(error)) { - t.mu.Lock() - defer t.mu.Unlock() - t.errorHandler = handler -} -// SetMessageHandler implements Transport.SetMessageHandler -func (t *HTTPTransport) SetMessageHandler(handler func(ctx context.Context, message *transport.BaseJsonRpcMessage)) { - t.mu.Lock() - defer t.mu.Unlock() - t.messageHandler = handler + return t.baseTransport.Close() } func (t *HTTPTransport) handleRequest(w http.ResponseWriter, r *http.Request) {