From aab862d51fe612c7f7a5c8a5e6c4598d80df287a Mon Sep 17 00:00:00 2001 From: qwangseu <1195974065@qq.com> Date: Fri, 17 Nov 2023 11:44:29 +0800 Subject: [PATCH] support client extra info (#13) * feat(#extras) : add client extra info * feat(#extras) : add host interface --------- Co-authored-by: mike.wq --- client/client.go | 18 ++++++++++++++---- client/config.go | 2 +- client/option.go | 12 ++++++++++++ payload/connection.go | 1 + utils/utils.go | 3 ++- 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/client/client.go b/client/client.go index 247d126..f601de8 100644 --- a/client/client.go +++ b/client/client.go @@ -33,9 +33,11 @@ type StreamClient struct { subscriptions map[string]map[string]handler.IFrameHandler - conn *websocket.Conn - sessionId string - mutex sync.Mutex + conn *websocket.Conn + sessionId string + mutex sync.Mutex + extras map[string]string + openApiHost string } func NewStreamClient(options ...ClientOption) *StreamClient { @@ -276,6 +278,7 @@ func (cli *StreamClient) GetConnectionEndpoint(ctx context.Context) (*payload.Co ClientSecret: cli.AppCredential.ClientSecret, UserAgent: cli.UserAgent.UserAgent, Subscriptions: make([]*payload.SubscriptionModel, 0), + Extras: cli.extras, } if localIp, err := utils.GetFirstLanIP(); err == nil { requestModel.LocalIP = localIp @@ -292,7 +295,14 @@ func (cli *StreamClient) GetConnectionEndpoint(ctx context.Context) (*payload.Co requestJsonBody, _ := json.Marshal(requestModel) - req, err := http.NewRequestWithContext(ctx, http.MethodPost, utils.GetConnectionEndpointAPIUrl, bytes.NewReader(requestJsonBody)) + var targetHost string + if len(cli.openApiHost) == 0 { + targetHost = utils.DefaultOpenApiHost + } else { + targetHost = cli.openApiHost + } + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, targetHost+utils.GetConnectionEndpointAPIUrl, bytes.NewReader(requestJsonBody)) if err != nil { return nil, err } diff --git a/client/config.go b/client/config.go index dd8b5bd..d489504 100644 --- a/client/config.go +++ b/client/config.go @@ -41,7 +41,7 @@ type UserAgentConfig struct { func NewDingtalkGoSDKUserAgent() *UserAgentConfig { return &UserAgentConfig{ - UserAgent: "dingtalk-sdk-go/v0.6.1", + UserAgent: "dingtalk-sdk-go/v0.6.2", } } diff --git a/client/option.go b/client/option.go index 8f4b8c9..f173275 100644 --- a/client/option.go +++ b/client/option.go @@ -36,3 +36,15 @@ func WithUserAgent(ua *UserAgentConfig) ClientOption { c.UserAgent = ua } } + +func WithExtras(extras map[string]string) ClientOption { + return func(c *StreamClient) { + c.extras = extras + } +} + +func WithOpenApiHost(host string) ClientOption { + return func(c *StreamClient) { + c.openApiHost = host + } +} diff --git a/payload/connection.go b/payload/connection.go index ff73113..d85f63c 100644 --- a/payload/connection.go +++ b/payload/connection.go @@ -19,6 +19,7 @@ type ConnectionEndpointRequest struct { Subscriptions []*SubscriptionModel `json:"subscriptions"` UserAgent string `json:"ua"` LocalIP string `json:"localIp"` + Extras map[string]string `json:"extras"` } // 长连接接入点参数 diff --git a/utils/utils.go b/utils/utils.go index 8097ca8..eab0e13 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -6,7 +6,8 @@ package utils */ const ( - GetConnectionEndpointAPIUrl = "https://api.dingtalk.com/v1.0/gateway/connections/open" + DefaultOpenApiHost = "https://api.dingtalk.com" + GetConnectionEndpointAPIUrl = "/v1.0/gateway/connections/open" ) const (