Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/interface/live/live-demo/api/http:all-srcs",
"//app/interface/live/live-demo/cmd:all-srcs",
"//app/interface/live/live-demo/conf:all-srcs",
"//app/interface/live/live-demo/dao:all-srcs",
"//app/interface/live/live-demo/server/http:all-srcs",
"//app/interface/live/live-demo/service:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,2 @@
# v1.0.0
1. 上线功能xxx

View File

@@ -0,0 +1,6 @@
# Owner
liugang
# Author
# Reviewer

View File

@@ -0,0 +1,10 @@
# See the OWNERS docs at https://go.k8s.io/owners
approvers:
- liugang
labels:
- interface
- interface/live/live-demo
- live
options:
no_parent_owners: true

View File

@@ -0,0 +1,19 @@
# live-demo-interface
# 项目简介
直播网关层demo
http://info.bilibili.co/pages/viewpage.action?pageId=11864506
# 编译环境
# 依赖包
# 编译执行
研发环境
// 使用uat环境以便能够快速调通
cd cmd && go run main.go -conf test.toml -deploy.env=uat

View File

@@ -0,0 +1,59 @@
load(
"@io_bazel_rules_go//proto:def.bzl",
"go_proto_library",
)
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
proto_library(
name = "livedemo_proto",
srcs = ["service.proto"],
tags = ["automanaged"],
deps = ["@gogo_special_proto//github.com/gogo/protobuf/gogoproto"],
)
go_proto_library(
name = "livedemo_go_proto",
compilers = ["@io_bazel_rules_go//proto:gogofast_grpc"],
importpath = "go-common/app/interface/live/live-demo/api/http",
proto = ":livedemo_proto",
tags = ["automanaged"],
deps = ["@com_github_gogo_protobuf//gogoproto:go_default_library"],
)
go_library(
name = "go_default_library",
srcs = ["service.bm.go"],
embed = [":livedemo_go_proto"],
importpath = "go-common/app/interface/live/live-demo/api/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/binding:go_default_library",
"@com_github_gogo_protobuf//gogoproto:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/interface/live/live-demo/api/http/v2:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,160 @@
// Code generated by protoc-gen-bm v0.1, DO NOT EDIT.
// source: service.proto
/*
Package livedemo is a generated blademaster stub package.
This code was generated with go-common/app/tool/bmgen/protoc-gen-bm v0.1.
It is generated from these files:
service.proto
*/
package livedemo
import (
"context"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/binding"
)
// to suppressed 'imported but not used warning'
var _ *bm.Context
var _ context.Context
var _ binding.StructValidator
var PathFooUnameByUid = "/live.livedemo.Foo/uname_by_uid"
var PathFooGetInfo = "/live.livedemo.Foo/get_info"
var PathFooUnameByUid3 = "/live.livedemo.Foo/uname_by_uid3"
var PathFooUnameByUid4 = "/live.livedemo.Foo/uname_by_uid4"
var PathFooGetDynamic = "/live.livedemo.Foo/get_dynamic"
var PathFooNointerface = "/live.livedemo.Foo/nointerface"
var PathFoo2Hello = "/live.livedemo.Foo2/hello"
// =============
// Foo Interface
// =============
// Foo 相关服务
type FooBMServer interface {
// 根据uid得到uname
// `method:"post" midware:"auth,verify"`
//
// 这是详细说明
UnameByUid(ctx context.Context, req *Bar1Req) (resp *Bar1Resp, err error)
// 获取房间信息
// `midware:"guest"`
GetInfo(ctx context.Context, req *GetInfoReq) (resp *GetInfoResp, err error)
// 根据uid得到uname v3
UnameByUid3(ctx context.Context, req *Bar1Req) (resp *Bar1Resp, err error)
// test comment
// `internal:"true"`
UnameByUid4(ctx context.Context, req *Bar1Req) (resp *Bar1Resp, err error)
// `dynamic_resp:"true"`
GetDynamic(ctx context.Context, req *Bar1Req) (resp interface{}, err error)
}
var FooSvc FooBMServer
func fooUnameByUid(c *bm.Context) {
p := new(Bar1Req)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := FooSvc.UnameByUid(c, p)
c.JSON(resp, err)
}
func fooGetInfo(c *bm.Context) {
p := new(GetInfoReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := FooSvc.GetInfo(c, p)
c.JSON(resp, err)
}
func fooUnameByUid3(c *bm.Context) {
p := new(Bar1Req)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := FooSvc.UnameByUid3(c, p)
c.JSON(resp, err)
}
func fooUnameByUid4(c *bm.Context) {
p := new(Bar1Req)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := FooSvc.UnameByUid4(c, p)
c.JSON(resp, err)
}
func fooGetDynamic(c *bm.Context) {
p := new(Bar1Req)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := FooSvc.GetDynamic(c, p)
c.JSON(resp, err)
}
// RegisterFooService Register the blademaster route with middleware map
// midMap is the middleware map, the key is defined in proto
func RegisterFooService(e *bm.Engine, svc FooBMServer, midMap map[string]bm.HandlerFunc) {
auth := midMap["auth"]
guest := midMap["guest"]
verify := midMap["verify"]
FooSvc = svc
e.POST("/xlive/live-demo/foo/uname_by_uid", auth, verify, fooUnameByUid)
e.GET("/xlive/live-demo/foo/get_info", guest, fooGetInfo)
e.GET("/xlive/live-demo/foo/uname_by_uid3", fooUnameByUid3)
e.GET("/xlive/internal/live-demo/foo/uname_by_uid4", fooUnameByUid4)
e.GET("/xlive/live-demo/foo/get_dynamic", fooGetDynamic)
}
// RegisterFooBMServer Register the blademaster route
func RegisterFooBMServer(e *bm.Engine, server FooBMServer) {
e.POST("/live.livedemo.Foo/uname_by_uid", fooUnameByUid)
e.GET("/live.livedemo.Foo/get_info", fooGetInfo)
e.GET("/live.livedemo.Foo/uname_by_uid3", fooUnameByUid3)
e.GET("/live.livedemo.Foo/uname_by_uid4", fooUnameByUid4)
e.GET("/live.livedemo.Foo/get_dynamic", fooGetDynamic)
}
// ==============
// Foo2 Interface
// ==============
type Foo2BMServer interface {
Hello(ctx context.Context, req *Bar1Req) (resp *Bar1Resp, err error)
}
var Foo2Svc Foo2BMServer
func foo2Hello(c *bm.Context) {
p := new(Bar1Req)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := Foo2Svc.Hello(c, p)
c.JSON(resp, err)
}
// RegisterFoo2Service Register the blademaster route with middleware map
// midMap is the middleware map, the key is defined in proto
func RegisterFoo2Service(e *bm.Engine, svc Foo2BMServer, midMap map[string]bm.HandlerFunc) {
Foo2Svc = svc
e.GET("/xlive/live-demo/foo2/hello", foo2Hello)
}
// RegisterFoo2BMServer Register the blademaster route
func RegisterFoo2BMServer(e *bm.Engine, server Foo2BMServer) {
e.GET("/live.livedemo.Foo2/hello", foo2Hello)
}

View File

@@ -0,0 +1,272 @@
<!-- package=live.livedemo -->
- [/xlive/live-demo/foo/uname_by_uid](#xlivelive-demofoouname_by_uid) 根据uid得到uname
- [/xlive/live-demo/foo/get_info](#xlivelive-demofooget_info) 获取房间信息
- [/xlive/live-demo/foo/uname_by_uid3](#xlivelive-demofoouname_by_uid3) 根据uid得到uname v3
- [/xlive/internal/live-demo/foo/uname_by_uid4](#xliveinternallive-demofoouname_by_uid4) test comment
- [/xlive/live-demo/foo/get_dynamic](#xlivelive-demofooget_dynamic)
- [/xlive/live-demo/foo/nointerface](#xlivelive-demofoonointerface)
## /xlive/live-demo/foo/uname_by_uid
### 根据uid得到uname
这是详细说明
> 需要登录
#### 方法POST
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|否|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```
## /xlive/live-demo/foo/get_info
### 获取房间信息
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|room_id|是|integer| 房间id `mock:"123"|
|many_ids|否|多个integer||
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 房间id 注释貌似只有放在前面才能被识别,放到字段声明后面是没用的
"roomid": 0,
// 用户名
"uname": "",
// 开播时间
"live_time": "",
"amap": {
"1": ""
},
"rate": 6.02214129e23,
// 用户mid
"mid": 0
}
}
```
## /xlive/live-demo/foo/uname_by_uid3
### 根据uid得到uname v3
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|否|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```
## /xlive/internal/live-demo/foo/uname_by_uid4
### test comment
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|否|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```
## /xlive/live-demo/foo/get_dynamic
### 无标题
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|否|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```
## /xlive/live-demo/foo/nointerface
### 无标题
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|否|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```

View File

@@ -0,0 +1,47 @@
<!-- package=live.livedemo -->
- [/xlive/live-demo/foo2/hello](#xlivelive-demofoo2hello)
## /xlive/live-demo/foo2/hello
### 无标题
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|否|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,79 @@
syntax = "proto3";
package live.livedemo;
option go_package = "livedemo";
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
// Foo 相关服务
service Foo {
// 根据uid得到uname
// `method:"post" midware:"auth,verify"`
//
// 这是详细说明
rpc uname_by_uid (Bar1Req) returns (Bar1Resp);
// 获取房间信息
// `midware:"guest"`
rpc get_info (GetInfoReq) returns (GetInfoResp);
// 根据uid得到uname v3
rpc uname_by_uid3 (Bar1Req) returns (Bar1Resp);
// test comment
// `internal:"true"`
rpc uname_by_uid4 (Bar1Req) returns (Bar1Resp);
// `dynamic_resp:"true"`
rpc get_dynamic (Bar1Req) returns (Bar1Resp);
// `dynamic:"true"`
rpc nointerface (Bar1Req) returns (Bar1Resp);
}
service Foo2 {
rpc hello (Bar1Req) returns (Bar1Resp);
}
// Bar请求
message Bar1Req {
// 用户uid
int32 uid = 1 [(gogoproto.moretags) = 'form:"uid"'];
}
// Bar 相应
message Bar1Resp {
// 用户名
// `mock:"hello"`
string uname = 2 [(gogoproto.jsontag) = "uname"];
// idshaha
// `mock:"343242"`
repeated int32 ids = 3 [(gogoproto.jsontag) = "ids"];
repeated List list = 4 [(gogoproto.jsontag) = "list"];
List alist = 5 [(gogoproto.jsontag) = "alist"];
message List {
// `mock:"\"withquote"`
string hello = 1 [(gogoproto.jsontag) = "hello"];
string world = 2 [(gogoproto.jsontag) = "world"];
}
map<string, List> amap = 6 [(gogoproto.jsontag) = "amap"];
}
// 获取房间信息请求
message GetInfoReq {
// 房间id
// `mock:"123"
int64 room_id = 1 [(gogoproto.moretags) = 'form:"room_id" validate:"required"'];
repeated int64 many_ids = 2 [(gogoproto.moretags) = 'form:"many_ids"'];
}
// 获取房间信息响应
message GetInfoResp {
// 房间id 注释貌似只有放在前面才能被识别,放到字段声明后面是没用的
int64 roomid = 1 [(gogoproto.jsontag) = "roomid"]; // 这段注释不会被理会
// 用户名
string uname = 2 [(gogoproto.jsontag) = "uname"];
// 开播时间
string live_time = 3 [(gogoproto.jsontag) = "live_time,omitempty"];
map<int32, string> amap = 4 [(gogoproto.jsontag) = "amap"];
// `mock:"6.02214129e23"`
float rate = 5 [(gogoproto.jsontag) = "rate"];
// 用户mid
int64 mid = 6 [(gogoproto.jsontag) = "mid"];
}

View File

@@ -0,0 +1,63 @@
load(
"@io_bazel_rules_go//proto:def.bzl",
"go_proto_library",
)
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["service.bm.go"],
embed = [":v2_go_proto"],
importpath = "go-common/app/interface/live/live-demo/api/http/v2",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/binding:go_default_library",
"//vendor/google.golang.org/genproto/googleapis/api/annotations:go_default_library",
"@com_github_gogo_protobuf//gogoproto:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
proto_library(
name = "v2_proto",
srcs = ["service.proto"],
tags = ["automanaged"],
deps = [
"@go_googleapis//google/api:annotations_proto",
"@gogo_special_proto//github.com/gogo/protobuf/gogoproto",
],
)
go_proto_library(
name = "v2_go_proto",
compilers = ["@io_bazel_rules_go//proto:gogofast_grpc"],
importpath = "go-common/app/interface/live/live-demo/api/http/v2",
proto = ":v2_proto",
tags = ["automanaged"],
deps = [
"@com_github_gogo_protobuf//gogoproto:go_default_library",
"@go_googleapis//google/api:annotations_go_proto",
],
)

View File

@@ -0,0 +1,175 @@
// Code generated by protoc-gen-bm v0.1, DO NOT EDIT.
// source: service.proto
/*
Package v2 is a generated blademaster stub package.
This code was generated with go-common/app/tool/bmgen/protoc-gen-bm v0.1.
It is generated from these files:
service.proto
*/
package v2
import (
"context"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/binding"
)
// to suppressed 'imported but not used warning'
var _ *bm.Context
var _ context.Context
var _ binding.StructValidator
var PathFooUnameByUid = "/xlive/demo/v1/foo/uname_by_uid_custom_route"
var PathFooGetInfo = "/live.livedemo.v2.Foo/get_info"
var PathFooUnameByUid3 = "/live.livedemo.v2.Foo/uname_by_uid3"
var PathFooUnameByUid4 = "/live.livedemo.v2.Foo/uname_by_uid4"
var PathFooGetDynamic = "/live.livedemo.v2.Foo/get_dynamic"
var PathFooNointerface = "/live.livedemo.v2.Foo/nointerface"
var PathFooJsonReq = "/live.livedemo.v2.Foo/json_req"
var PathFoo2Hello = "/live.livedemo.v2.Foo2/hello"
// =============
// Foo Interface
// =============
// Foo 相关服务
type FooBMServer interface {
// 根据uid得到uname
// `method:"post" midware:"auth,verify"`
//
// 这是详细说明
UnameByUid(ctx context.Context, req *Bar1Req) (resp *Bar1Resp, err error)
// 获取房间信息
// `midware:"guest"`
GetInfo(ctx context.Context, req *GetInfoReq) (resp *GetInfoResp, err error)
// 根据uid得到uname v3
UnameByUid3(ctx context.Context, req *Bar1Req) (resp *Bar1Resp, err error)
// test comment
// `internal:"true"`
UnameByUid4(ctx context.Context, req *Bar1Req) (resp *Bar1Resp, err error)
// `dynamic_resp:"true"`
GetDynamic(ctx context.Context, req *Bar1Req) (resp interface{}, err error)
// `method:"POST"`
JsonReq(ctx context.Context, req *JsonReq) (resp *JsonResp, err error)
}
var v2FooSvc FooBMServer
func fooUnameByUid(c *bm.Context) {
p := new(Bar1Req)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v2FooSvc.UnameByUid(c, p)
c.JSON(resp, err)
}
func fooGetInfo(c *bm.Context) {
p := new(GetInfoReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v2FooSvc.GetInfo(c, p)
c.JSON(resp, err)
}
func fooUnameByUid3(c *bm.Context) {
p := new(Bar1Req)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v2FooSvc.UnameByUid3(c, p)
c.JSON(resp, err)
}
func fooUnameByUid4(c *bm.Context) {
p := new(Bar1Req)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v2FooSvc.UnameByUid4(c, p)
c.JSON(resp, err)
}
func fooGetDynamic(c *bm.Context) {
p := new(Bar1Req)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v2FooSvc.GetDynamic(c, p)
c.JSON(resp, err)
}
func fooJsonReq(c *bm.Context) {
p := new(JsonReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v2FooSvc.JsonReq(c, p)
c.JSON(resp, err)
}
// RegisterV2FooService Register the blademaster route with middleware map
// midMap is the middleware map, the key is defined in proto
func RegisterV2FooService(e *bm.Engine, svc FooBMServer, midMap map[string]bm.HandlerFunc) {
auth := midMap["auth"]
guest := midMap["guest"]
verify := midMap["verify"]
v2FooSvc = svc
e.GET("/xlive/demo/v1/foo/uname_by_uid_custom_route", auth, verify, fooUnameByUid)
e.GET("/xlive/live-demo/v2/foo/get_info", guest, fooGetInfo)
e.GET("/xlive/live-demo/v2/foo/uname_by_uid3", fooUnameByUid3)
e.GET("/xlive/internal/live-demo/v2/foo/uname_by_uid4", fooUnameByUid4)
e.GET("/xlive/live-demo/v2/foo/get_dynamic", fooGetDynamic)
e.POST("/xlive/live-demo/v2/foo/json_req", fooJsonReq)
}
// RegisterFooBMServer Register the blademaster route
func RegisterFooBMServer(e *bm.Engine, server FooBMServer) {
e.GET("/xlive/demo/v1/foo/uname_by_uid_custom_route", fooUnameByUid)
e.GET("/live.livedemo.v2.Foo/get_info", fooGetInfo)
e.GET("/live.livedemo.v2.Foo/uname_by_uid3", fooUnameByUid3)
e.GET("/live.livedemo.v2.Foo/uname_by_uid4", fooUnameByUid4)
e.GET("/live.livedemo.v2.Foo/get_dynamic", fooGetDynamic)
e.POST("/live.livedemo.v2.Foo/json_req", fooJsonReq)
}
// ==============
// Foo2 Interface
// ==============
type Foo2BMServer interface {
Hello(ctx context.Context, req *Bar1Req) (resp *Bar1Resp, err error)
}
var v2Foo2Svc Foo2BMServer
func foo2Hello(c *bm.Context) {
p := new(Bar1Req)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v2Foo2Svc.Hello(c, p)
c.JSON(resp, err)
}
// RegisterV2Foo2Service Register the blademaster route with middleware map
// midMap is the middleware map, the key is defined in proto
func RegisterV2Foo2Service(e *bm.Engine, svc Foo2BMServer, midMap map[string]bm.HandlerFunc) {
v2Foo2Svc = svc
e.GET("/xlive/live-demo/v2/foo2/hello", foo2Hello)
}
// RegisterFoo2BMServer Register the blademaster route
func RegisterFoo2BMServer(e *bm.Engine, server Foo2BMServer) {
e.GET("/live.livedemo.v2.Foo2/hello", foo2Hello)
}

View File

@@ -0,0 +1,305 @@
<!-- package=live.livedemo.v2 -->
- [/xlive/demo/v1/foo/uname_by_uid_custom_route](#xlivedemov1foouname_by_uid_custom_route) 根据uid得到uname
- [/xlive/live-demo/v2/foo/get_info](#xlivelive-demov2fooget_info) 获取房间信息
- [/xlive/live-demo/v2/foo/uname_by_uid3](#xlivelive-demov2foouname_by_uid3) 根据uid得到uname v3
- [/xlive/internal/live-demo/v2/foo/uname_by_uid4](#xliveinternallive-demov2foouname_by_uid4) test comment
- [/xlive/live-demo/v2/foo/get_dynamic](#xlivelive-demov2fooget_dynamic)
- [/xlive/live-demo/v2/foo/nointerface](#xlivelive-demov2foonointerface)
- [/xlive/live-demo/v2/foo/json_req](#xlivelive-demov2foojson_req)
## /xlive/demo/v1/foo/uname_by_uid_custom_route
### 根据uid得到uname
这是详细说明
> 需要登录
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|是|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```
## /xlive/live-demo/v2/foo/get_info
### 获取房间信息
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|room_id|是|integer| 房间id `mock:"123"|
|many_ids|否|多个integer||
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 房间id 注释貌似只有放在前面才能被识别,放到字段声明后面是没用的
"roomid": 0,
// 用户名
"uname": "",
// 开播时间
"live_time": "",
"amap": {
"1": ""
},
"rate": 6.02214129e23,
// 用户mid
"mid": 0
}
}
```
## /xlive/live-demo/v2/foo/uname_by_uid3
### 根据uid得到uname v3
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|是|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```
## /xlive/internal/live-demo/v2/foo/uname_by_uid4
### test comment
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|是|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```
## /xlive/live-demo/v2/foo/get_dynamic
### 无标题
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|是|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```
## /xlive/live-demo/v2/foo/nointerface
### 无标题
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|是|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```
## /xlive/live-demo/v2/foo/json_req
### 无标题
#### 方法POST
#### 请求参数
```javascript
{
// json请求参数
"p1": "",
"p2": {
// param
"param": ""
}
}
```
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// json请求响应
"p1": ""
}
}
```

View File

@@ -0,0 +1,47 @@
<!-- package=live.livedemo.v2 -->
- [/xlive/live-demo/v2/foo2/hello](#xlivelive-demov2foo2hello)
## /xlive/live-demo/v2/foo2/hello
### 无标题
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|是|integer| 用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 用户名
"uname": "hello",
// idshaha
"ids": [
343242
],
"list": [
{
"hello": "\"withquote",
"world": ""
}
],
"alist": {
"hello": "\"withquote",
"world": ""
},
"amap": {
"mapKey": {
"hello": "\"withquote",
"world": ""
}
}
}
}
```

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,101 @@
syntax = "proto3";
package live.livedemo.v2;
option go_package = "v2";
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
import "google/api/annotations.proto";
// Foo 相关服务
service Foo {
// 根据uid得到uname
// `method:"post" midware:"auth,verify"`
//
// 这是详细说明
rpc uname_by_uid (Bar1Req) returns (Bar1Resp) {
option (google.api.http) = {
get:"/xlive/demo/v1/foo/uname_by_uid_custom_route"
};
}
// 获取房间信息
// `midware:"guest"`
rpc get_info (GetInfoReq) returns (GetInfoResp);
// 根据uid得到uname v3
rpc uname_by_uid3 (Bar1Req) returns (Bar1Resp);
// test comment
// `internal:"true"`
rpc uname_by_uid4 (Bar1Req) returns (Bar1Resp);
// `dynamic_resp:"true"`
rpc get_dynamic (Bar1Req) returns (Bar1Resp);
// `dynamic:"true"`
rpc nointerface (Bar1Req) returns (Bar1Resp);
// `method:"POST"`
rpc json_req(JsonReq) returns (JsonResp);
}
message JsonReq {
// json请求参数
string p1 = 1;
JsonSubMessage p2 = 2;
}
message JsonSubMessage {
// param
string param = 1;
}
message JsonResp {
// json请求响应
string p1 = 1;
}
service Foo2 {
rpc hello (Bar1Req) returns (Bar1Resp);
}
// Bar请求
message Bar1Req {
// 用户uid
int32 uid = 1 [(gogoproto.moretags) = 'form:"uid" validate:"required"'];
}
// Bar 相应
message Bar1Resp {
// 用户名
// `mock:"hello"`
string uname = 2 [(gogoproto.jsontag) = "uname"];
// idshaha
// `mock:"343242"`
repeated int32 ids = 3 [(gogoproto.jsontag) = "ids"];
repeated List list = 4 [(gogoproto.jsontag) = "list"];
List alist = 5 [(gogoproto.jsontag) = "alist"];
message List {
// `mock:"\"withquote"`
string hello = 1 [(gogoproto.jsontag) = "hello"];
string world = 2 [(gogoproto.jsontag) = "world"];
}
map<string, List> amap = 6 [(gogoproto.jsontag) = "amap"];
}
// 获取房间信息请求
message GetInfoReq {
// 房间id
// `mock:"123"
int64 room_id = 1 [(gogoproto.moretags) = 'form:"room_id" validate:"required"'];
repeated int64 many_ids = 2 [(gogoproto.moretags) = 'form:"many_ids"'];
}
// 获取房间信息响应
message GetInfoResp {
// 房间id 注释貌似只有放在前面才能被识别,放到字段声明后面是没用的
int64 roomid = 1 [(gogoproto.jsontag) = "roomid"]; // 这段注释不会被理会
// 用户名
string uname = 2 [(gogoproto.jsontag) = "uname"];
// 开播时间
string live_time = 3 [(gogoproto.jsontag) = "live_time"];
map<int32, string> amap = 4 [(gogoproto.jsontag) = "amap"];
// `mock:"6.02214129e23"`
float rate = 5 [(gogoproto.jsontag) = "rate"];
// 用户mid
int64 mid = 6 [(gogoproto.jsontag) = "mid"];
}

View File

@@ -0,0 +1,43 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_binary",
"go_library",
)
go_binary(
name = "cmd",
embed = [":go_default_library"],
tags = ["automanaged"],
)
go_library(
name = "go_default_library",
srcs = ["main.go"],
data = ["test.toml"],
importpath = "go-common/app/interface/live/live-demo/cmd",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/live-demo/conf:go_default_library",
"//app/interface/live/live-demo/server/http:go_default_library",
"//library/ecode/tip:go_default_library",
"//library/log:go_default_library",
"//library/net/trace:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,42 @@
package main
import (
"flag"
"os"
"os/signal"
"syscall"
"go-common/app/interface/live/live-demo/conf"
"go-common/app/interface/live/live-demo/server/http"
ecode "go-common/library/ecode/tip"
"go-common/library/log"
"go-common/library/net/trace"
)
func main() {
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
log.Init(conf.Conf.Log)
defer log.Close()
log.Info("start")
trace.Init(conf.Conf.Tracer)
defer trace.Close()
ecode.Init(conf.Conf.Ecode)
http.Init(conf.Conf)
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
for {
s := <-c
log.Info("get a signal %s", s.String())
switch s {
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
log.Info("exit")
return
case syscall.SIGHUP:
default:
return
}
}
}

View File

@@ -0,0 +1,15 @@
[log]
stdout = true
[redis]
name = "live-demo-interface"
proto = "tcp"
addr = ""
idle = 10
active = 10
dialTimeout = "1s"
readTimeout = "1s"
writeTimeout = "1s"
idleTimeout = "10s"
expire = "1m"

View File

@@ -0,0 +1,38 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["conf.go"],
importpath = "go-common/app/interface/live/live-demo/conf",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//library/cache/redis:go_default_library",
"//library/conf:go_default_library",
"//library/ecode/tip:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//library/net/rpc/liverpc:go_default_library",
"//library/net/trace:go_default_library",
"//vendor/github.com/BurntSushi/toml:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,85 @@
package conf
import (
"errors"
"flag"
"go-common/library/cache/redis"
"go-common/library/conf"
ecode "go-common/library/ecode/tip"
"go-common/library/log"
"go-common/library/net/http/blademaster/middleware/verify"
"go-common/library/net/rpc/liverpc"
"go-common/library/net/trace"
"github.com/BurntSushi/toml"
)
var (
confPath string
client *conf.Client
// Conf config
Conf = &Config{}
)
// Config .
type Config struct {
Version string
Log *log.Config
Verify *verify.Config
Tracer *trace.Config
Redis *redis.Config
Ecode *ecode.Config
LiveRpc map[string]*liverpc.ClientConfig
}
func init() {
flag.StringVar(&confPath, "conf", "", "default config path")
}
// Init init conf
func Init() error {
if confPath != "" {
return local()
}
return remote()
}
func local() (err error) {
_, err = toml.DecodeFile(confPath, &Conf)
return
}
func remote() (err error) {
if client, err = conf.New(); err != nil {
return
}
if err = load(); err != nil {
return
}
go func() {
for range client.Event() {
log.Info("config reload")
if load() != nil {
log.Error("config reload error (%v)", err)
}
}
}()
return
}
func load() (err error) {
var (
s string
ok bool
tmpConf *Config
)
if s, ok = client.Toml2(); !ok {
return errors.New("load config center error")
}
if _, err = toml.Decode(s, &tmpConf); err != nil {
return errors.New("could not decode config")
}
*Conf = *tmpConf
return
}

View File

@@ -0,0 +1,36 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["api.go"],
importpath = "go-common/app/interface/live/live-demo/dao",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/live-demo/conf:go_default_library",
"//app/service/live/room/api/liverpc:go_default_library",
"//library/net/rpc/liverpc:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/interface/live/live-demo/dao/foo:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,23 @@
package dao
import (
"go-common/app/interface/live/live-demo/conf"
room_api "go-common/app/service/live/room/api/liverpc"
"go-common/library/net/rpc/liverpc"
)
// RoomAPI liverpc room-service api
var RoomAPI *room_api.Client
// InitAPI init all service APIs
func InitAPI() {
RoomAPI = room_api.New(getConf("room"))
}
func getConf(appName string) *liverpc.ClientConfig {
c := conf.Conf.LiveRpc
if c != nil {
return c[appName]
}
return nil
}

View File

@@ -0,0 +1,32 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/live/live-demo/dao/foo",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/live-demo/conf:go_default_library",
"//library/cache/redis:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,35 @@
package foo
import (
"context"
"go-common/app/interface/live/live-demo/conf"
"go-common/library/cache/redis"
)
// Dao dao
type Dao struct {
c *conf.Config
redis *redis.Pool
}
// New init
func New(c *conf.Config) (dao *Dao) {
dao = &Dao{
c: c,
redis: redis.NewPool(c.Redis),
}
return
}
// Close close the resource.
func (d *Dao) Close() {
d.redis.Close()
}
// Ping dao ping
func (d *Dao) Ping(c context.Context) error {
// TODO: if you need use mc,redis, please add
_, err := d.redis.Get(c).Do("ping")
return err
}

View File

@@ -0,0 +1,40 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["http.go"],
importpath = "go-common/app/interface/live/live-demo/server/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/live-demo/api/http:go_default_library",
"//app/interface/live/live-demo/api/http/v2:go_default_library",
"//app/interface/live/live-demo/conf:go_default_library",
"//app/interface/live/live-demo/dao:go_default_library",
"//app/interface/live/live-demo/service:go_default_library",
"//app/interface/live/live-demo/service/v2:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/auth:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,73 @@
// Package http is where http server init,
// including routes
package http
import (
"net/http"
pb "go-common/app/interface/live/live-demo/api/http"
v2pb "go-common/app/interface/live/live-demo/api/http/v2"
"go-common/app/interface/live/live-demo/conf"
"go-common/app/interface/live/live-demo/dao"
svc "go-common/app/interface/live/live-demo/service"
"go-common/app/interface/live/live-demo/service/v2"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/auth"
"go-common/library/net/http/blademaster/middleware/verify"
)
var (
vfy *verify.Verify
midAuth *auth.Auth
)
// Init init
func Init(c *conf.Config) {
dao.InitAPI()
initMiddleware(c)
engine := bm.DefaultServer(nil)
route(engine)
if err := engine.Start(); err != nil {
log.Error("bm Start error(%v)", err)
panic(err)
}
}
func initMiddleware(c *conf.Config) {
vfy = verify.New(c.Verify)
midAuth = auth.New(nil)
}
func route(e *bm.Engine) {
e.Ping(ping)
e.Register(register)
g := e.Group("/x/live-demo")
{
g.GET("/start", vfy.Verify, howToStart)
}
midMap := map[string]bm.HandlerFunc{
"auth": midAuth.User,
"guest": midAuth.Guest,
"verify": vfy.Verify}
v2pb.RegisterV2FooService(e, v2.NewFooService(conf.Conf), midMap)
v2pb.RegisterV2Foo2Service(e, v2.NewFoo2Service(conf.Conf), midMap)
pb.RegisterFooService(e, svc.NewFooService(conf.Conf), midMap)
pb.RegisterFoo2Service(e, svc.NewFoo2Service(conf.Conf), midMap)
e.Inject(pb.PathFooGetInfo, midAuth.User)
pb.RegisterFooBMServer(e, svc.NewFooService(conf.Conf))
}
func ping(c *bm.Context) {
c.AbortWithStatus(http.StatusOK)
}
func register(c *bm.Context) {
c.JSON(map[string]interface{}{}, nil)
}
// example for http request handler
func howToStart(c *bm.Context) {
c.String(0, "Golang 大法好 !!!")
}

View File

@@ -0,0 +1,38 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"foo.go",
"foo2.go",
],
importpath = "go-common/app/interface/live/live-demo/service",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/live-demo/api/http:go_default_library",
"//app/interface/live/live-demo/conf:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/interface/live/live-demo/service/v2:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,72 @@
package livedemo
import (
"context"
pb "go-common/app/interface/live/live-demo/api/http"
"go-common/app/interface/live/live-demo/conf"
)
// FooService struct
type FooService struct {
conf *conf.Config
// optionally add other properties here, such as dao
// dao *dao.Dao
}
//NewFooService init
func NewFooService(c *conf.Config) (s *FooService) {
s = &FooService{
conf: c,
}
return s
}
// Foo 相关服务
// UnameByUid implementation
// 根据uid得到uname
// `method:"post" midware:"auth,verify"`
//
// 这是详细说明
func (s *FooService) UnameByUid(ctx context.Context, req *pb.Bar1Req) (resp *pb.Bar1Resp, err error) {
resp = &pb.Bar1Resp{}
return
}
// GetInfo implementation
// 获取房间信息
// `midware:"guest"`
func (s *FooService) GetInfo(ctx context.Context, req *pb.GetInfoReq) (resp *pb.GetInfoResp, err error) {
resp = &pb.GetInfoResp{}
return
}
// UnameByUid3 implementation
// 根据uid得到uname v3
func (s *FooService) UnameByUid3(ctx context.Context, req *pb.Bar1Req) (resp *pb.Bar1Resp, err error) {
resp = &pb.Bar1Resp{}
return
}
// UnameByUid4 implementation
// test comment
// `internal:"true"`
func (s *FooService) UnameByUid4(ctx context.Context, req *pb.Bar1Req) (resp *pb.Bar1Resp, err error) {
resp = &pb.Bar1Resp{}
return
}
// GetDynamic implementation
// `dynamic_resp:"true"`
func (s *FooService) GetDynamic(ctx context.Context, req *pb.Bar1Req) (resp interface{}, err error) {
resp = &pb.Bar1Resp{}
return
}
// Nointerface implementation
// `dynamic:"true"`
func (s *FooService) Nointerface(ctx context.Context, req *pb.Bar1Req) (resp *pb.Bar1Resp, err error) {
resp = &pb.Bar1Resp{}
return
}

View File

@@ -0,0 +1,29 @@
package livedemo
import (
"context"
pb "go-common/app/interface/live/live-demo/api/http"
"go-common/app/interface/live/live-demo/conf"
)
// Foo2Service struct
type Foo2Service struct {
conf *conf.Config
// optionally add other properties here, such as dao
// dao *dao.Dao
}
//NewFoo2Service init
func NewFoo2Service(c *conf.Config) (s *Foo2Service) {
s = &Foo2Service{
conf: c,
}
return s
}
// Hello implementation
func (s *Foo2Service) Hello(ctx context.Context, req *pb.Bar1Req) (resp *pb.Bar1Resp, err error) {
resp = &pb.Bar1Resp{}
return
}

View File

@@ -0,0 +1,56 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["service_test.go"],
embed = [":go_default_library"],
tags = ["automanaged"],
deps = [
"//app/interface/live/live-demo/api/http/v2:go_default_library",
"//app/interface/live/live-demo/conf:go_default_library",
"//app/interface/live/live-demo/dao:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"foo.go",
"foo2.go",
],
importpath = "go-common/app/interface/live/live-demo/service/v2",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/live-demo/api/http/v2:go_default_library",
"//app/interface/live/live-demo/conf:go_default_library",
"//app/interface/live/live-demo/dao:go_default_library",
"//app/service/live/room/api/liverpc/v2:go_default_library",
"//library/ecode:go_default_library",
"//library/ecode/pb:go_default_library",
"//library/log:go_default_library",
"//library/net/metadata:go_default_library",
"//vendor/github.com/pkg/errors:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,103 @@
package v2
import (
"context"
v2pb "go-common/app/interface/live/live-demo/api/http/v2"
"go-common/app/interface/live/live-demo/conf"
"go-common/app/interface/live/live-demo/dao"
"go-common/app/service/live/room/api/liverpc/v2"
"go-common/library/ecode"
"go-common/library/ecode/pb"
"go-common/library/log"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
// FooService struct
type FooService struct {
conf *conf.Config
// optionally add other properties here, such as dao
// dao *dao.Dao
}
//NewFooService init
func NewFooService(c *conf.Config) (s *FooService) {
s = &FooService{
conf: c,
}
return s
}
// Foo 相关服务
// UnameByUid implementation
// 根据uid得到uname
// `method:"post" midware:"auth,verify"`
//
// 这是详细说明
func (s *FooService) UnameByUid(ctx context.Context, req *v2pb.Bar1Req) (resp *v2pb.Bar1Resp, err error) {
resp = &v2pb.Bar1Resp{}
return
}
// GetInfo implementation
// 获取房间信息
func (s *FooService) GetInfo(ctx context.Context, req *v2pb.GetInfoReq) (resp *v2pb.GetInfoResp, err error) {
//msg = "hello"
reply, err := dao.RoomAPI.V2Room.GetByIds(ctx, &v2.RoomGetByIdsReq{Ids: []int64{int64(req.RoomId)}})
if err != nil {
err = errors.Wrap(&pb.Error{ErrCode: 1, ErrMessage: "call room error"}, err.Error())
//msg = "Call Room Err"
return
}
log.Info("req is %v\n", req.RoomId)
room, ok := reply.Data[req.RoomId]
if !ok {
err = ecode.RoomNotFound
return
}
resp = &v2pb.GetInfoResp{}
resp.Roomid = room.Roomid
resp.Uname = room.Uname
resp.Amap = map[int32]string{123: "world"}
mid, _ := metadata.Value(ctx, "mid").(int64)
resp.Mid = mid
//resp.LiveTime = room.LiveTime
return
}
// UnameByUid3 implementation
// 根据uid得到uname v3
func (s *FooService) UnameByUid3(ctx context.Context, req *v2pb.Bar1Req) (resp *v2pb.Bar1Resp, err error) {
resp = &v2pb.Bar1Resp{}
return
}
// UnameByUid4 implementation
// test comment
func (s *FooService) UnameByUid4(ctx context.Context, req *v2pb.Bar1Req) (resp *v2pb.Bar1Resp, err error) {
resp = &v2pb.Bar1Resp{}
return
}
// GetDynamic implementation
// `dynamic_resp:"true"`
func (s *FooService) GetDynamic(ctx context.Context, req *v2pb.Bar1Req) (resp interface{}, err error) {
resp = &v2pb.Bar1Resp{Uname: "hehe"}
return
}
// Nointerface implementation
// `dynamic:"true"`
func (s *FooService) Nointerface(ctx context.Context, req *v2pb.Bar1Req) (resp *v2pb.Bar1Resp, err error) {
resp = &v2pb.Bar1Resp{}
return
}
// JsonReq implementation
func (s *FooService) JsonReq(ctx context.Context, req *v2pb.JsonReq) (resp *v2pb.JsonResp, err error) {
resp = &v2pb.JsonResp{P1: req.P1}
return
}

View File

@@ -0,0 +1,29 @@
package v2
import (
"context"
v2pb "go-common/app/interface/live/live-demo/api/http/v2"
"go-common/app/interface/live/live-demo/conf"
)
// Foo2Service struct
type Foo2Service struct {
conf *conf.Config
// optionally add other properties here, such as dao
// dao *dao.Dao
}
//NewFoo2Service init
func NewFoo2Service(c *conf.Config) (s *Foo2Service) {
s = &Foo2Service{
conf: c,
}
return s
}
// Hello implementation
func (s *Foo2Service) Hello(ctx context.Context, req *v2pb.Bar1Req) (resp *v2pb.Bar1Resp, err error) {
resp = &v2pb.Bar1Resp{}
return
}

View File

@@ -0,0 +1,36 @@
package v2
import (
"context"
"flag"
"testing"
foo "go-common/app/interface/live/live-demo/api/http/v2"
"go-common/app/interface/live/live-demo/conf"
"go-common/app/interface/live/live-demo/dao"
. "github.com/smartystreets/goconvey/convey"
)
var (
s *FooService
)
func init() {
flag.Set("conf", "../../cmd/test.toml")
var err error
if err = conf.Init(); err != nil {
panic(err)
}
s = NewFooService(conf.Conf)
dao.InitAPI()
}
// go test -test.v -test.run TestService_GetInfo
func TestService_GetInfo(t *testing.T) {
Convey("TestService_GetInfo", t, func() {
res, err := s.GetInfo(context.TODO(), &foo.GetInfoReq{RoomId: 10002})
t.Logf("%v msg", res)
So(err, ShouldBeNil)
})
}