mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-11-02 20:23:32 +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()
|
|
}
|