service interface added

reflect method call refactoring
This commit is contained in:
geek 2017-06-05 19:46:02 +09:00
parent 3c62b06189
commit 7bd2c6403c
3 changed files with 100 additions and 12 deletions

View File

@ -6,7 +6,8 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"encoding/json" "encoding/json"
"github.com/golang/glog" "github.com/golang/glog"
"git.loafle.net/overflow/overflow_proxy_service/proxy" "fmt"
) )
func TestServices(t *testing.T) { func TestServices(t *testing.T) {
@ -50,6 +51,71 @@ func TestServiceParam(t *testing.T) {
glog.Fatal("Json Unmarshal Failed : ", err.Error()) glog.Fatal("Json Unmarshal Failed : ", err.Error())
} }
assert.ObjectsAreEqual(proxy.MemberService{}, meb) //assert.ObjectsAreEqual(proxy.MemberService{}, meb)
}
//
//type Member struct {
// Email string `json:"email"`
// Password string `json:"password"`
//}
//
//type MemberService struct {
// ServiceName string `json:"serviceName"`
// MethodName string `json:"methodName"`
// Param *Member `json:"param"`
//}
func TestComvertJson(t *testing.T) {
//res := `{"serviceName":"Member","methodName":"Regist","param":{"email":"geek@loafle.com","password":"qwer5795"}}`
InitServices()
meb, _ := g_services["Member"]
mem := meb.GetModel()
m := make(map[string]string)
m["email"] = "geek@loafle.com"
m["password"] = "qwer5795"
//ss := member.NewMemberService()
convertParam(mem, m)
methodName := reflect.ValueOf(meb).MethodByName("Regist")
in := make([]reflect.Value, methodName.Type().NumIn())
for i := 0; i < methodName.Type().NumIn(); i++{
temp := methodName.Type().In(i)
in[i] = reflect.ValueOf(mem)
fmt.Println(temp)
}
va := methodName.Call(in)[0].String()
fmt.Println(va)
} }
//func TestReflectType(t *testing.T) {
//ss := &MemberService{}
////t1 := reflect.ValueOf(ss.Param).Elem()
//
//ms1 := reflect.New(reflect.TypeOf(ss.Param)).Elem().Type()
//
//fmt.Println(ms1)
////ss.Param = ms1
////ss.Param.Email = "ddd"
////fmt.Println(ss.Param.Email)
//ms := reflect.New(reflect.ValueOf(ss.Param).Type()).Elem()
//fmt.Printf("created a [%T]\n", reflect.ValueOf(ms).Type())
//}
func TestReflectType(t *testing.T) {
InitServices()
//serviceName, _ := g_services["Member"]
//reflect.TypeOf(serviceName).Elem().(member.MemberService)
}

View File

@ -4,28 +4,32 @@ import (
"golang.org/x/net/context" "golang.org/x/net/context"
pb "git.loafle.net/overflow/overflow_api_service/grpc" pb "git.loafle.net/overflow/overflow_api_service/grpc"
"git.loafle.net/overflow/overflow_proxy_service/proxy/member" "git.loafle.net/overflow/overflow_proxy_service/proxy/member"
"git.loafle.net/overflow/overflow_proxy_service/proxy/noauthagent"
"github.com/golang/glog" "github.com/golang/glog"
"encoding/json" "encoding/json"
"reflect" "reflect"
"fmt"
) )
var g_services map[string]interface{} var g_services map[string]Services
func AddServices(name string, s interface{}) { func AddServices(name string, s Services) {
if g_services == nil { if g_services == nil {
g_services = make(map[string]interface{},0) g_services = make(map[string]Services,0)
} }
g_services[name] = s g_services[name] = s
} }
type Services interface {
GetModel()(interface{})
}
func InitServices() { func InitServices() {
g_services = make(map[string]interface{},0) g_services = make(map[string]Services,0)
// proxy services save // proxy services save
AddServices("Member", member.NewMember()) AddServices("Member", member.NewMemberService())
AddServices("NoAuthAgent", noauthagent.NewNoAuthAgentService()) //AddServices("NoAuthAgent", noauthagent.NewNoAuthAgentService())
} }
type ServiceImpl struct { type ServiceImpl struct {
@ -35,18 +39,28 @@ func (s *ServiceImpl) ExecServices(c context.Context, in *pb.ServiceInput) (*pb.
// Check Service Name // Check Service Name
serviceName, ok := g_services[in.ServiceName] serviceName, ok := g_services[in.ServiceName]
glog.Infoln(serviceName) glog.Infoln(serviceName.GetModel())
if !ok { if !ok {
glog.Error("Not Exist Service Name") glog.Error("Not Exist Service Name")
} }
convertParam(serviceName, in.Param) model := serviceName.GetModel()
convertParam(model, in.Param)
pbs := &pb.ServiceOutput{} pbs := &pb.ServiceOutput{}
methodName := reflect.ValueOf(serviceName).MethodByName(in.MethodName)
params := make([]reflect.Value, methodName.Type().NumIn())
for i := 0; i < methodName.Type().NumIn(); i++{
temp := methodName.Type().In(i)
params[i] = reflect.ValueOf(model)
fmt.Println(temp)
}
// Todo Call Service Method // Todo Call Service Method
result := reflect.ValueOf(serviceName).MethodByName(in.MethodName).Call([]reflect.Value{})[0].String() result := methodName.Call(params)[0].String()
pbs.ResultStr = result pbs.ResultStr = result

View File

@ -1,13 +1,21 @@
package: git.loafle.net/overflow/overflow_gateway_service package: git.loafle.net/overflow/overflow_gateway_service
import: import:
- package: git.loafle.net/overflow/overflow_api_service - package: git.loafle.net/overflow/overflow_api_service
vcs: git
version: master
repo: https://git.loafle.net/overflow/overflow_api_service.git
subpackages: subpackages:
- grpc - grpc
- package: git.loafle.net/overflow/overflow_proxy_service - package: git.loafle.net/overflow/overflow_proxy_service
vcs: git
version: master
repo: https://git.loafle.net/overflow/overflow_proxy_service.git
subpackages: subpackages:
- proxy/member - proxy/member
- proxy/noauthagent
- package: github.com/golang/glog - package: github.com/golang/glog
- package: github.com/grpc-ecosystem/grpc-gateway - package: github.com/grpc-ecosystem/grpc-gateway
version: ^1.2.2
subpackages: subpackages:
- runtime - runtime
- package: golang.org/x/net - package: golang.org/x/net