fix(gateway): имена событий и resumable-флаг по спецификации §8.3
- ROLE_CREATE/ROLE_UPDATE/ROLE_DELETE вместо GUILD_ROLE_*;
- выдача/снятие роли приходит как MEMBER_UPDATE с полным списком role_ids:
клиент пересчитывает доступные действия сразу после события;
- промах RESUME отдаёт INVALID_SESSION с {"resumable": true} и следом полный
READY — сессия сохраняется, повторный вход не нужен;
- тесты обновлены под новый контракт.
This commit is contained in:
@@ -217,7 +217,14 @@ func (s *Service) readLoop(ctx context.Context, session *clientSession) {
|
||||
// sendInvalidSession сообщает об ошибке идентификации и дожидается отправки
|
||||
// кадра: соединение закрывается сразу после этого (AGENT.md 8.3).
|
||||
func (s *Service) sendInvalidSession(session *clientSession, reason string) {
|
||||
payload, err := frame(OpInvalidSess, map[string]any{"reason": reason})
|
||||
s.sendInvalidSessionResumable(session, reason, false)
|
||||
}
|
||||
|
||||
// sendInvalidSessionResumable отдаёт INVALID_SESSION с признаком resumable:
|
||||
// при true клиент продолжает работу (сервер пришлёт полный READY), при false —
|
||||
// уходит на экран входа.
|
||||
func (s *Service) sendInvalidSessionResumable(session *clientSession, reason string, resumable bool) {
|
||||
payload, err := frame(OpInvalidSess, map[string]any{"reason": reason, "resumable": resumable})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -276,7 +283,10 @@ func (s *Service) handleIdentify(ctx context.Context, session *clientSession, pa
|
||||
s.register(session, authSession.TokenHash)
|
||||
return nil
|
||||
}
|
||||
// Буфер не содержит нужную последовательность: полный READY (AGENT.md 8.3).
|
||||
// Буфер не содержит нужную последовательность: по AGENT.md 8.3 клиенту
|
||||
// сообщаем INVALID_SESSION с признаком resumable и сразу отдаём полный
|
||||
// READY, чтобы состояние восстановилось без повторного входа.
|
||||
s.sendInvalidSessionResumable(session, "resume failed", true)
|
||||
}
|
||||
|
||||
snapshot, err := s.readiness.Build(ctx, user)
|
||||
|
||||
Reference in New Issue
Block a user