master
dian.chen 2 years ago
parent 9ceb30d0d7
commit 022fcf092d

@ -1,13 +1,13 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="go build main.go" type="GoApplicationRunConfiguration" factoryName="Go Application" nameIsGenerated="true"> <configuration default="false" name="go build app/cmd/main" type="GoApplicationRunConfiguration" factoryName="Go Application" nameIsGenerated="true">
<module name="sumo_server" /> <module name="dy_server" />
<working_directory value="$PROJECT_DIR$" /> <working_directory value="$PROJECT_DIR$" />
<envs> <envs>
<env name="REDIS_URL" value="redis://:adhd@123@101.35.201.220:6381/2?protocol=3" /> <env name="REDIS_URL" value="redis://:adhd@123@101.35.201.220:6381/2?protocol=3" />
</envs> </envs>
<kind value="FILE" /> <kind value="DIRECTORY" />
<package value="app/cmd/main" /> <package value="app/cmd/main" />
<directory value="$PROJECT_DIR$" /> <directory value="$PROJECT_DIR$/cmd/main" />
<filePath value="$PROJECT_DIR$/cmd/main/main.go" /> <filePath value="$PROJECT_DIR$/cmd/main/main.go" />
<method v="2" /> <method v="2" />
</configuration> </configuration>

@ -1,49 +0,0 @@
package main
import (
"app/network"
"app/service/main/message/pb"
"app/service/main/msg_util"
"app/service/robot/user"
"sync"
)
func main() {
client := network.NewTcpClient(
":8888",
newParser,
newHandler)
err := client.Connect(false)
if err != nil {
return
}
if err != nil {
panic(err)
}
err = client.SendMsg(&pb.Report{
Info: []*pb.ReportInfo{
{
OpenId: "1",
Score: 123,
},
{
OpenId: "2",
Score: 456,
},
},
})
if err != nil {
panic(err)
}
wg := &sync.WaitGroup{}
wg.Add(1)
wg.Wait()
}
func newParser() network.ICodec {
return msg_util.NewProtoCodec(msg_util.NewProtoParser("message", "MSG_TYPE"), 1024*64, false)
}
func newHandler() network.INetHandler {
return user.NewUser()
}

@ -0,0 +1,74 @@
package main
import (
"app/network"
"app/service/main/message/pb"
"app/service/main/msg_util"
"app/service/robot/user"
"math/rand"
"sync"
"testing"
)
func TestName(t *testing.T) {
client := network.NewTcpClient(
"129.211.8.84:8899",
newParser,
newHandler)
err := client.Connect(false)
if err != nil {
panic(err)
}
//登陆
login := &pb.Login{
AppId: "debug",
IsDebug: true,
}
err = client.SendMsg(login)
if err != nil {
panic(err)
}
//上传分数
openIdList := []string{
"7374686837987841059",
"7374698021348676648",
"7372845558429537319",
"7374677100777002003",
"7374698021348660264",
"7374673415892489242",
"7374683012379776011",
"7374686060594746368",
"7374687164753499177",
"7372850431053173801",
}
report := &pb.Report{}
for _, openId := range openIdList {
report.Info = append(report.Info, &pb.ReportInfo{
OpenId: openId,
Score: rand.Int31n(100),
IsWin: rand.Float32() > 0.5,
})
}
err = client.SendMsg(report)
if err != nil {
panic(err)
}
//拉排行榜
rank := &pb.GetRank{
TopCount: 5,
}
err = client.SendMsg(rank)
wg := &sync.WaitGroup{}
wg.Add(1)
wg.Wait()
}
func newParser() network.ICodec {
return msg_util.NewProtoCodec(msg_util.NewProtoParser("message", "MSG_TYPE"), 1024*64, false)
}
func newHandler() network.INetHandler {
return user.NewUser()
}

@ -4,6 +4,7 @@ import (
"app/service/main/message/pb" "app/service/main/message/pb"
"context" "context"
"encoding/json" "encoding/json"
"fmt"
"github.com/redis/go-redis/v9" "github.com/redis/go-redis/v9"
"os" "os"
) )
@ -46,16 +47,23 @@ func GetRank(appId string, topCount int32) ([]*pb.Audience, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
pip := client.Pipeline() var openIdList []string
for _, info := range result { for _, info := range result {
key := ThisWeekScoreKey(appId) openIdList = append(openIdList, info.Member.(string))
}
ret = append(ret, &RankInfo{ audienceBasicList := GetAudienceBasicList(appId, openIdList)
OpenId: info.Member.(string), audienceInfoList := GetAudienceInfoList(appId, openIdList)
Score: int32(info.Score), if len(openIdList) != len(audienceBasicList) || len(openIdList) != len(audienceInfoList) {
return nil, fmt.Errorf("GetRank: len(openIdList) != len(audienceBasicList) || len(openIdList) != len(audienceInfoList)")
}
var ret []*pb.Audience
for i := range openIdList {
ret = append(ret, &pb.Audience{
AudienceBasic: audienceBasicList[i],
AudienceInfo: audienceInfoList[i],
}) })
} }
return rankList, nil return ret, nil
} }
func SetAudienceBasic(appId string, data *pb.AudienceBasic) { func SetAudienceBasic(appId string, data *pb.AudienceBasic) {
@ -68,7 +76,6 @@ func SetAudienceBasic(appId string, data *pb.AudienceBasic) {
if exist == 1 { if exist == 1 {
return return
} }
jsonData, err := json.Marshal(data) jsonData, err := json.Marshal(data)
if err != nil { if err != nil {
return return
@ -106,18 +113,16 @@ func GetAudienceInfo(appId string, openId string) *pb.AudienceInfo {
pip := client.Pipeline() pip := client.Pipeline()
keyScore := ThisWeekScoreKey(appId) keyScore := ThisWeekScoreKey(appId)
keyScoreLast := LastWeekScoreKey(appId) keyScoreLast := LastWeekScoreKey(appId)
keyWiningStreak := WinningStreakKey(appId)
var err error
cmdScore := pip.ZScore(ctx, keyScore, openId) cmdScore := pip.ZScore(ctx, keyScore, openId)
cmdRank := pip.ZRank(ctx, keyScore, openId) cmdRank := pip.ZRank(ctx, keyScore, openId)
cmdRankLast := pip.ZRank(ctx, keyScoreLast, openId) cmdRankLast := pip.ZRank(ctx, keyScoreLast, openId)
result, err := pip.Exec(ctx) cmdWiningStreak := pip.ZScore(ctx, keyWiningStreak, openId)
_, err := pip.Exec(ctx)
if err != nil { if err != nil {
return ret return ret
} }
if len(result) != 3 {
return ret
}
if result, err := cmdScore.Result(); err == nil { if result, err := cmdScore.Result(); err == nil {
ret.Score = int32(result) ret.Score = int32(result)
} }
@ -127,6 +132,9 @@ func GetAudienceInfo(appId string, openId string) *pb.AudienceInfo {
if result, err := cmdRankLast.Result(); err == nil { if result, err := cmdRankLast.Result(); err == nil {
ret.Score = int32(result) ret.Score = int32(result)
} }
if result, err := cmdWiningStreak.Result(); err == nil {
ret.WinningStreak = int32(result)
}
return ret return ret
} }
@ -154,7 +162,48 @@ func GetAudienceBasicList(appId string, openIdList []string) (ret []*pb.Audience
func GetAudienceInfoList(appId string, openIdList []string) (ret []*pb.AudienceInfo) { func GetAudienceInfoList(appId string, openIdList []string) (ret []*pb.AudienceInfo) {
ctx := context.Background() ctx := context.Background()
pip := client.Pipeline()
keyScore := ThisWeekScoreKey(appId)
keyScoreLast := LastWeekScoreKey(appId)
keyWiningStreak := WinningStreakKey(appId)
var cmdScoreList []*redis.FloatCmd
var cmdRankList []*redis.IntCmd
var cmdRankLastList []*redis.IntCmd
var cmdWiningStreakList []*redis.FloatCmd
for _, openId := range openIdList {
cmdScoreList = append(cmdScoreList, pip.ZScore(ctx, keyScore, openId))
cmdRankList = append(cmdRankList, pip.ZRank(ctx, keyScore, openId))
cmdRankLastList = append(cmdRankLastList, pip.ZRank(ctx, keyScoreLast, openId))
cmdWiningStreakList = append(cmdWiningStreakList, pip.ZScore(ctx, keyWiningStreak, openId))
}
_, err := pip.Exec(ctx)
if err != nil {
return ret
}
for i, openId := range openIdList {
cmdScore := cmdScoreList[i]
cmdRank := cmdRankList[i]
cmdRankLast := cmdRankLastList[i]
cmdWiningStreak := cmdWiningStreakList[i]
info := &pb.AudienceInfo{
OpenId: openId,
}
if result, err := cmdScore.Result(); err == nil {
info.Score = int32(result)
}
if result, err := cmdRank.Result(); err == nil {
info.Rank = int32(result)
}
if result, err := cmdRankLast.Result(); err == nil {
info.Score = int32(result)
}
if result, err := cmdWiningStreak.Result(); err == nil {
info.WinningStreak = int32(result)
}
ret = append(ret, info)
}
return ret
} }
func Subscribe(appId string, roomId string, pushFunc func(string), pushCloseChan chan struct{}) { func Subscribe(appId string, roomId string, pushFunc func(string), pushCloseChan chan struct{}) {

@ -161,11 +161,7 @@ func (s *User) OnPlayEnd(msg *pb.PlayEnd) {
s.SendUserMsg(&pb.PlayEndResult{Result: pb.ERROR_CODE_SUCCESS}) s.SendUserMsg(&pb.PlayEndResult{Result: pb.ERROR_CODE_SUCCESS})
} }
func (s *User) OnReport(msg *pb.Report) { func (s *User) OnReport(msg *pb.Report) {
scoreMap := map[string]int32{} err := redis.UpdateReport(s.appId, msg)
for _, info := range msg.Info {
scoreMap[info.OpenId] = info.Score
}
err := redis.UpdateReport(s.appId, scoreMap)
if err != nil { if err != nil {
s.SendUserMsg(&pb.ReportResult{Result: pb.ERROR_CODE_FAIL}) s.SendUserMsg(&pb.ReportResult{Result: pb.ERROR_CODE_FAIL})
return return
@ -175,17 +171,11 @@ func (s *User) OnReport(msg *pb.Report) {
func (s *User) OnGetRank(msg *pb.GetRank) { func (s *User) OnGetRank(msg *pb.GetRank) {
rankList, err := redis.GetRank(s.appId, msg.TopCount) rankList, err := redis.GetRank(s.appId, msg.TopCount)
if err != nil { if err != nil {
s.Log("OnGetRank err", err)
s.SendUserMsg(&pb.GetRankResult{Result: pb.ERROR_CODE_FAIL}) s.SendUserMsg(&pb.GetRankResult{Result: pb.ERROR_CODE_FAIL})
return return
} }
var ret []*pb.ReportInfo s.SendUserMsg(&pb.GetRankResult{Result: pb.ERROR_CODE_SUCCESS, Info: rankList})
for _, info := range rankList {
ret = append(ret, &pb.ReportInfo{
OpenId: info.OpenId,
Score: info.Score,
})
}
s.SendUserMsg(&pb.GetRankResult{Result: pb.ERROR_CODE_SUCCESS, Info: ret})
} }
func (s *User) setPushActive(isActive bool) { func (s *User) setPushActive(isActive bool) {

@ -2,6 +2,7 @@ package user
import ( import (
"app/network" "app/network"
"fmt"
) )
func NewUser() *User { func NewUser() *User {
@ -19,5 +20,5 @@ func (s *User) OnSessionClosed() {
} }
func (s *User) OnRecv(msgId int32, data interface{}) { func (s *User) OnRecv(msgId int32, data interface{}) {
fmt.Println(data)
} }

Loading…
Cancel
Save