diff options
author | Alexander Kiryukhin <a.kiryukhin@mail.ru> | 2022-01-31 20:17:31 +0300 |
---|---|---|
committer | Alexander Kiryukhin <a.kiryukhin@mail.ru> | 2022-01-31 20:25:19 +0300 |
commit | 4cf58de9bb7b109dddbc80adefe52cdf61328d0d (patch) | |
tree | dbc4c46eb64672e077305aebbe694acd1acf4828 /http/server.go | |
parent | 35fee8155bb6835d372c364ef721077b0dcb9d38 (diff) |
Small refactoring
Diffstat (limited to 'http/server.go')
-rw-r--r-- | http/server.go | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/http/server.go b/http/server.go new file mode 100644 index 0000000..5fca66a --- /dev/null +++ b/http/server.go @@ -0,0 +1,33 @@ +package http + +import ( + "bufio" + "net/http" + + "github.com/neonxp/jsonrpc2/rpc" +) + +type Server struct { + *rpc.RpcServer +} + +func New() *Server { + return &Server{RpcServer: rpc.New()} +} + +func (r *Server) ServeHTTP(writer http.ResponseWriter, request *http.Request) { + writer.Header().Set("Content-Type", "application/json") + reader := bufio.NewReader(request.Body) + defer request.Body.Close() + firstByte, err := reader.Peek(1) + if err != nil { + r.Logger.Logf("Can't read body: %v", err) + rpc.WriteError(rpc.ErrCodeParseError, writer) + return + } + if string(firstByte) == "[" { + r.BatchRequest(request.Context(), reader, writer) + return + } + r.SingleRequest(request.Context(), reader, writer) +} |