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
|
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
|
||||||
|
|
|
||||||
12
event.go
12
event.go
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue