tienlen休闲平台拆分创建账号

This commit is contained in:
DESKTOP-45ANQ2C\unis 2024-12-09 17:01:37 +08:00
parent 2f8123333c
commit fbfefc940f
4 changed files with 167 additions and 0 deletions

View File

@ -6,6 +6,7 @@ import (
"encoding/json"
"fmt"
"io"
"mongo.games.com/game/webapi"
"net/http"
"sync"
"sync/atomic"
@ -29,6 +30,7 @@ import (
const (
WEBAPI_TRANSACTE_EVENT int = iota
WEBAPI_TRANSACTE_RESPONSE
PLATFORMAPPKEY = "PLATFORMAPPKEYtest123"
)
var WebApiStats = new(sync.Map)
@ -139,6 +141,97 @@ func WorldSrvApi(rw http.ResponseWriter, req *http.Request) {
return
}
func PlatformSrvApi(rw http.ResponseWriter, req *http.Request) {
defer utils.DumpStackIfPanic("api.PlatformSrvApi")
logger.Logger.Info("PlatformSrvApi receive:", req.URL.Path, req.URL.RawQuery)
if common.RequestCheck(req, model.GameParamData.WhiteHttpAddr) == false {
logger.Logger.Info("RemoteAddr [%v] require api.", req.RemoteAddr)
return
}
data, err := io.ReadAll(req.Body)
if err != nil {
logger.Logger.Info("Body err.", err)
webApiResponse(rw, nil /*map[string]interface{}{webapi.RESPONSE_STATE: webapi.STATE_ERR, webapi.RESPONSE_ERRMSG: "Post data is null!"}*/)
return
}
params := make(map[string]string)
json.Unmarshal(data, &params)
realSign := webapi.MD5Params(params, PLATFORMAPPKEY, "sign")
sign := params["sign"]
if realSign != sign {
logger.Logger.Info(req.RemoteAddr, " srvCtrlMain sign error: expect ", realSign, " ; but get ", sign, " raw=", params)
webApiResponse(rw, nil /*map[string]interface{}{webapi.RESPONSE_STATE: webapi.STATE_ERR, webapi.RESPONSE_ERRMSG: "Sign error!"}*/)
return
}
startTime := time.Now().UnixNano()
var stats *ApiStats
if v, exist := WebApiStats.Load(req.URL.Path); exist {
stats = v.(*ApiStats)
} else {
stats = &ApiStats{}
WebApiStats.Store(req.URL.Path, stats)
}
var rep []byte
start := time.Now()
res := make(chan []byte, 1)
suc := core.CoreObject().SendCommand(&WebApiEvent{req: req, path: req.URL.Path, h: HandlerWrapper(func(event *WebApiEvent, data []byte) bool {
logger.Logger.Trace("WorldSrvApi start transcate")
tnp := &transact.TransNodeParam{
Tt: common.TransTypeWebApi,
Ot: transact.TransOwnerType(common.GetSelfSrvType()),
Oid: common.GetSelfSrvId(),
AreaID: common.GetSelfAreaId(),
}
tNode := transact.DTCModule.StartTrans(tnp, event, transact.DefaultTransactTimeout) //超时时间30秒
if tNode != nil {
tNode.TransEnv.SetField(WEBAPI_TRANSACTE_EVENT, event)
tNode.Go(core.CoreObject())
}
return true
}), body: data, rawQuery: req.URL.RawQuery, res: res}, false)
if suc {
select {
case rep = <-res:
if rep != nil {
webApiResponse(rw, rep)
}
case <-time.After(ApiDefaultTimeout):
//rep = make(map[string]interface{})
//rep[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//rep[webapi.RESPONSE_ERRMSG] = "proccess timeout!"
webApiResponse(rw, rep)
if stats != nil {
atomic.AddInt64(&stats.TimeoutTimes, 1)
}
}
} else {
webApiResponse(rw, nil)
if stats != nil {
atomic.AddInt64(&stats.UnreachTimes, 1)
}
}
ps := int64(time.Now().Sub(start) / time.Millisecond)
if stats != nil {
atomic.AddInt64(&stats.RunTimes, 1)
atomic.AddInt64(&stats.TotalRuningTime, ps)
if atomic.LoadInt64(&stats.MaxRuningTime) < ps {
atomic.StoreInt64(&stats.MaxRuningTime, ps)
}
}
result, err := json.Marshal(rep)
if err == nil {
log := model.NewAPILog(req.URL.Path, req.URL.RawQuery, string(data[:]), req.RemoteAddr, string(result[:]), startTime, ps)
mq.Write(log)
}
return
}
// --------------------------------------------------------------------------------------
func init() {
transact.RegisteHandler(common.TransTypeWebApi, &transact.TransHanderWrapper{
@ -262,6 +355,10 @@ func init() {
admin.MyAdminApp.Route("/api/game/exchange_create", WorldSrvApi)
// 兑换订单列表
admin.MyAdminApp.Route("/api/game/exchange_order", WorldSrvApi)
// 平台玩家注册账号
admin.MyAdminApp.Route("/api/platform/createUser", PlatformSrvApi)
}
func Stats() map[string]ApiStats {

View File

@ -5,6 +5,7 @@ import (
"bytes"
"crypto/md5"
"encoding/hex"
"fmt"
"io"
"net/url"
"sort"
@ -65,3 +66,33 @@ func MakeMd5String(strs ...string) string {
}
return hex.EncodeToString(buff.Sum(nil))
}
func StringToMD5(waitMD5string string) string {
h := md5.New()
h.Write([]byte(waitMD5string))
cipherStr := h.Sum(nil)
return hex.EncodeToString(cipherStr)
}
func MD5Params(params map[string]string, key string, filter string) string {
// 将请求参数的key提取出来并排好序
newKeys := make([]string, 0)
for k, _ := range params {
//需要过滤的签名
if k == filter {
continue
}
newKeys = append(newKeys, k)
}
sort.Strings(newKeys)
var originStr string
// 将输入进行标准化的处理
for _, v := range newKeys {
originStr += fmt.Sprintf("%v=%v&", v, params[v])
}
originStr += fmt.Sprintf("key=%v", key)
// 使用md5算法进行处理
sign := StringToMD5(originStr)
return sign
}

View File

@ -40,6 +40,9 @@ func (t *TaskLogin) Call(o *basic.Object) interface{} {
var playerData *model.PlayerData
acc, retCode := model.AccountIsExist(t.GetUsername(), t.GetUsername(), t.GetPassword(), t.GetPlatform(),
t.GetTimeStamp(), t.GetLoginType(), t.tagkey, false, t.codeValid)
// token验证
switch retCode {
case common.LoginOk:
t.flag = login_proto.OpResultCode_OPRC_Sucess

View File

@ -2978,6 +2978,42 @@ func init() {
}), "exchange_create").Start()
return common.ResponseTag_TransactYield, pack
}))
WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/platform/createUse", WebAPIHandlerWrapper(
func(tNode *transact.TransNode, params []byte) (int, proto.Message) {
pack := &webapiproto.SAGetExchangeOrder{
Tag: webapiproto.TagCode_FAILED,
}
msg := &webapiproto.ASGetExchangeOrder{}
var err error
err = proto.Unmarshal(params, msg)
if err != nil {
pack.Tag = webapiproto.TagCode_FAILED
logger.Logger.Errorf("/api/game/exchange_order Unmarshal err: %v", err)
return common.ResponseTag_ParamError, pack
}
logger.Logger.Tracef("/api/game/exchange_order %v", msg)
var b []byte
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
b, err = webapi.API_ExchangeRecord(common.GetAppId(), msg)
return nil
}), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) {
if err != nil || b == nil {
logger.Logger.Errorf("/api/game/exchange_order API_ExchangeList err: %v", err)
pack.Tag = webapiproto.TagCode_FAILED
} else {
err = proto.Unmarshal(b, pack)
if err != nil {
logger.Logger.Errorf("/api/game/exchange_order Unmarshal err: %v", err)
}
}
tNode.TransRep.RetFiels = pack
tNode.Resume()
}), "/api/game/exchange_order").Start()
return common.ResponseTag_TransactYield, pack
}))
}
type playerDataParam struct {