setting
This commit is contained in:
		
						commit
						ac11ea7d95
					
				
							
								
								
									
										68
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | |||||||
|  | # Created by .ignore support plugin (hsz.mobi) | ||||||
|  | ### JetBrains template | ||||||
|  | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm | ||||||
|  | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 | ||||||
|  | 
 | ||||||
|  | # User-specific stuff: | ||||||
|  | .idea/**/workspace.xml | ||||||
|  | .idea/**/tasks.xml | ||||||
|  | .idea/dictionaries | ||||||
|  | 
 | ||||||
|  | # Sensitive or high-churn files: | ||||||
|  | .idea/**/dataSources/ | ||||||
|  | .idea/**/dataSources.ids | ||||||
|  | .idea/**/dataSources.xml | ||||||
|  | .idea/**/dataSources.local.xml | ||||||
|  | .idea/**/sqlDataSources.xml | ||||||
|  | .idea/**/dynamic.xml | ||||||
|  | .idea/**/uiDesigner.xml | ||||||
|  | 
 | ||||||
|  | # Gradle: | ||||||
|  | .idea/**/gradle.xml | ||||||
|  | .idea/**/libraries | ||||||
|  | 
 | ||||||
|  | # Mongo Explorer plugin: | ||||||
|  | .idea/**/mongoSettings.xml | ||||||
|  | 
 | ||||||
|  | ## File-based project format: | ||||||
|  | *.iws | ||||||
|  | 
 | ||||||
|  | ## Plugin-specific files: | ||||||
|  | 
 | ||||||
|  | # IntelliJ | ||||||
|  | /out/ | ||||||
|  | 
 | ||||||
|  | # mpeltonen/sbt-idea plugin | ||||||
|  | .idea_modules/ | ||||||
|  | 
 | ||||||
|  | # JIRA plugin | ||||||
|  | atlassian-ide-plugin.xml | ||||||
|  | 
 | ||||||
|  | # Crashlytics plugin (for Android Studio and IntelliJ) | ||||||
|  | com_crashlytics_export_strings.xml | ||||||
|  | crashlytics.properties | ||||||
|  | crashlytics-build.properties | ||||||
|  | fabric.properties | ||||||
|  | ### Go template | ||||||
|  | # Binaries for programs and plugins | ||||||
|  | *.exe | ||||||
|  | *.dll | ||||||
|  | *.so | ||||||
|  | *.dylib | ||||||
|  | 
 | ||||||
|  | # Test binary, build with `go test -c` | ||||||
|  | *.test | ||||||
|  | 
 | ||||||
|  | # Output of the go coverage tool, specifically when used with LiteIDE | ||||||
|  | *.out | ||||||
|  | 
 | ||||||
|  | # Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 | ||||||
|  | .glide/ | ||||||
|  | .idea/ | ||||||
|  | *.iml | ||||||
|  | 
 | ||||||
|  | vendor/ | ||||||
|  | glide.lock | ||||||
|  | .DS_Store | ||||||
|  | dist/ | ||||||
|  | debug | ||||||
							
								
								
									
										32
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | |||||||
|  | { | ||||||
|  |     "version": "0.2.0", | ||||||
|  |     "configurations": [ | ||||||
|  |         { | ||||||
|  |             "name": "Debug", | ||||||
|  |             "type": "go", | ||||||
|  |             "request": "launch", | ||||||
|  |             "mode": "debug", | ||||||
|  |             "remotePath": "", | ||||||
|  |             "port": 2345, | ||||||
|  |             "host": "127.0.0.1", | ||||||
|  |             "program": "${workspaceRoot}/main.go", | ||||||
|  |             "env": {}, | ||||||
|  |             "args": [], | ||||||
|  |             "showLog": true | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "name": "File Debug", | ||||||
|  |             "type": "go", | ||||||
|  |             "request": "launch", | ||||||
|  |             "mode": "debug", | ||||||
|  |             "remotePath": "", | ||||||
|  |             "port": 2345, | ||||||
|  |             "host": "127.0.0.1", | ||||||
|  |             "program": "${fileDirname}", | ||||||
|  |             "env": {}, | ||||||
|  |             "args": [], | ||||||
|  |             "showLog": true | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     ] | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | // Place your settings in this file to overwrite default and user settings. | ||||||
|  | { | ||||||
|  |   // Specifies Lint tool name. | ||||||
|  |   "go.lintTool": "gometalinter", | ||||||
|  | 
 | ||||||
|  |   // Flags to pass to Lint tool (e.g. ["-min_confidence=.8"]) | ||||||
|  |   "go.lintFlags": [ | ||||||
|  |     "--config=${workspaceRoot}/golint.json" | ||||||
|  |   ] | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								backend/client.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								backend/client.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | package backend | ||||||
|  | 
 | ||||||
|  | type PooledClient interface { | ||||||
|  | 	Exec(target string, method string, params []string) (string, error) | ||||||
|  | 	Close() | ||||||
|  | } | ||||||
							
								
								
									
										28
									
								
								backend/options.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								backend/options.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | package backend | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"google.golang.org/grpc" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type Options struct { | ||||||
|  | 	// Dial is an application supplied function for creating and configuring a | ||||||
|  | 	// grpc connection. | ||||||
|  | 	// | ||||||
|  | 	// The grpc.ClientConn returned from Dial | ||||||
|  | 	Dial func() (*grpc.ClientConn, error) | ||||||
|  | 
 | ||||||
|  | 	// NewClient is an application supplied function for creating and configuring a | ||||||
|  | 	// client. | ||||||
|  | 	// | ||||||
|  | 	// The client returned from NewClient | ||||||
|  | 	NewClient func(*grpc.ClientConn) (interface{}, error) | ||||||
|  | 
 | ||||||
|  | 	Exec func(client interface{}, target string, method string, params []string) (string, error) | ||||||
|  | 
 | ||||||
|  | 	// Initial number of clients in the pool. | ||||||
|  | 	InitCapacity int | ||||||
|  | 
 | ||||||
|  | 	// Maximum number of clients allocated by the pool at a given time. | ||||||
|  | 	// When zero, there is no limit on the number of clients in the pool. | ||||||
|  | 	MaxCapacity int | ||||||
|  | } | ||||||
							
								
								
									
										144
									
								
								backend/pool.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								backend/pool.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,144 @@ | |||||||
|  | package backend | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"sync" | ||||||
|  | 
 | ||||||
|  | 	"google.golang.org/grpc" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type Pool interface { | ||||||
|  | 	// Get gets a client. The application must close the returned client. | ||||||
|  | 	// This method always returns a valid client so that applications can defer | ||||||
|  | 	// error handling to the first use of the client. If there is an error | ||||||
|  | 	// getting an underlying client, then the client Err, Do, Send, Flush | ||||||
|  | 	// and Receive methods return that error. | ||||||
|  | 	Get() (PooledClient, error) | ||||||
|  | 
 | ||||||
|  | 	// Capacity returns the number of maximum clients in the pool. | ||||||
|  | 	Capacity() int | ||||||
|  | 
 | ||||||
|  | 	// Available returns the number of avaliable clients in the pool. | ||||||
|  | 	Available() int | ||||||
|  | 
 | ||||||
|  | 	// Destroy releases the resources used by the pool. | ||||||
|  | 	Destroy() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type pool struct { | ||||||
|  | 	dial         func() (*grpc.ClientConn, error) | ||||||
|  | 	newClient    func(*grpc.ClientConn) (interface{}, error) | ||||||
|  | 	exec         func(client interface{}, target string, method string, params []string) (string, error) | ||||||
|  | 	initCapacity int | ||||||
|  | 	maxCapacity  int | ||||||
|  | 
 | ||||||
|  | 	conn    *grpc.ClientConn | ||||||
|  | 	mtx     sync.Mutex | ||||||
|  | 	clients chan PooledClient | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewPool(o Options) (Pool, error) { | ||||||
|  | 	if o.Dial == nil { | ||||||
|  | 		return nil, fmt.Errorf("invalid Dial settings") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if o.NewClient == nil { | ||||||
|  | 		return nil, fmt.Errorf("invalid NewClient settings") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if o.InitCapacity < 0 || o.MaxCapacity < 0 { | ||||||
|  | 		return nil, fmt.Errorf("invalid capacity settings") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	p := &pool{ | ||||||
|  | 		dial:         o.Dial, | ||||||
|  | 		newClient:    o.NewClient, | ||||||
|  | 		exec:         o.Exec, | ||||||
|  | 		initCapacity: o.InitCapacity, | ||||||
|  | 		maxCapacity:  o.MaxCapacity, | ||||||
|  | 		clients:      make(chan PooledClient, o.InitCapacity), | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var err error | ||||||
|  | 	p.conn, err = p.dial() | ||||||
|  | 	if nil != err { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for i := 0; i < p.initCapacity; i++ { | ||||||
|  | 		pc, err := p.create() | ||||||
|  | 		if err != nil { | ||||||
|  | 			p.conn.Close() | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		p.clients <- pc | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return p, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p *pool) Capacity() int { | ||||||
|  | 	return cap(p.clients) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p *pool) Available() int { | ||||||
|  | 	return len(p.clients) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p *pool) Get() (PooledClient, error) { | ||||||
|  | 	if p.clients == nil { | ||||||
|  | 		// pool aleardy destroyed, returns new client | ||||||
|  | 		return p.create() | ||||||
|  | 	} | ||||||
|  | 	for { | ||||||
|  | 		select { | ||||||
|  | 		case c := <-p.clients: | ||||||
|  | 			return c, nil | ||||||
|  | 		default: | ||||||
|  | 			return p.create() | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p *pool) Destroy() { | ||||||
|  | 	p.mtx.Lock() | ||||||
|  | 	defer p.mtx.Unlock() | ||||||
|  | 	if p.clients == nil { | ||||||
|  | 		// pool aleardy destroyed | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	close(p.clients) | ||||||
|  | 	p.clients = nil | ||||||
|  | 	p.conn.Close() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p *pool) create() (PooledClient, error) { | ||||||
|  | 	c, err := p.newClient(p.conn) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	pc := &pooledClient{ | ||||||
|  | 		p: p, | ||||||
|  | 		c: c, | ||||||
|  | 	} | ||||||
|  | 	return pc, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type pooledClient struct { | ||||||
|  | 	p *pool | ||||||
|  | 	c interface{} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (pc *pooledClient) Exec(target string, method string, params []string) (string, error) { | ||||||
|  | 	return pc.p.exec(pc.c, target, method, params) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (pc *pooledClient) Close() { | ||||||
|  | 	select { | ||||||
|  | 	case pc.p.clients <- pc: | ||||||
|  | 		return | ||||||
|  | 	default: | ||||||
|  | 		// pool is full, close passed connection | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								glide.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								glide.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | package: git.loafle.net/overflow/overflow_server_app | ||||||
|  | import: | ||||||
|  | - package: github.com/valyala/fasthttp | ||||||
|  |   version: v20160617 | ||||||
|  | - package: github.com/buaazp/fasthttprouter | ||||||
|  |   version: v0.1.1 | ||||||
|  | - package: google.golang.org/grpc | ||||||
|  |   version: v1.5.2 | ||||||
|  | - package: git.loafle.net/overflow/overflow_api_server | ||||||
|  |   subpackages: | ||||||
|  |   - golang | ||||||
							
								
								
									
										54
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,54 @@ | |||||||
|  | package main | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 
 | ||||||
|  | 	"git.loafle.net/overflow/overflow_server_app/backend" | ||||||
|  | 	"git.loafle.net/overflow/overflow_server_app/module/member" | ||||||
|  | 	"git.loafle.net/overflow/overflow_server_app/server" | ||||||
|  | 
 | ||||||
|  | 	grpcAPI "git.loafle.net/overflow/overflow_api_server/golang" | ||||||
|  | 
 | ||||||
|  | 	"github.com/valyala/fasthttp" | ||||||
|  | 	"google.golang.org/grpc" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func main() { | ||||||
|  | 	s := server.New() | ||||||
|  | 
 | ||||||
|  | 	grpcPool, err := backend.NewPool(backend.Options{ | ||||||
|  | 		Dial: func() (*grpc.ClientConn, error) { | ||||||
|  | 			return grpc.Dial("192.168.1.101:50006", grpc.WithInsecure()) | ||||||
|  | 		}, | ||||||
|  | 		NewClient: func(conn *grpc.ClientConn) (interface{}, error) { | ||||||
|  | 			return grpcAPI.NewOverflowApiServerClient(conn), nil | ||||||
|  | 		}, | ||||||
|  | 		Exec: func(client interface{}, target string, method string, params []string) (string, error) { | ||||||
|  | 			ctx := context.Background() | ||||||
|  | 			c := client.(grpcAPI.OverflowApiServerClient) | ||||||
|  | 			si := &grpcAPI.ServerInput{ | ||||||
|  | 				Target: target, | ||||||
|  | 				Method: method, | ||||||
|  | 				Params: params, | ||||||
|  | 			} | ||||||
|  | 			so, err := c.Exec(ctx, si) | ||||||
|  | 			if nil != err { | ||||||
|  | 				return "", err | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			return so.Result, nil | ||||||
|  | 		}, | ||||||
|  | 	}) | ||||||
|  | 	if nil != err { | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	s.SetContextValue("grpc", grpcPool) | ||||||
|  | 
 | ||||||
|  | 	s.Route("POST", "/account/signin", member.SignIn) | ||||||
|  | 	s.Route("POST", "/account/signup", member.SignUp) | ||||||
|  | 	s.Route("POST", "/account/forgot_password", member.ForgotPassword) | ||||||
|  | 	s.Route("POST", "/account/check_email", member.CheckEmail) | ||||||
|  | 
 | ||||||
|  | 	fasthttp.ListenAndServe(":19080", s.Handler) | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								module/member/check_email.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								module/member/check_email.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | package member | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 
 | ||||||
|  | 	"git.loafle.net/overflow/overflow_server_app/server" | ||||||
|  | 
 | ||||||
|  | 	"github.com/valyala/fasthttp" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func CheckEmail(sctx *server.ServerContext, ctx *fasthttp.RequestCtx) { | ||||||
|  | 	msg := sctx.Value("key1") | ||||||
|  | 
 | ||||||
|  | 	fmt.Fprintf(ctx, "Welcome!!!!: %s \n", msg) | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								module/member/forgot_password.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								module/member/forgot_password.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | package member | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 
 | ||||||
|  | 	"git.loafle.net/overflow/overflow_server_app/server" | ||||||
|  | 
 | ||||||
|  | 	"github.com/valyala/fasthttp" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func ForgotPassword(sctx *server.ServerContext, ctx *fasthttp.RequestCtx) { | ||||||
|  | 	msg := sctx.Value("key1") | ||||||
|  | 
 | ||||||
|  | 	fmt.Fprintf(ctx, "Welcome!!!!: %s \n", msg) | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								module/member/signin.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								module/member/signin.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | package member | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 
 | ||||||
|  | 	"git.loafle.net/overflow/overflow_server_app/backend" | ||||||
|  | 
 | ||||||
|  | 	"git.loafle.net/overflow/overflow_server_app/server" | ||||||
|  | 
 | ||||||
|  | 	"github.com/valyala/fasthttp" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func SignIn(sctx *server.ServerContext, ctx *fasthttp.RequestCtx) { | ||||||
|  | 	grpcPool := sctx.Value("grpc").(backend.Pool) | ||||||
|  | 	c, err := grpcPool.Get() | ||||||
|  | 	if nil != err { | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	signinId := string(ctx.FormValue("signinId")) | ||||||
|  | 	signinPw := string(ctx.FormValue("signinPw")) | ||||||
|  | 
 | ||||||
|  | 	params := []string{signinId, signinPw} | ||||||
|  | 
 | ||||||
|  | 	r, err := c.Exec("MemberService", "signin", params) | ||||||
|  | 
 | ||||||
|  | 	fmt.Fprintf(ctx, "Welcome!!!!: %s\n", r) | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								module/member/signup.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								module/member/signup.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | package member | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 
 | ||||||
|  | 	"git.loafle.net/overflow/overflow_server_app/server" | ||||||
|  | 
 | ||||||
|  | 	"github.com/valyala/fasthttp" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func SignUp(sctx *server.ServerContext, ctx *fasthttp.RequestCtx) { | ||||||
|  | 	msg := sctx.Value("key1") | ||||||
|  | 
 | ||||||
|  | 	fmt.Fprintf(ctx, "Welcome!: %s \n", msg) | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										19
									
								
								server/context.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								server/context.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | |||||||
|  | package server | ||||||
|  | 
 | ||||||
|  | type ServerContext struct { | ||||||
|  | 	values map[interface{}]interface{} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *ServerContext) Value(key interface{}) interface{} { | ||||||
|  | 	if nil == c.values { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 	return c.values[key] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (c *ServerContext) setValue(key interface{}, value interface{}) { | ||||||
|  | 	if nil == c.values { | ||||||
|  | 		c.values = make(map[interface{}]interface{}, 1) | ||||||
|  | 	} | ||||||
|  | 	c.values[key] = value | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								server/handler.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								server/handler.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | package server | ||||||
|  | 
 | ||||||
|  | import "github.com/valyala/fasthttp" | ||||||
|  | 
 | ||||||
|  | type RequestHandler func(sctx *ServerContext, ctx *fasthttp.RequestCtx) | ||||||
							
								
								
									
										44
									
								
								server/server.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								server/server.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | |||||||
|  | package server | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"github.com/buaazp/fasthttprouter" | ||||||
|  | 	"github.com/valyala/fasthttp" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type Server interface { | ||||||
|  | 	Handler(ctx *fasthttp.RequestCtx) | ||||||
|  | 	Route(method, path string, handler RequestHandler) | ||||||
|  | 	SetContextValue(key interface{}, value interface{}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type server struct { | ||||||
|  | 	ctx    *ServerContext | ||||||
|  | 	router *fasthttprouter.Router | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func New() Server { | ||||||
|  | 	s := &server{} | ||||||
|  | 
 | ||||||
|  | 	s.router = fasthttprouter.New() | ||||||
|  | 	s.ctx = &ServerContext{} | ||||||
|  | 
 | ||||||
|  | 	return s | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *server) SetContextValue(key interface{}, value interface{}) { | ||||||
|  | 	s.ctx.setValue(key, value) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *server) Handler(ctx *fasthttp.RequestCtx) { | ||||||
|  | 	s.router.Handler(ctx) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *server) Route(method, path string, handler RequestHandler) { | ||||||
|  | 	s.router.Handle(method, path, s.wrapHandler(handler)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *server) wrapHandler(handler RequestHandler) fasthttp.RequestHandler { | ||||||
|  | 	return fasthttp.RequestHandler(func(ctx *fasthttp.RequestCtx) { | ||||||
|  | 		handler(s.ctx, ctx) | ||||||
|  | 	}) | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user