flag 자체 구현
This commit is contained in:
@ -16,12 +16,14 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"repositories.action2quare.com/ayo/gocommon"
|
"repositories.action2quare.com/ayo/gocommon/flagx"
|
||||||
"repositories.action2quare.com/ayo/gocommon/logger"
|
"repositories.action2quare.com/ayo/gocommon/logger"
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/bson"
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var linkupdate = flagx.String("updatelink", "", "")
|
||||||
|
|
||||||
func SortVersions(versions []string) []string {
|
func SortVersions(versions []string) []string {
|
||||||
sort.Slice(versions, func(i, j int) bool {
|
sort.Slice(versions, func(i, j int) bool {
|
||||||
leftnum := 0
|
leftnum := 0
|
||||||
@ -204,10 +206,10 @@ func ReplyUpdateComplete() {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if len(*gocommon.Linkupdate) > 0 {
|
if len(*linkupdate) > 0 {
|
||||||
cache := DeserializeMessageReplyCache(*gocommon.Linkupdate)
|
cache := DeserializeMessageReplyCache(*linkupdate)
|
||||||
if cache != nil {
|
if cache != nil {
|
||||||
os.Remove(*gocommon.Linkupdate)
|
os.Remove(*linkupdate)
|
||||||
if cache.ReplyWrap != nil {
|
if cache.ReplyWrap != nil {
|
||||||
cache.ReplyWrap.Update(cache.Replyaid, "업데이트 완료")
|
cache.ReplyWrap.Update(cache.Replyaid, "업데이트 완료")
|
||||||
}
|
}
|
||||||
|
|||||||
22
flags.go
22
flags.go
@ -1,22 +0,0 @@
|
|||||||
package gocommon
|
|
||||||
|
|
||||||
import (
|
|
||||||
"flag"
|
|
||||||
"io"
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
var commandLine = flag.NewFlagSet("gocommon", flag.ContinueOnError)
|
|
||||||
var devflag = commandLine.Bool("dev", false, "")
|
|
||||||
var configfileflag = commandLine.String("config", "", "")
|
|
||||||
var PrefixPtr = commandLine.String("prefix", "", "'")
|
|
||||||
var portptr = commandLine.Int("port", 80, "")
|
|
||||||
var tls = commandLine.String("tls", "", "")
|
|
||||||
var NoSessionFlag = commandLine.Bool("nosession", false, "nosession=[true|false]")
|
|
||||||
var NeedPrefetch = commandLine.Bool("prefetch", false, "")
|
|
||||||
var Linkupdate = commandLine.String("updatelink", "", "")
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
commandLine.SetOutput(io.Discard)
|
|
||||||
commandLine.Parse(os.Args[1:])
|
|
||||||
}
|
|
||||||
175
flagx/commandline.go
Normal file
175
flagx/commandline.go
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
package flagx
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var commandLine = []*flag.FlagSet{
|
||||||
|
flag.NewFlagSet(os.Args[0], flag.ContinueOnError),
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
Parse()
|
||||||
|
}
|
||||||
|
|
||||||
|
func findProperFlagSet(name string) *flag.FlagSet {
|
||||||
|
for _, cl := range commandLine {
|
||||||
|
if cl.Lookup(name) == nil {
|
||||||
|
return cl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next := flag.NewFlagSet(fmt.Sprintf("%s-%d", os.Args[0], len(commandLine)), flag.ContinueOnError)
|
||||||
|
commandLine = append(commandLine, next)
|
||||||
|
return next
|
||||||
|
}
|
||||||
|
|
||||||
|
func VisitAll(fn func(*flag.Flag)) {
|
||||||
|
for _, cl := range commandLine {
|
||||||
|
cl.VisitAll(fn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Visit visits the command-line flags in lexicographical order, calling fn
|
||||||
|
// for each. It visits only those flags that have been set.
|
||||||
|
func Visit(fn func(*flag.Flag)) {
|
||||||
|
for _, cl := range commandLine {
|
||||||
|
cl.Visit(fn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Lookup(name string) *flag.Flag {
|
||||||
|
for _, cl := range commandLine {
|
||||||
|
f := cl.Lookup(name)
|
||||||
|
if f != nil {
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Set(name, value string) error {
|
||||||
|
for _, cl := range commandLine {
|
||||||
|
if cl.Lookup(name) != nil {
|
||||||
|
return cl.Set(name, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fmt.Errorf("no such flag -%v", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func PrintDefaults() {
|
||||||
|
for _, cl := range commandLine {
|
||||||
|
cl.PrintDefaults()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BoolVar(p *bool, name string, value bool, usage string) {
|
||||||
|
findProperFlagSet(name).BoolVar(p, name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Bool(name string, value bool, usage string) *bool {
|
||||||
|
return findProperFlagSet(name).Bool(name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func IntVar(p *int, name string, value int, usage string) {
|
||||||
|
findProperFlagSet(name).IntVar(p, name, value, usage)
|
||||||
|
}
|
||||||
|
func Int(name string, value int, usage string) *int {
|
||||||
|
return findProperFlagSet(name).Int(name, value, usage)
|
||||||
|
}
|
||||||
|
func Int64Var(p *int64, name string, value int64, usage string) {
|
||||||
|
findProperFlagSet(name).Int64Var(p, name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Int64(name string, value int64, usage string) *int64 {
|
||||||
|
return findProperFlagSet(name).Int64(name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func UintVar(p *uint, name string, value uint, usage string) {
|
||||||
|
findProperFlagSet(name).UintVar(p, name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Uint(name string, value uint, usage string) *uint {
|
||||||
|
return findProperFlagSet(name).Uint(name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Uint64Var(p *uint64, name string, value uint64, usage string) {
|
||||||
|
findProperFlagSet(name).Uint64Var(p, name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Uint64(name string, value uint64, usage string) *uint64 {
|
||||||
|
return findProperFlagSet(name).Uint64(name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func StringVar(p *string, name string, value string, usage string) {
|
||||||
|
findProperFlagSet(name).StringVar(p, name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func String(name string, value string, usage string) *string {
|
||||||
|
return findProperFlagSet(name).String(name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Float64Var(p *float64, name string, value float64, usage string) {
|
||||||
|
findProperFlagSet(name).Float64Var(p, name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Float64(name string, value float64, usage string) *float64 {
|
||||||
|
return findProperFlagSet(name).Float64(name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
|
||||||
|
findProperFlagSet(name).DurationVar(p, name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Duration(name string, value time.Duration, usage string) *time.Duration {
|
||||||
|
return findProperFlagSet(name).Duration(name, value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TextVar(p encoding.TextUnmarshaler, name string, value encoding.TextMarshaler, usage string) {
|
||||||
|
findProperFlagSet(name).TextVar(p, name, value, usage)
|
||||||
|
}
|
||||||
|
func Func(name, usage string, fn func(string) error) {
|
||||||
|
findProperFlagSet(name).Func(name, usage, fn)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Var(value flag.Value, name string, usage string) {
|
||||||
|
findProperFlagSet(name).Var(value, name, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Parse() {
|
||||||
|
args := os.Args[1:]
|
||||||
|
for _, cl := range commandLine {
|
||||||
|
if cl.Parsed() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var filtered []string
|
||||||
|
cl.VisitAll(func(f *flag.Flag) {
|
||||||
|
for _, arg := range args {
|
||||||
|
test := strings.TrimLeft(arg, "-")
|
||||||
|
if test == f.Name || strings.HasPrefix(test, f.Name+"=") {
|
||||||
|
filtered = append(filtered, arg)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
cl.Parse(filtered)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Parsed() bool {
|
||||||
|
for _, cl := range commandLine {
|
||||||
|
if !cl.Parsed() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFlagSet(name string, errorHandling flag.ErrorHandling) *flag.FlagSet {
|
||||||
|
return flag.NewFlagSet(name, errorHandling)
|
||||||
|
}
|
||||||
4
misc.go
4
misc.go
@ -12,8 +12,12 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"repositories.action2quare.com/ayo/gocommon/flagx"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var devflag = flagx.Bool("dev", false, "")
|
||||||
|
|
||||||
var sequenceStart = rand.Uint32()
|
var sequenceStart = rand.Uint32()
|
||||||
|
|
||||||
func MakeHttpHandlerPattern(n ...string) string {
|
func MakeHttpHandlerPattern(n ...string) string {
|
||||||
|
|||||||
@ -4,8 +4,12 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"repositories.action2quare.com/ayo/gocommon/flagx"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var configfileflag = flagx.String("config", "", "")
|
||||||
|
|
||||||
func configFilePath() string {
|
func configFilePath() string {
|
||||||
configfilepath := "config.json"
|
configfilepath := "config.json"
|
||||||
if configfileflag != nil && len(*configfileflag) > 0 {
|
if configfileflag != nil && len(*configfileflag) > 0 {
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"repositories.action2quare.com/ayo/gocommon/flagx"
|
||||||
"repositories.action2quare.com/ayo/gocommon/logger"
|
"repositories.action2quare.com/ayo/gocommon/logger"
|
||||||
|
|
||||||
"github.com/pires/go-proxyproto"
|
"github.com/pires/go-proxyproto"
|
||||||
@ -84,6 +85,9 @@ func welcomeHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Write([]byte("welcome"))
|
w.Write([]byte("welcome"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var tls = flagx.String("tls", "", "")
|
||||||
|
var portptr = flagx.Int("port", 80, "")
|
||||||
|
|
||||||
// NewHTTPServer :
|
// NewHTTPServer :
|
||||||
func NewHTTPServerWithPort(serveMux *http.ServeMux, port int) *Server {
|
func NewHTTPServerWithPort(serveMux *http.ServeMux, port int) *Server {
|
||||||
if len(*tls) > 0 && port == 80 {
|
if len(*tls) > 0 && port == 80 {
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
common "repositories.action2quare.com/ayo/gocommon"
|
common "repositories.action2quare.com/ayo/gocommon"
|
||||||
|
"repositories.action2quare.com/ayo/gocommon/flagx"
|
||||||
"repositories.action2quare.com/ayo/gocommon/logger"
|
"repositories.action2quare.com/ayo/gocommon/logger"
|
||||||
|
|
||||||
"github.com/go-redis/redis/v8"
|
"github.com/go-redis/redis/v8"
|
||||||
@ -20,6 +21,8 @@ import (
|
|||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var noSessionFlag = flagx.Bool("nosession", false, "nosession=[true|false]")
|
||||||
|
|
||||||
const (
|
const (
|
||||||
connStateCachePrefix = "conn_state_"
|
connStateCachePrefix = "conn_state_"
|
||||||
connStateScript = `
|
connStateScript = `
|
||||||
@ -289,7 +292,7 @@ func (ws *WebsocketHandler) RegisterHandlers(ctx context.Context, serveMux *http
|
|||||||
}
|
}
|
||||||
sh.url = common.MakeHttpHandlerPattern(prefix, region, "ws")
|
sh.url = common.MakeHttpHandlerPattern(prefix, region, "ws")
|
||||||
sh.redisSync = ws.RedisSync
|
sh.redisSync = ws.RedisSync
|
||||||
if *common.NoSessionFlag {
|
if *noSessionFlag {
|
||||||
serveMux.HandleFunc(sh.url, sh.upgrade_nosession)
|
serveMux.HandleFunc(sh.url, sh.upgrade_nosession)
|
||||||
} else {
|
} else {
|
||||||
serveMux.HandleFunc(sh.url, sh.upgrade)
|
serveMux.HandleFunc(sh.url, sh.upgrade)
|
||||||
|
|||||||
Reference in New Issue
Block a user