mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-10-31 18:16:00 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package utils
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| 	"io"
 | |
| 	"net/http"
 | |
| 
 | |
| 	. "github.com/mickael-kerjean/filestash/server/common"
 | |
| 	. "github.com/mickael-kerjean/filestash/server/plugin/plg_handler_mcp/types"
 | |
| )
 | |
| 
 | |
| func SendMessage(w io.Writer, requestID uint64, response any) {
 | |
| 	b, err := json.Marshal(JSONRPCResponse{
 | |
| 		JSONRPC: "2.0",
 | |
| 		ID:      requestID,
 | |
| 		Result:  &response,
 | |
| 	})
 | |
| 	if err != nil {
 | |
| 		SendError(w, requestID, JSONRPCError{
 | |
| 			Code:    http.StatusInternalServerError,
 | |
| 			Message: err.Error(),
 | |
| 		})
 | |
| 	}
 | |
| 	fmt.Fprintf(w, "event: message\ndata: %s\n\n", string(b))
 | |
| 	w.(http.Flusher).Flush()
 | |
| }
 | |
| 
 | |
| func SendPing(w io.Writer, requestID uint64) {
 | |
| 	b, err := json.Marshal(JSONRPCRequest{
 | |
| 		JSONRPC: "2.0",
 | |
| 		ID:      requestID,
 | |
| 		Method:  "ping",
 | |
| 	})
 | |
| 	if err != nil {
 | |
| 		SendError(w, requestID, JSONRPCError{
 | |
| 			Code:    http.StatusInternalServerError,
 | |
| 			Message: err.Error(),
 | |
| 		})
 | |
| 	}
 | |
| 	fmt.Fprintf(w, "event: message\ndata: %s\n\n", string(b))
 | |
| 	w.(http.Flusher).Flush()
 | |
| }
 | |
| 
 | |
| func SendMethod(w io.Writer, requestID uint64, method string, args ...map[string]any) {
 | |
| 	var params map[string]any
 | |
| 	if len(args) == 1 {
 | |
| 		params = args[0]
 | |
| 	}
 | |
| 
 | |
| 	b, err := json.Marshal(JSONRPCMethod{
 | |
| 		JSONRPC: "2.0",
 | |
| 		Method:  method,
 | |
| 		Params:  params,
 | |
| 	})
 | |
| 	if err != nil {
 | |
| 		SendError(w, requestID, JSONRPCError{
 | |
| 			Code:    http.StatusInternalServerError,
 | |
| 			Message: err.Error(),
 | |
| 		})
 | |
| 	}
 | |
| 	fmt.Fprintf(w, "event: message\ndata: %s\n\n", string(b))
 | |
| 	w.(http.Flusher).Flush()
 | |
| }
 | |
| 
 | |
| func SendError(w io.Writer, requestID uint64, d error) {
 | |
| 	var rpcErr JSONRPCError
 | |
| 	switch v := d.(type) {
 | |
| 	case JSONRPCError:
 | |
| 		rpcErr = v
 | |
| 	case AppError:
 | |
| 		rpcErr = JSONRPCError{
 | |
| 			Code:    v.Status(),
 | |
| 			Message: v.Error(),
 | |
| 		}
 | |
| 	default:
 | |
| 		rpcErr = JSONRPCError{
 | |
| 			Code:    http.StatusInternalServerError,
 | |
| 			Message: d.Error(),
 | |
| 		}
 | |
| 	}
 | |
| 	b, err := json.Marshal(JSONRPCResponse{
 | |
| 		JSONRPC: "2.0",
 | |
| 		ID:      requestID,
 | |
| 		Error:   &rpcErr,
 | |
| 	})
 | |
| 	if err != nil {
 | |
| 		fmt.Fprintf(w, "event: message\ndata: %s\n\n", string(`nil`))
 | |
| 	} else {
 | |
| 		fmt.Fprintf(w, "event: message\ndata: %s\n\n", string(b))
 | |
| 	}
 | |
| 	w.(http.Flusher).Flush()
 | |
| }
 | 
