package serviceGame
import (
"context"
"fmt"
"github.com/gogf/gf/v2/encoding/gcharset"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"time"
"tyj_admin/api/v1/game"
"tyj_admin/internal/serviceGame/internal"
)
type IGameRole interface {
GetGameRoleListSearch ( ctx context . Context , req * game . RoleSearchReq ) ( res * game . RoleSearchRes , err error )
GetOnlineList ( ctx context . Context , req * game . RoleOnlineReq ) ( res * game . RoleOnlineRes , err error )
GetOnlineTopList ( ctx context . Context , req * game . RoleOnlineTopReq ) ( res * game . RoleOnlineTopRes , err error )
GetAccount ( ctx context . Context , req * game . AccountReq ) ( res * game . AccountRes , err error )
GameRegister ( ctx context . Context , req * game . RegisterReq ) ( res * game . RegisterRes , err error )
GameUnitChangeName ( ctx context . Context , req * game . UnitChangeNameReq ) ( res * game . UnitChangeNameRes , err error )
GetLoginOut ( ctx context . Context , req * game . GetLoginOutReq ) ( res * game . GetLoginOutRes , err error )
GetLoginOutLog ( ctx context . Context , req * game . GetLoginOutLogReq ) ( res * game . GetLoginOutLogRes , err error )
GetItemLog ( ctx context . Context , req * game . GetItemLogReq ) ( res * game . GetItemLogRes , err error )
GetRegister ( ctx context . Context , req * game . GetRegisterReq ) ( res * game . GetRegisterRes , err error )
GameUserDel ( ctx context . Context , req * game . UserDelReq ) ( res * game . UserDelRes , err error )
GetLoginOutGm ( ctx context . Context , req * game . GetLoginOutGmReq ) ( res * game . GetLoginOutGmRes , err error )
}
type gameRoleImpl struct {
}
var gameRoleService = gameRoleImpl { }
func GameRole ( ) IGameRole {
return & gameRoleService
}
// 获取玩家角色列表
func ( s * gameRoleImpl ) GetGameRoleListSearch ( ctx context . Context , req * game . RoleSearchReq ) ( res * game . RoleSearchRes , err error ) {
//res = new(game.RoleSearchRes)
g . Try ( ctx , func ( ctx context . Context ) {
//fmt.Println("GetGameRoleListSearch: ", req)
res , err = internal . GetRoleList ( ctx , req )
} )
return
}
func ( s * gameRoleImpl ) GetOnlineList ( ctx context . Context , req * game . RoleOnlineReq ) ( res * game . RoleOnlineRes , err error ) {
res = new ( game . RoleOnlineRes )
ip := internal . ServerConfig [ fmt . Sprint ( req . ServerId ) ]
url := "http://" + ip + "/GetOnline"
bytes := g . Client ( ) . GetBytes ( ctx , url )
//fmt.Println("GetOnlineList: ", url, bytes)
src := string ( bytes )
if g . IsEmpty ( src ) {
g . Log ( ) . Printf ( ctx , "%d GetOnlineList: gerror.New(\"空回调,发送失败\")" , req . ServerId )
return res , nil
}
srcCharset := "UTF-8"
tmp , _ := gcharset . ToUTF8 ( srcCharset , src )
json , err := gjson . DecodeToJson ( tmp )
if err != nil {
return
}
//fmt.Println("GetOnlineList - json: ", tmp, gjson.MustEncodeString(json.Get("Accounts").Array()))
if json . Get ( "Error" ) . Int ( ) == 200 {
res . Total = len ( json . Get ( "Accounts" ) . Array ( ) )
for _ , v := range json . Get ( "Accounts" ) . Array ( ) {
account := map [ string ] interface { } { }
account [ "id" ] = v
//fmt.Println("GetOnlineList - json: ", v)
account [ "uid" ] , _ = internal . GetStringIdToUid ( ctx , fmt . Sprint ( v ) )
res . Onlines = append ( res . Onlines , account )
if len ( res . Onlines ) >= 50 {
return
}
}
} else {
return nil , gerror . New ( "获取失败" )
}
return
}
var DateFormat = "2006-01-02"
func ( s * gameRoleImpl ) GetOnlineTopList ( ctx context . Context , req * game . RoleOnlineTopReq ) ( res * game . RoleOnlineTopRes , err error ) {
res = new ( game . RoleOnlineTopRes )
fsql := fmt . Sprintf ( ` select max(num) as num,server,channel,date from game_online where STR_TO_DATE(date, "%%Y-%%m-%%d")="%s" ` , time . Now ( ) . Format ( DateFormat ) )
if req . ServerId != 0 {
fsql += fmt . Sprintf ( "and server=%d " , req . ServerId )
}
fsql += "group by date,server,channel"
sSql := fmt . Sprintf ( ` select sum(b.num) as num,b.server,b.date from (%s) as b group by b.date,b.server ` , fsql )
tsql := fmt . Sprintf ( ` select max(a.num) as num,a.server from (%s) as a group by a.server ORDER BY a.server asc ` , sSql )
err = g . Model ( ) . Raw ( tsql ) . Scan ( & res . Onlines )
//g.Log().Printf(ctx, "res.Onlines: %v", gjson.MustEncodeString(res.Onlines))
return
}
func ( s * gameRoleImpl ) GetAccount ( ctx context . Context , req * game . AccountReq ) ( res * game . AccountRes , err error ) {
res , err = internal . GetAccount ( ctx , req )
return
}
func ( s * gameRoleImpl ) GameRegister ( ctx context . Context , req * game . RegisterReq ) ( res * game . RegisterRes , err error ) {
//g.Log().Info(ctx, "LoginOut - json: ", gjson.MustEncodeString(req))
res , err = internal . GameRegister ( ctx , req )
return
}
func ( s * gameRoleImpl ) GameUnitChangeName ( ctx context . Context , req * game . UnitChangeNameReq ) ( res * game . UnitChangeNameRes , err error ) {
g . Log ( ) . Info ( ctx , "GameUnitChangeName - json: " , gjson . MustEncodeString ( req ) )
res , err = internal . GameUnitChangeName ( ctx , req )
return
}
func ( s * gameRoleImpl ) GetLoginOut ( ctx context . Context , req * game . GetLoginOutReq ) ( res * game . GetLoginOutRes , err error ) {
res , err = internal . GetLoginOut ( ctx , req )
return
}
func ( s * gameRoleImpl ) GetLoginOutLog ( ctx context . Context , req * game . GetLoginOutLogReq ) ( res * game . GetLoginOutLogRes , err error ) {
res , err = internal . GetLoginOutLog ( ctx , req )
return
}
func ( s * gameRoleImpl ) GetItemLog ( ctx context . Context , req * game . GetItemLogReq ) ( res * game . GetItemLogRes , err error ) {
res , err = internal . GetItemLog ( ctx , req )
return
}
func ( s * gameRoleImpl ) GetRegister ( ctx context . Context , req * game . GetRegisterReq ) ( res * game . GetRegisterRes , err error ) {
res , err = internal . GetRegister ( ctx , req )
return
}
func ( s * gameRoleImpl ) GameUserDel ( ctx context . Context , req * game . UserDelReq ) ( res * game . UserDelRes , err error ) {
res , err = internal . GameUserDel ( ctx , req )
return res , err
}
func ( s * gameRoleImpl ) GetLoginOutGm ( ctx context . Context , req * game . GetLoginOutGmReq ) ( res * game . GetLoginOutGmRes , err error ) {
res , err = internal . GetLoginOutGm ( ctx , req )
return
}