@@ -19,7 +19,6 @@ package rpc
1919import (
2020 "context"
2121 "encoding/json"
22- "fmt"
2322 "reflect"
2423 "strconv"
2524 "strings"
@@ -173,7 +172,9 @@ func (h *handler) handleBatch(msgs []*jsonrpcMessage, stream *jsoniter.Stream) {
173172 if cb != nil && cb .streamable { // cb == nil: means no such method and this case is thread-safe
174173 batchStream := jsoniter .NewStream (jsoniter .ConfigDefault , nil , 4096 )
175174 response = h .handleCallMsg (cp , calls [i ], batchStream )
176- writeToStream (batchStream .Buffer ())
175+ if response == nil {
176+ writeToStream (batchStream .Buffer ())
177+ }
177178 } else {
178179 response = h .handleCallMsg (cp , calls [i ], stream )
179180 }
@@ -489,31 +490,34 @@ func (h *handler) runMethod(ctx context.Context, msg *jsonrpcMessage, callb *cal
489490 stream .WriteObjectField ("result" )
490491 _ , err := callb .call (ctx , msg .Method , args , stream )
491492 if err != nil {
492- stream .WriteMore ()
493- stream .WriteObjectField ("error" )
494- stream .WriteObjectStart ()
495- stream .WriteObjectField ("code" )
496- ec , ok := err .(Error )
497- if ok {
498- stream .WriteInt (ec .ErrorCode ())
499- } else {
500- stream .WriteInt (defaultErrorCode )
501- }
502- stream .WriteMore ()
503- stream .WriteObjectField ("message" )
504- stream .WriteString (fmt .Sprintf ("%v" , err ))
505- de , ok := err .(DataError )
506- if ok {
493+ return msg .errorResponse (err )
494+ /*
507495 stream.WriteMore()
508- stream .WriteObjectField ("data" )
509- data , derr := json .Marshal (de .ErrorData ())
510- if derr == nil {
511- stream .Write (data )
496+ stream.WriteObjectField("error")
497+ stream.WriteObjectStart()
498+ stream.WriteObjectField("code")
499+ ec, ok := err.(Error)
500+ if ok {
501+ stream.WriteInt(ec.ErrorCode())
512502 } else {
513- stream .WriteString ( fmt . Sprintf ( "%v" , derr ) )
503+ stream.WriteInt(defaultErrorCode )
514504 }
515- }
516- stream .WriteObjectEnd ()
505+ stream.WriteMore()
506+ stream.WriteObjectField("message")
507+ stream.WriteString(fmt.Sprintf("%v", err))
508+ de, ok := err.(DataError)
509+ if ok {
510+ stream.WriteMore()
511+ stream.WriteObjectField("data")
512+ data, derr := json.Marshal(de.ErrorData())
513+ if derr == nil {
514+ stream.Write(data)
515+ } else {
516+ stream.WriteString(fmt.Sprintf("%v", derr))
517+ }
518+ }
519+ stream.WriteObjectEnd()
520+ */
517521 }
518522 stream .WriteObjectEnd ()
519523 stream .Flush ()
0 commit comments