Merge pull request #4 from neonxp:issue_3

Fix issue #3
This commit is contained in:
Alexander Kiryukhin 2021-02-14 13:23:10 +03:00 committed by GitHub
commit c31a53b6a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 16 additions and 4 deletions

3
api.go
View file

@ -161,6 +161,9 @@ func (a *Api) getUpdates(limit int, timeout int, marker int64, types []string) (
} }
body, err := a.client.request(http.MethodGet, "updates", values, nil) body, err := a.client.request(http.MethodGet, "updates", values, nil)
if err != nil { if err != nil {
if err == errLongPollTimeout {
return result, nil
}
return result, err return result, err
} }
defer func() { defer func() {

View file

@ -3,6 +3,7 @@ package tamtam
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"io" "io"
"net/http" "net/http"
"net/url" "net/url"
@ -10,6 +11,10 @@ import (
"github.com/neonxp/tamtam/schemes" "github.com/neonxp/tamtam/schemes"
) )
var (
errLongPollTimeout = errors.New("timeout")
)
type client struct { type client struct {
key string key string
version string version string
@ -44,7 +49,7 @@ func (cl *client) requestReader(method, path string, query url.Values, body io.R
err, ok := err.(*url.Error) err, ok := err.(*url.Error)
if ok { if ok {
if err.Timeout() { if err.Timeout() {
return nil, nil return nil, errLongPollTimeout
} }
} }
return nil, err return nil, err

View file

@ -13,6 +13,7 @@ import (
"os/signal" "os/signal"
"github.com/neonxp/tamtam" "github.com/neonxp/tamtam"
"github.com/neonxp/tamtam/schemes"
) )
func main() { func main() {
@ -28,13 +29,15 @@ func main() {
for upd := range api.GetUpdates(ctx) { for upd := range api.GetUpdates(ctx) {
log.Printf("Received: %#v", upd) log.Printf("Received: %#v", upd)
switch upd := upd.(type) { switch upd := upd.(type) {
case *tamtam.MessageCreatedUpdate: case *schemes.MessageCreatedUpdate:
err := api.Messages.Send( err := api.Messages.Send(
tamtam.NewMessage(). tamtam.NewMessage().
SetUser(upd.Message.Sender.UserId). SetUser(upd.Message.Sender.UserId).
SetText(fmt.Sprintf("Hello, %s! Your message: %s", upd.Message.Sender.Name, upd.Message.Body.Text)), SetText(fmt.Sprintf("Hello, %s! Your message: %s", upd.Message.Sender.Name, upd.Message.Body.Text)),
) )
log.Printf("Answer: %#v %#v", res, err) if err != nil {
log.Printf("Error: %#v", err)
}
default: default:
log.Printf("Unknown type: %#v", upd) log.Printf("Unknown type: %#v", upd)
} }

View file

@ -12,6 +12,7 @@ import (
"os" "os"
"github.com/neonxp/tamtam" "github.com/neonxp/tamtam"
"github.com/neonxp/tamtam/schemes"
) )
func main() { func main() {
@ -38,7 +39,7 @@ func main() {
upd := <-ch upd := <-ch
log.Printf("Received: %#v", upd) log.Printf("Received: %#v", upd)
switch upd := upd.(type) { switch upd := upd.(type) {
case tamtam.MessageCreatedUpdate: case *schemes.MessageCreatedUpdate:
err := api.Messages.Send( err := api.Messages.Send(
tamtam.NewMessage(). tamtam.NewMessage().
SetUser(upd.Message.Sender.UserId). SetUser(upd.Message.Sender.UserId).