use SKIP instead of LAST for fetching messages after polling
This commit is contained in:
parent
d69f375a57
commit
7d28b3b3e0
2 changed files with 42 additions and 2 deletions
32
command.go
32
command.go
|
|
@ -55,6 +55,38 @@ func (app *App) Poll(since int) (num int, err error) {
|
|||
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) {
|
||||
if n == 0 {
|
||||
return 0, nil
|
||||
|
|
|
|||
12
event.go
12
event.go
|
|
@ -30,7 +30,11 @@ func (p Poll) HandleOutgoing(app *App) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
num, err = app.Last(num)
|
||||
if num == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
num, err = app.Skip(app.last)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -48,7 +52,11 @@ func (p ManualPoll) HandleOutgoing(app *App) error {
|
|||
return err
|
||||
}
|
||||
app.incoming <- ManualPoll(num)
|
||||
num, err = app.Last(num)
|
||||
if num == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
num, err = app.Skip(app.last)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue