Use type uint8 to replace boolean fields in response
This commit is contained in:
parent
b1e7ded874
commit
ff5f211a83
@ -105,7 +105,7 @@ func (c *Client) Call(ctx context.Context, rcvr, method string, arg interface{},
|
||||
c.chMtx.Unlock()
|
||||
|
||||
// If response is an error, return error
|
||||
if resp.IsError {
|
||||
if resp.Type == types.ResponseTypeError {
|
||||
return errors.New(resp.Error)
|
||||
}
|
||||
|
||||
@ -118,7 +118,7 @@ func (c *Client) Call(ctx context.Context, rcvr, method string, arg interface{},
|
||||
retVal := reflect.ValueOf(ret)
|
||||
|
||||
// If response is a channel
|
||||
if resp.IsChannel {
|
||||
if resp.Type == types.ResponseTypeChannel {
|
||||
// If return value is not a channel, return error
|
||||
if retVal.Kind() != reflect.Chan {
|
||||
return ErrReturnNotChannel
|
||||
@ -137,7 +137,7 @@ func (c *Client) Call(ctx context.Context, rcvr, method string, arg interface{},
|
||||
// For every value received from channel
|
||||
for val := range c.chs[chID] {
|
||||
//s := time.Now()
|
||||
if val.ChannelDone {
|
||||
if val.Type == types.ResponseTypeChannelDone {
|
||||
// Close and delete channel
|
||||
c.chMtx.Lock()
|
||||
close(c.chs[chID])
|
||||
|
@ -26,12 +26,18 @@ type Request struct {
|
||||
Arg any
|
||||
}
|
||||
|
||||
type ResponseType uint8
|
||||
|
||||
const (
|
||||
ResponseTypeError ResponseType = iota
|
||||
ResponseTypeChannel
|
||||
ResponseTypeChannelDone
|
||||
)
|
||||
|
||||
// Response represents a response returned by the server
|
||||
type Response struct {
|
||||
Type ResponseType
|
||||
ID string
|
||||
ChannelDone bool
|
||||
IsChannel bool
|
||||
IsError bool
|
||||
Error string
|
||||
Return any
|
||||
}
|
||||
|
@ -312,7 +312,7 @@ func (s *Server) handleConn(c codec.Codec) {
|
||||
// If function has created a channel
|
||||
if ctx.isChannel {
|
||||
// Set IsChannel to true
|
||||
res.IsChannel = true
|
||||
res.Type = types.ResponseTypeChannel
|
||||
// Overwrite return value with channel ID
|
||||
res.Return = ctx.channelID
|
||||
|
||||
@ -342,8 +342,8 @@ func (s *Server) handleConn(c codec.Codec) {
|
||||
|
||||
codecMtx.Lock()
|
||||
c.Encode(types.Response{
|
||||
ID: ctx.channelID,
|
||||
ChannelDone: true,
|
||||
Type: types.ResponseTypeChannelDone,
|
||||
ID: ctx.channelID,
|
||||
})
|
||||
codecMtx.Unlock()
|
||||
}()
|
||||
@ -361,10 +361,10 @@ func (s *Server) handleConn(c codec.Codec) {
|
||||
func (s *Server) sendErr(c codec.Codec, req types.Request, val any, err error) {
|
||||
// Encode error response using codec
|
||||
c.Encode(types.Response{
|
||||
ID: req.ID,
|
||||
IsError: true,
|
||||
Error: err.Error(),
|
||||
Return: val,
|
||||
Type: types.ResponseTypeError,
|
||||
ID: req.ID,
|
||||
Error: err.Error(),
|
||||
Return: val,
|
||||
})
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user