52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
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
|
|
}
|