github.com/gogf/gf@v1.16.9/net/ghttp/ghttp_server_domain.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package ghttp 8 9 import ( 10 "strings" 11 ) 12 13 // Domain is used for route register for domains. 14 type Domain struct { 15 server *Server // Belonged server 16 domains map[string]struct{} // Support multiple domains. 17 } 18 19 // Domain creates and returns a domain object for management for one or more domains. 20 func (s *Server) Domain(domains string) *Domain { 21 d := &Domain{ 22 server: s, 23 domains: make(map[string]struct{}), 24 } 25 for _, v := range strings.Split(domains, ",") { 26 d.domains[strings.TrimSpace(v)] = struct{}{} 27 } 28 return d 29 } 30 31 func (d *Domain) BindHandler(pattern string, handler interface{}) { 32 for domain, _ := range d.domains { 33 d.server.BindHandler(pattern+"@"+domain, handler) 34 } 35 } 36 37 func (d *Domain) doBindHandler(pattern string, funcInfo handlerFuncInfo, middleware []HandlerFunc, source string) { 38 for domain, _ := range d.domains { 39 d.server.doBindHandler(pattern+"@"+domain, funcInfo, middleware, source) 40 } 41 } 42 43 func (d *Domain) BindObject(pattern string, obj interface{}, methods ...string) { 44 for domain, _ := range d.domains { 45 d.server.BindObject(pattern+"@"+domain, obj, methods...) 46 } 47 } 48 49 func (d *Domain) doBindObject(pattern string, obj interface{}, methods string, middleware []HandlerFunc, source string) { 50 for domain, _ := range d.domains { 51 d.server.doBindObject(pattern+"@"+domain, obj, methods, middleware, source) 52 } 53 } 54 55 func (d *Domain) BindObjectMethod(pattern string, obj interface{}, method string) { 56 for domain, _ := range d.domains { 57 d.server.BindObjectMethod(pattern+"@"+domain, obj, method) 58 } 59 } 60 61 func (d *Domain) doBindObjectMethod( 62 pattern string, obj interface{}, method string, 63 middleware []HandlerFunc, source string, 64 ) { 65 for domain, _ := range d.domains { 66 d.server.doBindObjectMethod(pattern+"@"+domain, obj, method, middleware, source) 67 } 68 } 69 70 func (d *Domain) BindObjectRest(pattern string, obj interface{}) { 71 for domain, _ := range d.domains { 72 d.server.BindObjectRest(pattern+"@"+domain, obj) 73 } 74 } 75 76 func (d *Domain) doBindObjectRest(pattern string, obj interface{}, middleware []HandlerFunc, source string) { 77 for domain, _ := range d.domains { 78 d.server.doBindObjectRest(pattern+"@"+domain, obj, middleware, source) 79 } 80 } 81 82 func (d *Domain) BindHookHandler(pattern string, hook string, handler HandlerFunc) { 83 for domain, _ := range d.domains { 84 d.server.BindHookHandler(pattern+"@"+domain, hook, handler) 85 } 86 } 87 88 func (d *Domain) doBindHookHandler(pattern string, hook string, handler HandlerFunc, source string) { 89 for domain, _ := range d.domains { 90 d.server.doBindHookHandler(pattern+"@"+domain, hook, handler, source) 91 } 92 } 93 94 func (d *Domain) BindHookHandlerByMap(pattern string, hookmap map[string]HandlerFunc) { 95 for domain, _ := range d.domains { 96 d.server.BindHookHandlerByMap(pattern+"@"+domain, hookmap) 97 } 98 } 99 100 func (d *Domain) BindStatusHandler(status int, handler HandlerFunc) { 101 for domain, _ := range d.domains { 102 d.server.addStatusHandler(d.server.statusHandlerKey(status, domain), handler) 103 } 104 } 105 106 func (d *Domain) BindStatusHandlerByMap(handlerMap map[int]HandlerFunc) { 107 for k, v := range handlerMap { 108 d.BindStatusHandler(k, v) 109 } 110 } 111 112 func (d *Domain) BindMiddleware(pattern string, handlers ...HandlerFunc) { 113 for domain, _ := range d.domains { 114 d.server.BindMiddleware(pattern+"@"+domain, handlers...) 115 } 116 } 117 118 func (d *Domain) BindMiddlewareDefault(handlers ...HandlerFunc) { 119 for domain, _ := range d.domains { 120 d.server.BindMiddleware(defaultMiddlewarePattern+"@"+domain, handlers...) 121 } 122 } 123 124 func (d *Domain) Use(handlers ...HandlerFunc) { 125 d.BindMiddlewareDefault(handlers...) 126 }