game_sync/tools/httpProto3/httpProto3.go

430 lines
11 KiB
Go

package main
import (
"bytes"
"crypto/md5"
"encoding/hex"
"encoding/json"
"fmt"
"io"
"math/rand"
"mongo.games.com/game/common"
"mongo.games.com/game/proto"
"mongo.games.com/game/protocol/qpapi"
"mongo.games.com/game/protocol/webapi"
"mongo.games.com/goserver/core/admin"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/module"
"net/http"
"time"
)
//const TestIp = "http://192.168.10.240:9899"
const TestIp = "http://127.0.0.1:9899"
var ApiKey = []string{
"/api/mongo.games.com/game/AddCoinByIdAndPT",
"/api/mongo.games.com/game/AddCoinById",
"/api/Cache/ListRoom",
"/api/Cache/DestroyRoom",
"/api/Ctrl/ListServerStates",
"/api/Ctrl/ServerStateSwitch",
"/api/Ctrl/SrvCtrlClose",
"/api/mongo.games.com/game/CreateShortMessage",
"/api/mongo.games.com/game/DeleteShortMessage",
"/api/mongo.games.com/game/SinglePlayerAdjust",
"/api/Message/QueryHorseRaceLampList",
"/api/mongo.games.com/game/QueryGamePoolByGameId",
"/api/Report/OnlineReportTotal",
"/api/Message/EditHorseRaceLamp",
"/api/Message/CreateHorseRaceLamp",
"/api/Message/GetHorseRaceLampById",
"/api/Report/QueryOnlineReportList",
"/api/Member/QPAPIRegisterOrLogin",
"/api/Member/QPGetMemberGoldById",
"/api/Member/QPGetGameHistory",
"/api/mongo.games.com/game/QPAPIAddSubCoinById",
"/api/Player/WhiteBlackControl",
"/api/Player/BlackBySnId",
}
func (clm *APIHttpData) Init() {
clm.RouteMap["/api/Player/BlackBySnId"] = APIData{
M: &webapi.ASBlackBySnId{
Platform: "1",
SnId: 90887600,
BlacklistType: 1,
},
Pack: &webapi.SABlackBySnId{},
}
clm.RouteMap["/api/Player/WhiteBlackControl"] = APIData{
M: &webapi.ASWhiteBlackControl{
Platform: "1",
SnId: 29274000,
WBLevel: 10,
WBCoinLimit: 0,
ResetTotalCoin: 0,
MaxNum: 0,
SnIds: []int32{},
State: 3,
},
Pack: &webapi.SAWhiteBlackControl{},
}
clm.RouteMap["/api/mongo.games.com/game/AddCoinByIdAndPT"] = APIData{
M: &webapi.ASAddCoinByIdAndPT{
Platform: "1",
ID: 24953700,
Gold: 10000,
Oper: "test",
Desc: "",
BillNo: int64(rand.Int31n(100000)),
LogType: 1,
},
Pack: &webapi.SAAddCoinByIdAndPT{},
}
clm.RouteMap["/api/Message/GetHorseRaceLampById"] = APIData{
M: &webapi.ASGetHorseRaceLampById{
Platform: "1",
NoticeId: "614d2d43e1382378b76be9a5",
},
Pack: &webapi.SAGetHorseRaceLampById{},
}
clm.RouteMap["/api/Message/CreateHorseRaceLamp"] = APIData{
M: &webapi.ASCreateHorseRaceLamp{
Platform: "1",
Title: "",
Content: "dsfsdfff",
Footer: "",
Count: 1,
State: 1,
StartTime: 1,
Priority: 1,
MsgType: 1,
StandSec: 1,
Target: []int32{},
},
Pack: &webapi.SACreateHorseRaceLamp{},
}
clm.RouteMap["/api/Message/EditHorseRaceLamp"] = APIData{
M: &webapi.ASEditHorseRaceLamp{
HorseRaceLamp: &webapi.HorseRaceLamp{
Id: "614d2f500d96096240c27c70",
Platform: "1",
Title: "",
Content: "dsfsdfff1111",
Footer: "",
Count: 1,
State: 1,
StartTime: 1,
Priority: 1,
MsgType: 1,
StandSec: 1,
Target: []int32{},
},
},
Pack: &webapi.SAEditHorseRaceLamp{},
}
clm.RouteMap["/api/mongo.games.com/game/QueryGamePoolByGameId"] = APIData{
M: &webapi.ASQueryGamePoolByGameId{
GameId: 306,
GameMode: 0,
Platform: "1",
GroupId: 0,
},
Pack: &webapi.SAQueryGamePoolByGameId{},
}
clm.RouteMap["/api/mongo.games.com/game/SinglePlayerAdjust"] = APIData{
M: &webapi.ASSinglePlayerAdjust{
Opration: 3,
PlayerSingleAdjust: &webapi.PlayerSingleAdjust{
Platform: "1",
SnId: 35153500,
GameFreeId: 6040001,
GameId: 604,
TotalTime: 10,
},
},
Pack: &webapi.SASinglePlayerAdjust{},
}
clm.RouteMap["/api/Ctrl/SrvCtrlClose"] = APIData{
M: &webapi.ASSrvCtrlClose{
SrvType: 0,
},
Pack: &webapi.SASrvCtrlClose{},
}
clm.RouteMap["/api/Ctrl/ServerStateSwitch"] = APIData{
M: &webapi.ASServerStateSwitch{
SrvId: 777,
SrvType: 7,
},
Pack: &webapi.SAServerStateSwitch{},
}
clm.RouteMap["/api/Ctrl/ListServerStates"] = APIData{
M: &webapi.ASListServerStates{},
Pack: &webapi.SAListServerStates{},
}
clm.RouteMap["/api/mongo.games.com/game/AddCoinById"] = APIData{
M: &webapi.ASAddCoinById{
Platform: "",
ID: 13931000,
Gold: 1000000,
Oper: "test",
Desc: "",
BillNo: int64(rand.Int31n(10000)),
LogType: 0,
},
Pack: &webapi.SAAddCoinById{},
}
clm.RouteMap["/api/Cache/ListRoom"] = APIData{
M: &webapi.ASListRoom{
PageNo: 1,
PageSize: 50,
RoomType: -1,
},
Pack: &webapi.SAListRoom{},
}
clm.RouteMap["/api/Cache/DestroyRoom"] = APIData{
M: &webapi.ASDestroyRoom{
Platform: "1",
SceneIds: []int32{1000000002},
DestroyType: 0,
},
Pack: &webapi.SADestroyRoom{},
}
clm.RouteMap["/api/mongo.games.com/game/CreateShortMessage"] = APIData{
M: &webapi.ASCreateShortMessage{
Platform: "1",
SrcSnid: 35153500,
DestSnid: 35153500,
NoticeTitle: "221",
NoticeContent: "qwqewqe",
},
Pack: &webapi.SACreateShortMessage{},
}
clm.RouteMap["/api/mongo.games.com/game/DeleteShortMessage"] = APIData{
M: &webapi.ASDeleteShortMessage{
Platform: "1",
Id: "6143f8b30d9609caec249b1a",
},
Pack: &webapi.SADeleteShortMessage{},
}
clm.RouteMap["/api/Message/QueryHorseRaceLampList"] = APIData{
M: &webapi.ASQueryHorseRaceLampList{
Platform: "1",
PageNo: 1,
PageSize: 20,
MsgType: 0,
},
Pack: &webapi.SAQueryHorseRaceLampList{},
}
clm.RouteMap["/api/Report/OnlineReportTotal"] = APIData{
M: &webapi.ASOnlineReportTotal{
Platform: "1",
},
Pack: &webapi.SAOnlineReportTotal{},
}
clm.RouteMap["/api/Report/QueryOnlineReportList"] = APIData{
M: &webapi.ASQueryOnlineReportList{
Platform: "1",
PageNo: 1,
PageSize: 20,
},
Pack: &webapi.SAQueryOnlineReportList{},
}
ml := &qpapi.ASLogin{
MerchantTag: "1",
UserName: "abcd",
Ts: time.Now().Unix(),
Sign: "",
}
rawl := fmt.Sprintf("%v%v%v%v", ml.GetMerchantTag(), ml.GetUserName(), "", ml.GetTs())
hl := md5.New()
io.WriteString(hl, rawl)
newsignl := hex.EncodeToString(hl.Sum(nil))
ml.Sign = newsignl
//创建用户
clm.RouteMap["/api/Member/QPAPIRegisterOrLogin"] = APIData{
M: ml,
Pack: &qpapi.SALogin{},
}
//clm.RouteMap["/api/mongo.games.com/game/CrashVerifier"] = APIData{
// M: &qpapi.ASCrachHash{
// Hash:"583f8e896a5a333e2eb532c31adeffda430d7121e1d4c44914972b5070f7881c",
// Wheel:33,
// },
// Pack: &qpapi.SACrachHash{},
//}
mu := &qpapi.ASMemberGold{
Username: "abcd",
MerchantTag: "1",
Ts: time.Now().Unix(),
Sign: "",
}
rawu := fmt.Sprintf("%v%v%v%v", mu.GetUsername(), mu.GetMerchantTag(), "", mu.GetTs())
hu := md5.New()
io.WriteString(hu, rawu)
newsignu := hex.EncodeToString(hu.Sum(nil))
mu.Sign = newsignu
//获取用户金币
clm.RouteMap["/api/Member/QPGetMemberGoldById"] = APIData{
M: mu,
Pack: &qpapi.SAMemberGold{},
}
ma := &qpapi.ASAddCoinById{
Username: "abcd",
Gold: 10000,
BillNo: time.Now().Unix(),
MerchantTag: "1",
Ts: time.Now().Unix(),
Sign: "",
}
rawa := fmt.Sprintf("%v%v%v%v%v%v", ma.GetUsername(), ma.GetGold(), ma.GetBillNo(), ma.GetMerchantTag(), "", ma.GetTs())
ha := md5.New()
io.WriteString(ha, rawa)
newsigna := hex.EncodeToString(ha.Sum(nil))
ma.Sign = newsigna
//加减币
clm.RouteMap["/api/mongo.games.com/game/QPAPIAddSubCoinById"] = APIData{
M: ma,
Pack: &qpapi.SAAddCoinById{},
}
m := &qpapi.ASPlayerHistory{
//Username:"111111",
MerchantTag: "1",
GameHistoryModel: 1,
StartTime: 1654587626,
EndTime: 1655809512,
PageNo: 2,
PageSize: 50,
Ts: time.Now().Unix(),
Sign: "",
}
raw := fmt.Sprintf("%v%v%v%v%v%v%v%v%v", m.GetUsername(), m.GetMerchantTag(), m.GetGameHistoryModel(),
m.GetStartTime(), m.GetEndTime(), m.GetPageNo(), m.GetPageSize(), "", m.GetTs())
h := md5.New()
io.WriteString(h, raw)
newsign := hex.EncodeToString(h.Sum(nil))
m.Sign = newsign
clm.RouteMap["/api/Member/QPGetGameHistory"] = APIData{
M: m,
Pack: &qpapi.SAPlayerHistory{},
}
}
func init() {
for _, key := range ApiKey {
admin.MyAdminApp.Route(key, WorldSrvApi)
}
module.RegisteModule(APIHttpSington, time.Second, 1)
}
var APIHttpSington = &APIHttpData{
RouteMap: make(map[string]APIData),
}
type APIData struct {
M proto.Message
Pack proto.Message
}
type APIHttpData struct {
RouteMap map[string]APIData
}
func (clm *APIHttpData) ModuleName() string {
return "APIHttp"
}
func (clm *APIHttpData) Update() {
}
func (clm *APIHttpData) Shutdown() {
module.UnregisteModule(clm)
}
func WorldSrvApi(rw http.ResponseWriter, req *http.Request) {
Path := req.URL.Path
Method := req.Method
fmt.Println(Path, Method)
if Method == "POST" {
data, err := io.ReadAll(req.Body)
if err != nil {
logger.Logger.Info("Body err.", err)
WebApiResponseByte(rw, nil)
return
}
fmt.Println(data)
} else {
fmt.Println("path......", Path)
if apiData, ok := APIHttpSington.RouteMap[Path]; ok {
WebApiResponseByte(rw, SendData(Path, apiData.M, apiData.Pack))
} else {
WebApiResponseByte(rw, nil)
}
}
return
}
func WebApiResponseByte(rw http.ResponseWriter, data []byte) bool {
dataLen := len(data)
rw.Header().Set("Content-Length", fmt.Sprintf("%v", dataLen))
rw.WriteHeader(http.StatusOK)
pos := 0
for pos < dataLen {
writeLen, err := rw.Write(data[pos:])
if err != nil {
logger.Logger.Info("webApiResponse SendData error:", err, " data=", string(data[:]), " pos=", pos, " writelen=", writeLen, " dataLen=", dataLen)
return false
}
pos += writeLen
}
return true
}
func SendData(url string, m, pack proto.Message) []byte {
a, err := proto.Marshal(m)
startTime := time.Now().UnixNano()
args := fmt.Sprintf("%v;%v;%v;%v", common.Config.AppId, url, string(a), startTime)
h := md5.New()
io.WriteString(h, args)
realSign := hex.EncodeToString(h.Sum(nil))
url = fmt.Sprintf("%v?nano=%v&sign=%v", TestIp+url, startTime, realSign)
new_str := bytes.NewBuffer(a)
req, err := http.NewRequest("POST", url, new_str)
// req.Header.Set("X-Custom-Header", "myvalue")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("status", resp.Status)
//fmt.Println("response:", resp.Header)
body, _ := io.ReadAll(resp.Body)
//fmt.Println("response Body:", string(body))
proto.Unmarshal(body, pack)
fmt.Println("=============", pack)
type Api struct {
Info string
}
info, _ := json.Marshal(pack)
api := Api{
Info: string(info),
}
b, _ := json.Marshal(api)
return b
}