use SKIP instead of LAST for fetching messages after polling

This commit is contained in:
Lobo 2025-10-12 17:43:06 -03:00
parent d69f375a57
commit 7d28b3b3e0
2 changed files with 42 additions and 2 deletions

View file

@ -55,6 +55,38 @@ func (app *App) Poll(since int) (num int, err error) {
return num, nil return num, nil
} }
func (app *App) Skip(since int) (num int, err error) {
if _, err := fmt.Fprintf(app.conn, "SKIP %d\n", since); err != nil {
return 0, err
}
if !app.scanner.Scan() {
return 0, app.scanner.Err()
}
num, err = strconv.Atoi(app.scanner.Text())
if err != nil {
return 0, err
}
for range num {
if !app.scanner.Scan() {
return 0, err
}
app.incoming <- Message(app.scanner.Text())
}
if !app.scanner.Scan() {
return 0, app.scanner.Err()
}
last, err := strconv.Atoi(app.scanner.Text())
if err != nil {
return 0, err
}
app.incoming <- Last(last)
return num, nil
}
func (app *App) Last(n int) (num int, err error) { func (app *App) Last(n int) (num int, err error) {
if n == 0 { if n == 0 {
return 0, nil return 0, nil

View file

@ -30,7 +30,11 @@ func (p Poll) HandleOutgoing(app *App) error {
if err != nil { if err != nil {
return err return err
} }
num, err = app.Last(num) if num == 0 {
return nil
}
num, err = app.Skip(app.last)
if err != nil { if err != nil {
return err return err
} }
@ -48,7 +52,11 @@ func (p ManualPoll) HandleOutgoing(app *App) error {
return err return err
} }
app.incoming <- ManualPoll(num) app.incoming <- ManualPoll(num)
num, err = app.Last(num) if num == 0 {
return nil
}
num, err = app.Skip(app.last)
if err != nil { if err != nil {
return err return err
} }