430 lines
11 KiB
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
|
|
}
|