You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.7 KiB
71 lines
1.7 KiB
package clientserver |
|
|
|
import ( |
|
"bytes" |
|
"context" |
|
"encoding/json" |
|
"io/ioutil" |
|
"log" |
|
"math" |
|
"net/http" |
|
req_types "sample-choose-ad/cmd/requests_types" |
|
"sync" |
|
"time" |
|
) |
|
|
|
// Make request to partner, born to run as gorutine, 'cuz send partner response into channel |
|
func makeRequest(url string, body *[]byte, response chan<- []req_types.RespImp, wg *sync.WaitGroup) { |
|
defer wg.Done() |
|
|
|
var pResp req_types.SuccesResponse |
|
|
|
c := &http.Client{} |
|
|
|
ctx, cls := context.WithTimeout(context.Background(), time.Duration(200*time.Millisecond)) |
|
defer cls() |
|
|
|
req, _ := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(*body)) |
|
resp, err := c.Do(req) |
|
// not responding or timeout |
|
if err != nil { |
|
log.Println("Error when making request", err) |
|
return |
|
} |
|
defer resp.Body.Close() |
|
|
|
// if response not good |
|
if resp.StatusCode != 200 { |
|
log.Println("Error: status code", resp.StatusCode) |
|
return |
|
} |
|
|
|
b, _ := ioutil.ReadAll(resp.Body) |
|
if err := json.Unmarshal(b, &pResp); err != nil { |
|
log.Println("Error: response unmarshalling", err) |
|
return |
|
} |
|
|
|
response <- pResp.Imp |
|
} |
|
|
|
// Create requset body based in incoming reqest `ir` and return |
|
// `OutgoingRequest` as []byte from marshaled JSON |
|
func constructPartnersRequestBody(ir *req_types.IncomingRequest) []byte { |
|
var outReqBody req_types.OutgoingRequest |
|
|
|
var imps []req_types.Imp |
|
|
|
for _, tile := range ir.Tiles { |
|
minheight := uint(math.Floor(float64(tile.Width) * tile.Ratio)) |
|
imps = append(imps, req_types.Imp{ |
|
Id: tile.Id, |
|
Minwidth: tile.Width, |
|
Minheight: minheight}) |
|
} |
|
|
|
outReqBody.Id = *ir.Id |
|
outReqBody.Imp = imps |
|
outReqBody.Context = ir.Context |
|
t, _ := json.Marshal(outReqBody) |
|
return t |
|
}
|
|
|