Error handling
This commit is contained in:
parent
671e711f19
commit
927e99c530
@ -186,7 +186,8 @@ func (c *client) onMessageReceived(messageType int, r io.Reader) {
|
|||||||
grpcClient := grpcPool.(serverGrpc.OverflowApiServerClient)
|
grpcClient := grpcPool.(serverGrpc.OverflowApiServerClient)
|
||||||
out, err := grpcClient.Exec(context.Background(), si)
|
out, err := grpcClient.Exec(context.Background(), si)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.writeError(req, NewError(E_SERVER, err, err))
|
c.writeError(req, NewGrpcError(err))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c.writeResult(req, out.Result)
|
c.writeResult(req, out.Result)
|
||||||
|
@ -3,16 +3,21 @@ package server
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
|
grpcCodes "google.golang.org/grpc/codes"
|
||||||
|
grpcStatus "google.golang.org/grpc/status"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ErrorCode int
|
type ErrorCode int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
E_RUNTIME ErrorCode = -33000
|
||||||
E_PARSE ErrorCode = -32700
|
E_PARSE ErrorCode = -32700
|
||||||
E_INVALID_REQ ErrorCode = -32600
|
E_INVALID_REQ ErrorCode = -32600
|
||||||
E_NOT_FOUND_METHOD ErrorCode = -32601
|
E_NOT_FOUND_METHOD ErrorCode = -32601
|
||||||
E_INVALID_PARAMS ErrorCode = -32602
|
E_INVALID_PARAMS ErrorCode = -32602
|
||||||
E_INTERNAL ErrorCode = -32603
|
E_INTERNAL ErrorCode = -32603
|
||||||
|
// -32000 ~ -32099
|
||||||
E_SERVER ErrorCode = -32000
|
E_SERVER ErrorCode = -32000
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -48,3 +53,34 @@ func NewError(code ErrorCode, err error, data interface{}) *Error {
|
|||||||
}
|
}
|
||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewGrpcError(err error) *Error {
|
||||||
|
resultStatus, ok := grpcStatus.FromError(err)
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var code ErrorCode
|
||||||
|
|
||||||
|
switch resultStatus.Code() {
|
||||||
|
case grpcCodes.Unknown:
|
||||||
|
code = E_RUNTIME
|
||||||
|
case grpcCodes.InvalidArgument:
|
||||||
|
code = E_INVALID_PARAMS
|
||||||
|
case grpcCodes.Internal:
|
||||||
|
code = E_INTERNAL
|
||||||
|
case grpcCodes.Unimplemented:
|
||||||
|
code = E_NOT_FOUND_METHOD
|
||||||
|
case grpcCodes.Unavailable:
|
||||||
|
code = E_NOT_FOUND_METHOD
|
||||||
|
default:
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
e := &Error{
|
||||||
|
Code: code,
|
||||||
|
Message: resultStatus.Message(),
|
||||||
|
Data: nil,
|
||||||
|
}
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user