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,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",
"grpc.go",
],
importpath = "go-common/app/interface/live/open-interface/internal/dao",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = ["//app/service/live/broadcast-proxy/api/v1: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,88 @@
package dao
import (
"context"
)
// Dao dao.
type Dao struct {
// db *sql.DB
// redis *redis.Pool
// redisExpire int32
// mc *memcache.Pool
// mcExpire int32
}
// func checkErr(err error) {
// if err != nil {
// panic(err)
// }
// }
// New new a dao and return.
func New() (dao *Dao) {
// var (
// dc struct {
// Demo *sql.Config
// }
// rc struct {
// Demo *redis.Config
// DemoExpire xtime.Duration
// }
// mc struct {
// Demo *memcache.Config
// DemoExpire xtime.Duration
// }
// )
// checkErr(paladin.Get("mysql.toml").UnmarshalTOML(&dc))
// checkErr(paladin.Get("redis.toml").UnmarshalTOML(&rc))
// checkErr(paladin.Get("memcache.toml").UnmarshalTOML(&mc))
dao = &Dao{
// // mysql
// db: sql.NewMySQL(dc.Demo),
// // redis
// redis: redis.NewPool(rc.Demo),
// redisExpire: int32(time.Duration(rc.DemoExpire) / time.Second),
// // memcache
// mc: memcache.NewPool(mc.Demo),
// mcExpire: int32(time.Duration(mc.DemoExpire) / time.Second),
}
return
}
// Close close the resource.
func (d *Dao) Close() {
// d.mc.Close()
// d.redis.Close()
// d.db.Close()
}
// Ping ping the resource.
func (d *Dao) Ping(ctx context.Context) (err error) {
// if err = d.pingMC(ctx); err != nil {
// return
// }
// if err = d.pingRedis(ctx); err != nil {
// return
// }
// return d.db.Ping(ctx)
return nil
}
// func (d *Dao) pingMC(ctx context.Context) (err error) {
// conn := d.mc.Get(ctx)
// defer conn.Close()
// if err = conn.Set(&memcache.Item{Key: "ping", Value: []byte("pong"), Expiration: 0}); err != nil {
// log.Error("conn.Set(PING) error(%v)", err)
// }
// return
// }
// func (d *Dao) pingRedis(ctx context.Context) (err error) {
// conn := d.redis.Get(ctx)
// defer conn.Close()
// if _, err = conn.Do("SET", "ping", "pong"); err != nil {
// log.Error("conn.Set(PING) error(%v)", err)
// }
// return
// }

View File

@ -0,0 +1,19 @@
package dao
import (
broadcasrtService "go-common/app/service/live/broadcast-proxy/api/v1"
)
var (
//BcastClient 弹幕服务
BcastClient *broadcasrtService.Client
)
//InitGrpc 初始化grpcclient
func InitGrpc() {
var err error
BcastClient, err = broadcasrtService.NewClient(nil)
if err != nil {
panic(err)
}
}

View File

@ -0,0 +1,28 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["model.go"],
importpath = "go-common/app/interface/live/open-interface/internal/model",
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
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 @@
package model

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 = ["http.go"],
importpath = "go-common/app/interface/live/open-interface/internal/server/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/open-interface/api/http/v1:go_default_library",
"//app/interface/live/open-interface/internal/service:go_default_library",
"//library/conf/paladin:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster: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,63 @@
package http
import (
"net/http"
dmv1pb "go-common/app/interface/live/open-interface/api/http/v1"
"go-common/app/interface/live/open-interface/internal/service"
"go-common/library/conf/paladin"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/verify"
)
var (
svc *service.Service
)
// New new a bm server.
func New(s *service.Service) (engine *bm.Engine) {
var (
hc struct {
Server *bm.ServerConfig
}
)
if err := paladin.Get("http.toml").UnmarshalTOML(&hc); err != nil {
if err != paladin.ErrNotExist {
panic(err)
}
}
svc = s
engine = bm.DefaultServer(hc.Server)
initRouter(engine, verify.New(nil))
if err := engine.Start(); err != nil {
panic(err)
}
return
}
func initRouter(e *bm.Engine, v *verify.Verify) {
e.Ping(ping)
e.Register(register)
g := e.Group("/x/open-interface")
{
g.GET("/start", v.Verify, howToStart)
}
dmv1pb.RegisterDmBMServer(e, svc)
}
func ping(ctx *bm.Context) {
if err := svc.Ping(ctx); err != nil {
log.Error("ping error(%v)", err)
ctx.AbortWithStatus(http.StatusServiceUnavailable)
}
}
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,41 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"dm.go",
"service.go",
],
importpath = "go-common/app/interface/live/open-interface/internal/service",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/open-interface/api/http/v1:go_default_library",
"//app/interface/live/open-interface/internal/dao:go_default_library",
"//app/service/live/broadcast-proxy/api/v1:go_default_library",
"//app/service/live/resource/sdk:go_default_library",
"//library/conf/paladin:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/metadata: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,101 @@
package service
import (
"context"
"crypto/md5"
"encoding/json"
"fmt"
"math"
"strconv"
"time"
dmv1pb "go-common/app/interface/live/open-interface/api/http/v1"
"go-common/app/interface/live/open-interface/internal/dao"
broadcasrtService "go-common/app/service/live/broadcast-proxy/api/v1"
titansSdk "go-common/app/service/live/resource/sdk"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/net/metadata"
)
func checksign(ts string, sign string, group string) bool {
sts := time.Now().Unix()
cts, _ := strconv.ParseInt(ts, 10, 64)
dv := sts - cts
if math.Abs(float64(dv)) > 5 {
log.Info("[dm] ts err: %+d", dv)
return false
}
userSecrets, terr := titansSdk.Get("dmUser")
if terr != nil {
log.Error("[dm] get titan conf err: %+v", terr)
return false
}
juserSecrets := make(map[string]string)
if jerr := json.Unmarshal([]byte(userSecrets), &juserSecrets); jerr != nil {
log.Error("[dm] JSON decode titan conf err: %+v", terr)
return false
}
secret, ok := juserSecrets[group]
if !ok {
log.Info("[dm] unknow group: %+v", group)
return false
}
newSign := fmt.Sprintf("%x", md5.Sum([]byte(group+secret+ts)))
if newSign != sign {
log.Info("[dm] check sign err sign: %+s service sign: %s", sign, newSign)
return false
}
return true
}
//Sendmsg 发送弹幕消息
func (s *Service) Sendmsg(ctx context.Context, req *dmv1pb.SendMsgReq) (resp *dmv1pb.SendMsgResp, err error) {
if ok := checksign(req.GetTs(), req.GetSign(), req.GetGroup()); !ok {
return nil, ecode.Error(-403, "sign or ts error")
}
var dmString = "{\"cmd\":\"DANMU_MSG\",\"info\":[[0,1,25,16777215,%d,0,0,\"\",0,0,0],\"%s\",[0,\"\",0,0,0,0,0,\"\"],[],[0,0,0,\"\"],[\"\",\"\"],0,0]}"
breq := &broadcasrtService.RoomMessageRequest{
RoomId: int32(req.GetRoomID()),
Message: fmt.Sprintf(dmString, time.Now().Unix(), req.GetMsg()),
}
_, berr := dao.BcastClient.DanmakuClient.RoomMessage(ctx, breq)
if berr != nil {
log.Error("[dm] SendBroadCastGrpc err: %+v", berr)
return nil, ecode.Error(-400, "send msg err")
}
return
}
//GetConf 获取弹幕配置
func (s *Service) GetConf(ctx context.Context, req *dmv1pb.GetConfReq) (resp *dmv1pb.GetConfResp, err error) {
if ok := checksign(req.GetTs(), req.GetSign(), req.GetGroup()); !ok {
return nil, ecode.Error(-403, "sign or ts error")
}
resp = &dmv1pb.GetConfResp{
WSPort: []int64{2244},
WSSPort: []int64{443},
TCPPort: []int64{2243, 80},
DomianList: []string{},
}
breq := &broadcasrtService.DispatchRequest{
UserIp: metadata.String(ctx, metadata.RemoteIP),
}
bresp, berr := dao.BcastClient.Dispatch(ctx, breq)
if berr != nil {
resp.IPList = []string{"broadcastlv.chat.bilibili.com"}
resp.DomianList = []string{"broadcastlv.chat.bilibili.com"}
log.Error("[dm] get IPList by BcastClient Dispatch err:%+v", berr)
} else {
resp.IPList = bresp.Ip
resp.DomianList = bresp.Host
}
return resp, nil
}

View File

@ -0,0 +1,50 @@
package service
import (
"context"
"go-common/app/interface/live/open-interface/internal/dao"
titansSdk "go-common/app/service/live/resource/sdk"
"go-common/library/conf/paladin"
)
// Service service.
type Service struct {
ac *paladin.Map
dao *dao.Dao
}
// New new a service and return.
func New() (s *Service) {
var ac = new(paladin.TOML)
if err := paladin.Watch("application.toml", ac); err != nil {
panic(err)
}
s = &Service{
ac: ac,
dao: dao.New(),
}
dao.InitGrpc()
InitTitan()
return s
}
//InitTitan 初始化kv配置
func InitTitan() {
conf := &titansSdk.Config{
TreeId: 82686,
Expire: 1,
}
titansSdk.Init(conf)
}
// Ping ping the resource.
func (s *Service) Ping(ctx context.Context) (err error) {
return s.dao.Ping(ctx)
}
// Close close the resource.
func (s *Service) Close() {
s.dao.Close()
}