gf/net/ghttp/ghttp_server_domain.go

129 lines
3.9 KiB
Go
Raw Normal View History

2021-01-17 21:46:25 +08:00
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
2017-12-29 16:03:30 +08:00
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://github.com/gogf/gf.
2017-12-31 18:19:58 +08:00
package ghttp
import (
2021-09-27 21:27:24 +08:00
"context"
2019-06-19 09:06:52 +08:00
"strings"
)
2020-05-07 23:05:33 +08:00
// Domain is used for route register for domains.
type Domain struct {
2020-05-07 23:05:33 +08:00
server *Server // Belonged server
domains map[string]struct{} // Support multiple domains.
}
2020-05-07 23:05:33 +08:00
// Domain creates and returns a domain object for management for one or more domains.
2018-08-01 21:08:46 +08:00
func (s *Server) Domain(domains string) *Domain {
2019-06-19 09:06:52 +08:00
d := &Domain{
server: s,
domains: make(map[string]struct{}),
2019-06-19 09:06:52 +08:00
}
for _, v := range strings.Split(domains, ",") {
d.domains[strings.TrimSpace(v)] = struct{}{}
2019-06-19 09:06:52 +08:00
}
return d
}
func (d *Domain) BindHandler(pattern string, handler interface{}) {
for domain, _ := range d.domains {
d.server.BindHandler(pattern+"@"+domain, handler)
2019-06-19 09:06:52 +08:00
}
2017-12-30 18:35:24 +08:00
}
2021-09-27 21:27:24 +08:00
func (d *Domain) doBindHandler(ctx context.Context, pattern string, funcInfo handlerFuncInfo, middleware []HandlerFunc, source string) {
for domain, _ := range d.domains {
2021-09-27 21:27:24 +08:00
d.server.doBindHandler(ctx, pattern+"@"+domain, funcInfo, middleware, source)
}
}
2019-06-19 09:06:52 +08:00
func (d *Domain) BindObject(pattern string, obj interface{}, methods ...string) {
for domain, _ := range d.domains {
d.server.BindObject(pattern+"@"+domain, obj, methods...)
2019-06-19 09:06:52 +08:00
}
2017-12-30 18:35:24 +08:00
}
2021-09-27 21:27:24 +08:00
func (d *Domain) doBindObject(ctx context.Context, pattern string, obj interface{}, methods string, middleware []HandlerFunc, source string) {
for domain, _ := range d.domains {
2021-09-27 21:27:24 +08:00
d.server.doBindObject(ctx, pattern+"@"+domain, obj, methods, middleware, source)
}
}
func (d *Domain) BindObjectMethod(pattern string, obj interface{}, method string) {
for domain, _ := range d.domains {
d.server.BindObjectMethod(pattern+"@"+domain, obj, method)
2019-06-19 09:06:52 +08:00
}
2018-01-08 11:38:31 +08:00
}
func (d *Domain) doBindObjectMethod(
2021-09-27 21:27:24 +08:00
ctx context.Context,
pattern string, obj interface{}, method string,
middleware []HandlerFunc, source string,
) {
for domain, _ := range d.domains {
2021-09-27 21:27:24 +08:00
d.server.doBindObjectMethod(ctx, pattern+"@"+domain, obj, method, middleware, source)
}
}
func (d *Domain) BindObjectRest(pattern string, obj interface{}) {
for domain, _ := range d.domains {
d.server.BindObjectRest(pattern+"@"+domain, obj)
2019-06-19 09:06:52 +08:00
}
}
2021-09-27 21:27:24 +08:00
func (d *Domain) doBindObjectRest(ctx context.Context, pattern string, obj interface{}, middleware []HandlerFunc, source string) {
for domain, _ := range d.domains {
2021-09-27 21:27:24 +08:00
d.server.doBindObjectRest(ctx, pattern+"@"+domain, obj, middleware, source)
}
}
2019-06-19 09:06:52 +08:00
func (d *Domain) BindHookHandler(pattern string, hook string, handler HandlerFunc) {
for domain, _ := range d.domains {
d.server.BindHookHandler(pattern+"@"+domain, hook, handler)
}
}
2021-09-27 21:27:24 +08:00
func (d *Domain) doBindHookHandler(ctx context.Context, pattern string, hook string, handler HandlerFunc, source string) {
for domain, _ := range d.domains {
2021-09-27 21:27:24 +08:00
d.server.doBindHookHandler(ctx, pattern+"@"+domain, hook, handler, source)
2019-06-19 09:06:52 +08:00
}
}
2019-06-19 09:06:52 +08:00
func (d *Domain) BindHookHandlerByMap(pattern string, hookmap map[string]HandlerFunc) {
for domain, _ := range d.domains {
d.server.BindHookHandlerByMap(pattern+"@"+domain, hookmap)
2019-06-19 09:06:52 +08:00
}
}
2019-06-19 09:06:52 +08:00
func (d *Domain) BindStatusHandler(status int, handler HandlerFunc) {
for domain, _ := range d.domains {
d.server.addStatusHandler(d.server.statusHandlerKey(status, domain), handler)
2019-06-19 09:06:52 +08:00
}
}
2019-06-19 09:06:52 +08:00
func (d *Domain) BindStatusHandlerByMap(handlerMap map[int]HandlerFunc) {
for k, v := range handlerMap {
d.BindStatusHandler(k, v)
}
}
func (d *Domain) BindMiddleware(pattern string, handlers ...HandlerFunc) {
for domain, _ := range d.domains {
d.server.BindMiddleware(pattern+"@"+domain, handlers...)
}
}
func (d *Domain) BindMiddlewareDefault(handlers ...HandlerFunc) {
for domain, _ := range d.domains {
d.server.BindMiddleware(defaultMiddlewarePattern+"@"+domain, handlers...)
}
}
func (d *Domain) Use(handlers ...HandlerFunc) {
d.BindMiddlewareDefault(handlers...)
}