support client extra info (#13)

* feat(#extras) : add client extra info
* feat(#extras) : add host interface

---------

Co-authored-by: mike.wq <mike.wq@alibaba-inc.com>
This commit is contained in:
qwangseu 2023-11-17 11:44:29 +08:00 committed by GitHub
parent a561b39a6d
commit aab862d51f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 30 additions and 6 deletions

View File

@ -36,6 +36,8 @@ type StreamClient struct {
conn *websocket.Conn conn *websocket.Conn
sessionId string sessionId string
mutex sync.Mutex mutex sync.Mutex
extras map[string]string
openApiHost string
} }
func NewStreamClient(options ...ClientOption) *StreamClient { func NewStreamClient(options ...ClientOption) *StreamClient {
@ -276,6 +278,7 @@ func (cli *StreamClient) GetConnectionEndpoint(ctx context.Context) (*payload.Co
ClientSecret: cli.AppCredential.ClientSecret, ClientSecret: cli.AppCredential.ClientSecret,
UserAgent: cli.UserAgent.UserAgent, UserAgent: cli.UserAgent.UserAgent,
Subscriptions: make([]*payload.SubscriptionModel, 0), Subscriptions: make([]*payload.SubscriptionModel, 0),
Extras: cli.extras,
} }
if localIp, err := utils.GetFirstLanIP(); err == nil { if localIp, err := utils.GetFirstLanIP(); err == nil {
requestModel.LocalIP = localIp requestModel.LocalIP = localIp
@ -292,7 +295,14 @@ func (cli *StreamClient) GetConnectionEndpoint(ctx context.Context) (*payload.Co
requestJsonBody, _ := json.Marshal(requestModel) 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 { if err != nil {
return nil, err return nil, err
} }

View File

@ -41,7 +41,7 @@ type UserAgentConfig struct {
func NewDingtalkGoSDKUserAgent() *UserAgentConfig { func NewDingtalkGoSDKUserAgent() *UserAgentConfig {
return &UserAgentConfig{ return &UserAgentConfig{
UserAgent: "dingtalk-sdk-go/v0.6.1", UserAgent: "dingtalk-sdk-go/v0.6.2",
} }
} }

View File

@ -36,3 +36,15 @@ func WithUserAgent(ua *UserAgentConfig) ClientOption {
c.UserAgent = ua 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
}
}

View File

@ -19,6 +19,7 @@ type ConnectionEndpointRequest struct {
Subscriptions []*SubscriptionModel `json:"subscriptions"` Subscriptions []*SubscriptionModel `json:"subscriptions"`
UserAgent string `json:"ua"` UserAgent string `json:"ua"`
LocalIP string `json:"localIp"` LocalIP string `json:"localIp"`
Extras map[string]string `json:"extras"`
} }
// 长连接接入点参数 // 长连接接入点参数

View File

@ -6,7 +6,8 @@ package utils
*/ */
const ( const (
GetConnectionEndpointAPIUrl = "https://api.dingtalk.com/v1.0/gateway/connections/open" DefaultOpenApiHost = "https://api.dingtalk.com"
GetConnectionEndpointAPIUrl = "/v1.0/gateway/connections/open"
) )
const ( const (