85 lines
1.8 KiB
Go
85 lines
1.8 KiB
Go
package uniss
|
|
|
|
import (
|
|
"bytes"
|
|
"dashboard/dao/sqldb"
|
|
"dashboard/models"
|
|
"dashboard/pkg/swarm"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type httpClientHandler struct {
|
|
swarm *swarm.Swarm[*models.UnisHttpClientRequest]
|
|
httpC chan *models.UnisHttpClientResponse
|
|
client *http.Client
|
|
}
|
|
|
|
func newhttpClientHandle(clients int) *httpClientHandler {
|
|
res := new(httpClientHandler)
|
|
res.swarm = swarm.NewSwarm(clients, res.doRequest, swarm.WithLog(zap.NewStdLog(log.Logger)))
|
|
res.httpC = make(chan *models.UnisHttpClientResponse)
|
|
res.client = http.DefaultClient
|
|
|
|
return res
|
|
}
|
|
|
|
// cald by mainthred
|
|
func (c *httpClientHandler) curl(msg *models.UnisHttpClientRequest) {
|
|
c.swarm.Submit(msg)
|
|
}
|
|
|
|
// cald by mainthred
|
|
func (c *httpClientHandler) httpClientHandle(msg *models.UnisHttpClientResponse) {
|
|
fmt.Println(string(msg.Msg.([]byte)))
|
|
}
|
|
|
|
// Note cald by swarm goroutines
|
|
func (c *httpClientHandler) doRequest(req *models.UnisHttpClientRequest) error {
|
|
body, err := json.Marshal(req.Msg)
|
|
fmt.Println(string(body), err)
|
|
|
|
reqs, err := http.NewRequest(req.Methord, req.Url, bytes.NewReader(body))
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return err
|
|
}
|
|
|
|
c.client.Timeout = time.Second
|
|
|
|
reqs.Header.Add("Content-type", "application/json;charset=utf-8")
|
|
reqs.Header.Add("User-Agent", "avcnetRuntime/0.0.1")
|
|
|
|
resp, err := c.client.Do(reqs)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
msg, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := sqldb.ResFulDataStore(req.Methord, req.Url, string(body), string(msg), 0); err != nil {
|
|
fmt.Println(err)
|
|
return err
|
|
}
|
|
|
|
response := &models.UnisHttpClientResponse{
|
|
Id: req.Id,
|
|
Methord: req.Methord,
|
|
Msg: msg,
|
|
}
|
|
|
|
c.httpC <- response
|
|
|
|
return nil
|
|
}
|