From dedb429186e4f4156439e8e6ca0feed0aefce195 Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Mon, 15 Sep 2025 18:56:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E4=B9=89=20ChirpStackTransport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/infra/transport/lora/chirp_stack.go | 52 ++++++++++++++++++++ internal/infra/transport/transport.go | 4 ++ 2 files changed, 56 insertions(+) create mode 100644 internal/infra/transport/lora/chirp_stack.go create mode 100644 internal/infra/transport/transport.go diff --git a/internal/infra/transport/lora/chirp_stack.go b/internal/infra/transport/lora/chirp_stack.go new file mode 100644 index 0000000..8a30b7f --- /dev/null +++ b/internal/infra/transport/lora/chirp_stack.go @@ -0,0 +1,52 @@ +package lora + +import ( + "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" + "github.com/go-openapi/runtime" + httptransport "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" + + "git.huangwc.com/pig/pig-farm-controller/internal/infra/transport/lora/chirp_stack/client" +) + +// ChirpStackConfig 保存连接到 ChirpStack API 所需的配置。 +type ChirpStackConfig struct { + // ServerAddress 是 ChirpStack API 服务器的地址,例如 "localhost:8080"。 + ServerAddress string + // APIKey 是用于认证的 API 密钥。 + APIKey string +} + +// GenerateAPIKey 用于补齐API Key作为请求头时缺失的部分 +func (c ChirpStackConfig) GenerateAPIKey() string { + return "Bearer " + c.APIKey +} + +// ChirpStackTransport 是一个客户端,用于封装与 ChirpStack REST API 的交互。 +type ChirpStackTransport struct { + client *client.ChirpStackRESTAPI + authInfo runtime.ClientAuthInfoWriter + config ChirpStackConfig + + logger *logs.Logger +} + +// NewChirpStackTransport 创建一个新的通信实例,用于与 ChirpStack 通信。 +func NewChirpStackTransport(config ChirpStackConfig, logger *logs.Logger) *ChirpStackTransport { + // 使用配置中的服务器地址创建一个 HTTP transport。 + // 它会使用生成的客户端中定义的默认 base path 和 schemes。 + transport := httptransport.New(config.ServerAddress, client.DefaultBasePath, client.DefaultSchemes) + + // 使用 transport 和默认的字符串格式化器,创建一个 API 主客户端。 + apiClient := client.New(transport, strfmt.Default) + + // 使用 API Key 创建认证信息写入器。 + authInfo := httptransport.APIKeyAuth("grpc-metadata-authorization", "header", config.GenerateAPIKey()) + + return &ChirpStackTransport{ + client: apiClient, + authInfo: authInfo, + config: config, + logger: logger, + } +} diff --git a/internal/infra/transport/transport.go b/internal/infra/transport/transport.go new file mode 100644 index 0000000..b601c6e --- /dev/null +++ b/internal/infra/transport/transport.go @@ -0,0 +1,4 @@ +package transport + +type Transport interface { +}