Bladeren bron

添加接口

yjp 2 jaren geleden
bovenliggende
commit
eac56055de
3 gewijzigde bestanden met toevoegingen van 34 en 5 verwijderingen
  1. 12 5
      http_binding/http_binding.go
  2. 13 0
      mqtt_binding/mqtt_binding.go
  3. 9 0
      mqtt_binding/mqtt_client/router/router.go

+ 12 - 5
http_binding/http_binding.go

@@ -43,7 +43,7 @@ func NewBinding(apiVersion string, middlewares ...middleware.Func) *Binding {
 
 type HandleFunc func(c *binding_context.Context)
 
-func (binding *Binding) AddHandler(method string, relativePath string, handleFunc HandleFunc) error {
+func (binding *Binding) AddHandler(method string, relativePath string, handleFunctions []HandleFunc) error {
 	if utils.IsStringEmpty(method) {
 		return errors.New("没有传递方法名")
 	}
@@ -52,13 +52,20 @@ func (binding *Binding) AddHandler(method string, relativePath string, handleFun
 		return errors.New("没有传递相对路径")
 	}
 
-	if handleFunc == nil {
+	if handleFunctions == nil || len(handleFunctions) == 0 {
 		return errors.New("没有传递处理函数")
 	}
 
-	binding.routerGroup.Handle(method, relativePath, func(c *gin.Context) {
-		handleFunc(&binding_context.Context{Context: c})
-	})
+	// 给单个路由增加中间件
+	ginHandleFunctions := make([]gin.HandlerFunc, 0)
+	for _, handleFunction := range handleFunctions {
+		innerFunction := handleFunction
+		ginHandleFunctions = append(ginHandleFunctions, func(c *gin.Context) {
+			innerFunction(&binding_context.Context{Context: c})
+		})
+	}
+
+	binding.routerGroup.Handle(method, relativePath, ginHandleFunctions...)
 
 	return nil
 }

+ 13 - 0
mqtt_binding/mqtt_binding.go

@@ -1,6 +1,7 @@
 package mqtt_binding
 
 import (
+	"errors"
 	"git.sxidc.com/go-tools/api_binding/mqtt_binding/mqtt_client"
 	"git.sxidc.com/go-tools/api_binding/mqtt_binding/mqtt_client/router"
 	"git.sxidc.com/go-tools/api_binding/mqtt_binding/request"
@@ -32,6 +33,18 @@ func Bind[I any, O any](b *Binding, item *BindItem[I, O], handlers ...router.Han
 	item.bind(b.router, handlers...)
 }
 
+func (binding *Binding) AddHandler(topic string, handlers []router.Handler) error {
+	if utils.IsStringEmpty(topic) {
+		return errors.New("没有传递主题")
+	}
+
+	if handlers == nil || len(handlers) == 0 {
+		return errors.New("没有传递处理函数")
+	}
+
+	return binding.router.AddTopic(topic, handlers)
+}
+
 // BindItem 路由条目结构
 type BindItem[I any, O any] struct {
 	Topic               string               // 请求路径

+ 9 - 0
mqtt_binding/mqtt_client/router/router.go

@@ -43,6 +43,15 @@ func DestroyRouter(router *Router) {
 	router = nil
 }
 
+func (router *Router) AddTopic(topic string, handlers []Handler) error {
+	item, err := NewItem(topic, handlers)
+	if err != nil {
+		return err
+	}
+
+	return router.AddItem(item)
+}
+
 func (router *Router) AddItem(item *Item) error {
 	if item == nil {
 		return nil