|
- package sdk
-
- import (
- "context"
- "fmt"
- "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/auth"
- "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/request"
- "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/response"
- "net"
- "net/http"
- "runtime"
- "strings"
- "time"
- )
-
- var Version = "0.0.1"
- var defaultConnectTimeout = 5 * time.Second
- var defaultReadTimeout = 10 * time.Second
- var DefaultUserAgent = fmt.Sprintf("GaoreGoSdk (%s;%s) Golang/%s Core/%s", runtime.GOOS, runtime.GOARCH, strings.Trim(runtime.Version(), "go"), Version)
-
- type Client struct {
- Host string
- httpClient *http.Client
- isInsecure bool
- signer *auth.Creditial
- readTimeout time.Duration
- connectTimeout time.Duration
- config *Config
- }
-
- func (client *Client) InitWithOptions(host string, config *Config, creditial auth.Creditial) (err error) {
- client.httpClient = &http.Client{}
-
- if config.Transport != nil {
- client.httpClient.Transport = config.Transport
- } else if config.HttpTransport != nil {
- client.httpClient.Transport = config.HttpTransport
- }
-
- if config.Timeout > 0 {
- client.httpClient.Timeout = config.Timeout
- }
-
- return nil
- }
-
- func (client *Client) InitWithConfig() (config *Config) {
- if client.config != nil {
- return client.config
- } else {
- return NewConfig()
- }
- }
-
- func Timeout(connectTimeout time.Duration) func(ctx context.Context, net, addr string) (c net.Conn, err error) {
- return func(ctx context.Context, network, address string) (c net.Conn, err error) {
- return (&net.Dialer{
- Timeout: connectTimeout,
- DualStack: true,
- }).DialContext(ctx, network, address)
- }
- }
-
- func (client *Client) setTimeOut(request request.AcsRequest) {
- readTimeout, connectTimeout := client.getTimeOut(request)
- client.httpClient.Timeout = readTimeout
- if trans, ok := client.httpClient.Transport.(*http.Transport); ok && trans != nil {
- trans.DialContext = Timeout(connectTimeout)
- client.httpClient.Transport = trans
- } else if client.httpClient.Transport == nil {
- client.httpClient.Transport = &http.Transport{
- DialContext: Timeout(connectTimeout),
- }
- }
- }
-
- func (client *Client) getTimeOut(request request.AcsRequest) (time.Duration, time.Duration) {
- readTimeOut := defaultReadTimeout
- connectTimeOut := defaultConnectTimeout
-
- reqReadTimeout := request.GetReadTimeout()
- reqConnectTimeout := request.GetConnectTimeout()
- if reqReadTimeout != 0*time.Millisecond {
- readTimeOut = reqReadTimeout
- } else if client.readTimeout != 0*time.Microsecond {
- readTimeOut = client.readTimeout
- } else if client.httpClient.Timeout != 0 {
- readTimeOut = client.httpClient.Timeout
- }
-
- if reqConnectTimeout != 0*time.Microsecond {
- connectTimeOut = reqConnectTimeout
- } else if client.connectTimeout != 0*time.Millisecond {
- connectTimeOut = client.connectTimeout
- }
- return readTimeOut, connectTimeOut
- }
-
- func (client *Client) DoAction(request request.AcsRequest, response response.AcsResponse) (err error) {
- return nil
- }
|