tienlen休闲平台拆分创建账号
This commit is contained in:
parent
2f8123333c
commit
fbfefc940f
|
@ -6,6 +6,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"mongo.games.com/game/webapi"
|
||||||
"net/http"
|
"net/http"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
@ -29,6 +30,7 @@ import (
|
||||||
const (
|
const (
|
||||||
WEBAPI_TRANSACTE_EVENT int = iota
|
WEBAPI_TRANSACTE_EVENT int = iota
|
||||||
WEBAPI_TRANSACTE_RESPONSE
|
WEBAPI_TRANSACTE_RESPONSE
|
||||||
|
PLATFORMAPPKEY = "PLATFORMAPPKEYtest123"
|
||||||
)
|
)
|
||||||
|
|
||||||
var WebApiStats = new(sync.Map)
|
var WebApiStats = new(sync.Map)
|
||||||
|
@ -139,6 +141,97 @@ func WorldSrvApi(rw http.ResponseWriter, req *http.Request) {
|
||||||
return
|
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, ¶ms)
|
||||||
|
|
||||||
|
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() {
|
func init() {
|
||||||
transact.RegisteHandler(common.TransTypeWebApi, &transact.TransHanderWrapper{
|
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_create", WorldSrvApi)
|
||||||
// 兑换订单列表
|
// 兑换订单列表
|
||||||
admin.MyAdminApp.Route("/api/game/exchange_order", WorldSrvApi)
|
admin.MyAdminApp.Route("/api/game/exchange_order", WorldSrvApi)
|
||||||
|
|
||||||
|
// 平台玩家注册账号
|
||||||
|
admin.MyAdminApp.Route("/api/platform/createUser", PlatformSrvApi)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Stats() map[string]ApiStats {
|
func Stats() map[string]ApiStats {
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/url"
|
"net/url"
|
||||||
"sort"
|
"sort"
|
||||||
|
@ -65,3 +66,33 @@ func MakeMd5String(strs ...string) string {
|
||||||
}
|
}
|
||||||
return hex.EncodeToString(buff.Sum(nil))
|
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
|
||||||
|
}
|
||||||
|
|
|
@ -40,6 +40,9 @@ func (t *TaskLogin) Call(o *basic.Object) interface{} {
|
||||||
var playerData *model.PlayerData
|
var playerData *model.PlayerData
|
||||||
acc, retCode := model.AccountIsExist(t.GetUsername(), t.GetUsername(), t.GetPassword(), t.GetPlatform(),
|
acc, retCode := model.AccountIsExist(t.GetUsername(), t.GetUsername(), t.GetPassword(), t.GetPlatform(),
|
||||||
t.GetTimeStamp(), t.GetLoginType(), t.tagkey, false, t.codeValid)
|
t.GetTimeStamp(), t.GetLoginType(), t.tagkey, false, t.codeValid)
|
||||||
|
|
||||||
|
// token验证
|
||||||
|
|
||||||
switch retCode {
|
switch retCode {
|
||||||
case common.LoginOk:
|
case common.LoginOk:
|
||||||
t.flag = login_proto.OpResultCode_OPRC_Sucess
|
t.flag = login_proto.OpResultCode_OPRC_Sucess
|
||||||
|
|
|
@ -2978,6 +2978,42 @@ func init() {
|
||||||
}), "exchange_create").Start()
|
}), "exchange_create").Start()
|
||||||
return common.ResponseTag_TransactYield, pack
|
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 {
|
type playerDataParam struct {
|
||||||
|
|
Loading…
Reference in New Issue