This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
config "blazing/modules/config/service"
|
||||
@@ -20,6 +21,18 @@ type ServerHandler struct{}
|
||||
|
||||
const kickForwardTimeout = 3 * time.Second
|
||||
|
||||
// A 服强关,留下僵尸在线状态:B 服可以通过 login 清理后登录。
|
||||
// login 服不可用:B 服不会放行,仍提示系统忙。
|
||||
func isDisconnectedLogicReverseClientError(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
}
|
||||
errText := err.Error()
|
||||
return strings.Contains(errText, "websocket routine exiting") ||
|
||||
strings.Contains(errText, "sendRequest failed") ||
|
||||
strings.Contains(errText, "closed out channel")
|
||||
}
|
||||
|
||||
// 实现踢人
|
||||
func (*ServerHandler) Kick(_ context.Context, userid uint32) error {
|
||||
useid1, err := share.ShareManager.GetUserOnline(userid)
|
||||
@@ -57,6 +70,11 @@ func (*ServerHandler) Kick(_ context.Context, userid uint32) error {
|
||||
cool.DeleteClientOnly(useid2)
|
||||
return nil
|
||||
}
|
||||
if isDisconnectedLogicReverseClientError(callErr) {
|
||||
_ = share.ShareManager.DeleteUserOnline(userid)
|
||||
cool.DeleteClientOnly(useid2)
|
||||
return nil
|
||||
}
|
||||
|
||||
// 仍在线则返回失败,不按成功处理
|
||||
return callErr
|
||||
|
||||
Reference in New Issue
Block a user