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.
53 lines
1.5 KiB
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)
|
|
}
|
|
}
|
|
}
|
|
|