go-common/app/job/main/activity/dao/dm/broadcast.go

52 lines
1.1 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package dm
import (
"bytes"
"context"
"encoding/json"
"fmt"
"net/http"
"time"
model "go-common/app/job/main/activity/model/dm"
"go-common/library/log"
)
// Broadcast dm broadcast.
func (d *Dao) Broadcast(c context.Context, dm *model.Broadcast) (err error) {
var (
b []byte
req *http.Request
res struct {
Code int64 `json:"code"`
}
)
url := fmt.Sprintf("%s?cids=%d", d.broadcastURL, dm.RoomID)
for i := 0; i < 50; i++ {
if b, err = json.Marshal(dm); err != nil {
log.Error("json.Marshal(%+v) error(%v)", dm, err)
return
}
req, err = http.NewRequest("POST", url, bytes.NewReader(b))
if err != nil {
log.Error("NewRequest.Do(%d)(%s) error(%v)", dm.RoomID, url, err)
}
req.Header.Set("Content-type", "application/json")
err = d.httpCli.Do(c, req, &res)
if err == nil {
break
}
log.Error("http.Do(%d)(%s) error(%v)", dm.RoomID, url, err)
time.Sleep(50 * time.Millisecond)
}
if err != nil {
log.Error("http.Do(%s) error(%v)", url, err)
return
}
if res.Code != 0 {
log.Error("http.Do(%s) res code(%d)", url, res.Code)
}
return
}