/* ---------------------------------------------------------------------- | |||||
* ______ ___ __ | |||||
* / ____/___ / | ____ __ ___ __/ /_ ___ ________ | |||||
* / / __/ __ \/ /| | / __ \/ / / / | /| / / __ \/ _ \/ ___/ _ \ | |||||
* / /_/ / /_/ / ___ |/ / / / /_/ /| |/ |/ / / / / __/ / / __/ | |||||
* \____/\____/_/ |_/_/ /_/\__. / |__/|__/_/ /_/\___/_/ \___/ | |||||
* /____/ | |||||
* | |||||
* (C) Copyright 2015 GoAnywhere (http://goanywhere.io). | |||||
* ---------------------------------------------------------------------- | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
* ----------------------------------------------------------------------*/ | |||||
package rex | |||||
type options struct { | |||||
debug bool | |||||
port int | |||||
maxprocs int | |||||
} |
var ( | var ( | ||||
DefaultMux = New() | DefaultMux = New() | ||||
options = struct { | |||||
debug bool | |||||
port int | |||||
maxprocs int | |||||
}{ | |||||
config = &options{ | |||||
debug: true, | debug: true, | ||||
port: 5000, | port: 5000, | ||||
maxprocs: runtime.NumCPU(), | maxprocs: runtime.NumCPU(), | ||||
env.Load(filepath.Join(root, ".env")) | env.Load(filepath.Join(root, ".env")) | ||||
// cmd arguments | // cmd arguments | ||||
flag.BoolVar(&options.debug, "debug", options.debug, "flag to toggle debug mode") | |||||
flag.IntVar(&options.port, "port", options.port, "port to run the application server") | |||||
flag.IntVar(&options.maxprocs, "maxprocs", options.maxprocs, "maximum cpu processes to run the server") | |||||
flag.BoolVar(&config.debug, "debug", config.debug, "flag to toggle debug mode") | |||||
flag.IntVar(&config.port, "port", config.port, "port to run the application server") | |||||
flag.IntVar(&config.maxprocs, "maxprocs", config.maxprocs, "maximum cpu processes to run the server") | |||||
flag.Parse() | flag.Parse() | ||||
} | } |
// Run starts the application server to serve incoming requests at the given address. | // Run starts the application server to serve incoming requests at the given address. | ||||
func (self *Router) Run() { | func (self *Router) Run() { | ||||
runtime.GOMAXPROCS(options.maxprocs) | |||||
runtime.GOMAXPROCS(config.maxprocs) | |||||
go func() { | go func() { | ||||
time.Sleep(500 * time.Millisecond) | time.Sleep(500 * time.Millisecond) | ||||
Infof("Application server is listening at %d", options.port) | |||||
Infof("Application server is listening at %d", config.port) | |||||
}() | }() | ||||
if err := http.ListenAndServe(fmt.Sprintf(":%d", options.port), self); err != nil { | |||||
if err := http.ListenAndServe(fmt.Sprintf(":%d", config.port), self); err != nil { | |||||
Fatalf("Failed to start the server: %v", err) | Fatalf("Failed to start the server: %v", err) | ||||
} | } | ||||
} | } |