You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
openim-sdk-cpp/go/chao-sdk-core/open_im_sdk/apicb.go

53 lines
1.5 KiB

package open_im_sdk
import (
"context"
"github.com/openimsdk/openim-sdk-core/v3/open_im_sdk_callback"
"github.com/openimsdk/openim-sdk-core/v3/pkg/common"
"github.com/openimsdk/tools/errs"
"github.com/openimsdk/tools/log"
"sync/atomic"
)
type apiErrCallback struct {
loginMgrCh chan common.Cmd2Value
listener open_im_sdk_callback.OnConnListener
tokenExpiredState int32
kickedOfflineState int32
tokenInvalidState int32
}
func (c *apiErrCallback) OnError(ctx context.Context, err error) {
if err == nil {
return
}
codeErr, ok := errs.Unwrap(err).(errs.CodeError)
if !ok {
log.ZError(ctx, "OnError callback not CodeError", err)
return
}
log.ZError(ctx, "OnError callback CodeError", err, "code", codeErr.Code(), "msg", codeErr.Msg(), "detail", codeErr.Detail())
switch codeErr.Code() {
case
errs.TokenExpiredError:
if atomic.CompareAndSwapInt32(&c.tokenExpiredState, 0, 1) {
log.ZError(ctx, "OnUserTokenExpired callback", err)
c.listener.OnUserTokenExpired()
_ = common.TriggerCmdLogOut(ctx, c.loginMgrCh)
}
case
errs.TokenMalformedError,
errs.TokenNotValidYetError,
errs.TokenUnknownError:
if atomic.CompareAndSwapInt32(&c.tokenInvalidState, 0, 1) {
log.ZError(ctx, "OnUserTokenInvalid callback", err)
c.listener.OnUserTokenInvalid(err.Error())
_ = common.TriggerCmdLogOut(ctx, c.loginMgrCh)
}
if atomic.CompareAndSwapInt32(&c.kickedOfflineState, 0, 1) {
log.ZError(ctx, "OnKickedOffline callback", err)
c.listener.OnKickedOffline()
_ = common.TriggerCmdLogOut(ctx, c.loginMgrCh)
}
}
}