Merge branch 'sdk' into online
This commit is contained in:
commit
08241b09a9
104
src/server/GoUtil/feishu.go
Normal file
104
src/server/GoUtil/feishu.go
Normal file
@ -0,0 +1,104 @@
|
||||
package GoUtil
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"server/conf"
|
||||
)
|
||||
|
||||
const (
|
||||
FEISHU_WEBHOOK = "https://open.feishu.cn/open-apis/bot/v2/hook/70e24a79-b019-434a-b4d1-4592bbf7c311"
|
||||
)
|
||||
|
||||
// AAqFpbuPhFSEx
|
||||
func SendFeishuFatal(PlayerId int, FuncName string, msg string) error {
|
||||
// 创建请求体
|
||||
payload := map[string]interface{}{
|
||||
"msg_type": "interactive",
|
||||
"card": map[string]interface{}{
|
||||
"type": "template",
|
||||
"data": map[string]interface{}{
|
||||
"template_id": "AAqFpbuPhFSEx",
|
||||
"template_version_name": "1.0.0",
|
||||
"template_variable": map[string]interface{}{
|
||||
"appName": conf.Server.GameName,
|
||||
"playerId": PlayerId,
|
||||
"funcName": FuncName,
|
||||
"fatal_msg": msg,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
payloadBytes, err := json.Marshal(payload)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 创建HTTP请求
|
||||
req, err := http.NewRequest("POST", FEISHU_WEBHOOK, bytes.NewBuffer(payloadBytes))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
|
||||
// 发送请求
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// 检查响应状态码
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func SendFeishuMsg2(msg string) error {
|
||||
// 创建请求体
|
||||
payload := map[string]interface{}{
|
||||
"msg_type": "interactive",
|
||||
"card": map[string]interface{}{
|
||||
"type": "template",
|
||||
"data": map[string]interface{}{
|
||||
"template_id": "AAqFpLD2XfySR",
|
||||
"template_version_name": "1.0.1",
|
||||
"template_variable": map[string]interface{}{
|
||||
"appName": conf.Server.GameName,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
payloadBytes, err := json.Marshal(payload)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 创建HTTP请求
|
||||
req, err := http.NewRequest("POST", FEISHU_WEBHOOK, bytes.NewBuffer(payloadBytes))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
|
||||
// 发送请求
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// 检查响应状态码
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -214,7 +214,7 @@ func GetEmitProduceType(Id int) []string {
|
||||
func GetEmitProduceChessType(Id int) []string {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetEmitProduceChessType GetOne Id:%v not found", Id)
|
||||
//log.Debug("GetEmitProduceChessType GetOne Id:%v not found", Id)
|
||||
return []string{}
|
||||
}
|
||||
value := gamedata.ParseString(data["Product_Type"])
|
||||
|
||||
@ -12,6 +12,7 @@ const (
|
||||
CFG_PLAYROOM_MOOD = "PlayroomMood"
|
||||
CFG_PLAYROOM_PHYSIOLOGY = "PlayroomPhysiology"
|
||||
CFG_PLAYROOM_PHYSIOLOGY_TYPE = "PlayroomPhysiologyType"
|
||||
CFG_PLAYROOM_SHOP = "PlayroomShop"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -20,6 +21,15 @@ func init() {
|
||||
gamedata.InitCfg(CFG_PLAYROOM_MOOD)
|
||||
gamedata.InitCfg(CFG_PLAYROOM_PHYSIOLOGY)
|
||||
gamedata.InitCfg(CFG_PLAYROOM_PHYSIOLOGY_TYPE)
|
||||
gamedata.InitCfg(CFG_PLAYROOM_SHOP)
|
||||
}
|
||||
|
||||
func GetShopItem(Id int) (int, []*item.Item) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_SHOP, Id)
|
||||
if err != nil {
|
||||
return 0, nil
|
||||
}
|
||||
return gamedata.GetIntValue(data, "ItemId"), gamedata.GetItemList(data, "Cost")
|
||||
}
|
||||
|
||||
func GetUnLockLv() int {
|
||||
@ -197,6 +207,18 @@ func GetPhysiologyDuration(Id int, Num int) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetPhysiologyTypeList() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_PHYSIOLOGY_TYPE)
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
for k := range data {
|
||||
r = append(r, GoUtil.Int(k))
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func GetMoodEffect(Id int) (int, int) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_PHYSIOLOGY_TYPE, Id)
|
||||
if err != nil {
|
||||
|
||||
@ -17,6 +17,7 @@ type FriendMgr struct {
|
||||
}
|
||||
|
||||
type FirendData struct {
|
||||
Id int64
|
||||
List map[int][]*msg.Msg // 本服信箱
|
||||
ClusterMsg map[int][]*msg.Msg // 集群信箱
|
||||
}
|
||||
@ -69,20 +70,32 @@ func (f *FriendMgr) getData() *FirendData {
|
||||
return f.data.(*FirendData)
|
||||
}
|
||||
|
||||
func (f *FriendMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) {
|
||||
Now := GoUtil.Now()
|
||||
for k, v := range f.getData().List {
|
||||
for j, msg := range v {
|
||||
if msg.End < Now-7*24*3600 {
|
||||
f.getData().List[k] = append(f.getData().List[k][:j], f.getData().List[k][j+1:]...)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// 通知玩家
|
||||
func (f *FriendMgr) sendToPlayer(m *msg.Msg) (interface{}, error) {
|
||||
f.getData().Id++
|
||||
m.Id = f.getData().Id
|
||||
err := sendToPlayer(m)
|
||||
if err != nil {
|
||||
log.Debug("send to player error : %s\n", err)
|
||||
if err == nil {
|
||||
m.H = 1
|
||||
}
|
||||
ToServerId := GoUtil.GetServerIdByUid(m.To)
|
||||
if ToServerId != conf.Server.ServerID {
|
||||
f.getData().ClusterMsg[m.To] = append(f.getData().ClusterMsg[m.To], m) // 保存到集群消息
|
||||
} else {
|
||||
f.getData().List[m.To] = append(f.getData().List[m.To], m) // 保存到本地消息
|
||||
}
|
||||
f.update = true
|
||||
return nil, err
|
||||
}
|
||||
log.Debug("send to player success")
|
||||
return nil, nil
|
||||
}
|
||||
@ -90,7 +103,9 @@ func (f *FriendMgr) sendToPlayer(m *msg.Msg) (interface{}, error) {
|
||||
// 同步信息
|
||||
func (f *FriendMgr) sync(m *msg.Msg) (interface{}, error) {
|
||||
data := f.getData().List[m.From]
|
||||
f.getData().List[m.From] = make([]*msg.Msg, 0)
|
||||
for _, v := range data {
|
||||
v.H = 1
|
||||
}
|
||||
log.Debug("sync friendMgr msg to player %d success mailbox %v", m.From, data)
|
||||
return data, nil
|
||||
}
|
||||
|
||||
@ -49,7 +49,8 @@ func RegisterMsgProcessFunc(key string, value1 interface{}) {
|
||||
func RunNetProcessByKey(key string, param []interface{}) error {
|
||||
fun, ok := RegisterNetWorkFunc[key]
|
||||
if ok {
|
||||
err := fun.(func([]interface{}) error)(param)
|
||||
_, player, buf := ParseArgs(param)
|
||||
err := fun.(func(*Player, []byte) error)(player, buf)
|
||||
return err
|
||||
}
|
||||
return fmt.Errorf("cant find network func %s", key)
|
||||
@ -810,17 +811,19 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqPlayroomChip", ReqPlayroomChip) // 消除碎片
|
||||
RegisterMsgProcessFunc("ReqPlayroomOutline", ReqPlayroomOutline) // 打工离线
|
||||
RegisterMsgProcessFunc("ReqPlayroomWrokOutline", ReqPlayroomWrokOutline) // 打工离线完成
|
||||
RegisterMsgProcessFunc("ReqPlayroomShop", ReqPlayroomShop) // playroom 商店
|
||||
RegisterMsgProcessFunc("ReqPlayroomBuyItem", ReqPlayroomBuyItem) // 购买playroom物品
|
||||
|
||||
// 宠物宝藏
|
||||
RegisterMsgProcessFunc("ReqFriendTreasure", ReqFriendTreasure) // 请求好友宝藏数据
|
||||
RegisterMsgProcessFunc("ReqFriendTreasureStart", ReqFriendTreasureStart) // 开始游戏
|
||||
RegisterMsgProcessFunc("ReqFriendTreasureFilp", ReqFriendTreasureFilp) // 翻牌
|
||||
RegisterMsgProcessFunc("ReqFriendTreasureEnd", ReqFriendTreasureEnd) // 结束游戏
|
||||
RegisterMsgProcessFunc("ReqPlayroomBuyItem", ReqPlayroomBuyItem) // 购买playroom物品
|
||||
|
||||
RegisterMsgProcessFunc("ReqKafkaLog", ReqKafkaLog) // 客户端日志
|
||||
RegisterMsgProcessFunc("ReqCreateOrderSn", ReqCreateOrderSn) // 创建订单号
|
||||
RegisterMsgProcessFunc("ReqShippingOrder", ReqShippingOrder) // 获取订单号
|
||||
|
||||
}
|
||||
|
||||
func (ad *GameLogic) CreateHttpManager() {
|
||||
|
||||
@ -11,6 +11,7 @@ import (
|
||||
playroomCfg "server/conf/playroom"
|
||||
"server/db"
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/friend"
|
||||
"server/game/mod/item"
|
||||
MsgMod "server/game/mod/msg"
|
||||
"server/game/mod/playroom"
|
||||
@ -22,12 +23,13 @@ import (
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
func ReqGmCommand(args []interface{}) error {
|
||||
_, player, buf := ParseArgs(args)
|
||||
func ReqGmCommand(player *Player, buf []byte) error {
|
||||
detail := &msg.ReqGmCommand{}
|
||||
proto.Unmarshal(buf, detail)
|
||||
arg := strings.Split(detail.Command, " ")
|
||||
log.Debug("Player %d ReqGmCommand:%v", player.M_DwUin, arg)
|
||||
return ReqGmCommand_(player, detail.Command)
|
||||
}
|
||||
func ReqGmCommand_(player *Player, Command string) error {
|
||||
arg := strings.Split(Command, " ")
|
||||
switch arg[0] {
|
||||
case "additem":
|
||||
id, _ := strconv.Atoi(arg[1])
|
||||
@ -158,14 +160,6 @@ func ReqGmCommand(args []interface{}) error {
|
||||
G_GameLogicPtr.ChampshipMgrSend(&MsgMod.Msg{
|
||||
Type: MsgMod.SERVER_ZERO_UPDATE,
|
||||
})
|
||||
case "addMail":
|
||||
MailMod := player.PlayMod.getMailMod()
|
||||
Id := MailMod.Send("test", "test", []*item.Item{item.NewItem(100001, 1)})
|
||||
player.PushClientRes(MailMod.NotifyMail(Id))
|
||||
case "addMail2":
|
||||
MailMod := player.PlayMod.getMailMod()
|
||||
Id := MailMod.Send("test", "test", []*item.Item{})
|
||||
player.PushClientRes(MailMod.NotifyMail(Id))
|
||||
case "resetEmitOrder":
|
||||
OrderMod := player.PlayMod.getOrderMod()
|
||||
OrderMod.EimtOrder = make(map[string]struct{})
|
||||
@ -202,6 +196,7 @@ func ReqGmCommand(args []interface{}) error {
|
||||
case "playroomCollect":
|
||||
CollectList := playroomCfg.GetDecorateList()
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.Collect = make(map[int]int)
|
||||
for _, v := range CollectList {
|
||||
PlayroomMod.AddCollect(v)
|
||||
}
|
||||
@ -262,6 +257,9 @@ func ReqGmCommand(args []interface{}) error {
|
||||
case "resetTriggerTime":
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.TriggerTime = 0
|
||||
case "resetTimeline":
|
||||
FriendMod := player.PlayMod.getFriendMod()
|
||||
FriendMod.Log = make([]*friend.LogInfo, 0)
|
||||
case "recoverUser":
|
||||
file, err := os.OpenFile(conf.Server.GameConfPath+"user.info", os.O_RDWR|os.O_CREATE, 0666)
|
||||
if err != nil {
|
||||
@ -282,7 +280,20 @@ func ReqGmCommand(args []interface{}) error {
|
||||
}
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
BaseMod.Uid = Uid
|
||||
case "copyUser":
|
||||
p1 := new(Player)
|
||||
p1.InitPlayer(arg[1])
|
||||
BaseMod := p1.PlayMod.getBaseMod()
|
||||
BaseMod.Uid = player.M_DwUin
|
||||
BaseMod.NickName = player.PlayMod.getBaseMod().NickName
|
||||
BaseMod.LoginTime = GoUtil.Now()
|
||||
player.PlayMod.mod_list = p1.PlayMod.mod_list
|
||||
|
||||
default:
|
||||
return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg)
|
||||
}
|
||||
log.Debug("Player %d ReqGmCommand:%v", player.M_DwUin, arg)
|
||||
|
||||
player.PlayMod.save()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -351,23 +351,8 @@ func (p *Player) Login() {
|
||||
LoignBack(p) // 登录返回数据
|
||||
SyncMailMsg(p) // 同步邮件
|
||||
BaseMod.Login()
|
||||
p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
|
||||
if p.PlayerBaseMod.Data.UserName == "388faebe29ffe56666a04ea22b902b0f" {
|
||||
VarMod := p.PlayMod.getVarMod()
|
||||
Mail1, _ := VarMod.GetVar(2)
|
||||
if Mail1 != nil {
|
||||
return
|
||||
}
|
||||
VarMod.SetVar(2, 1)
|
||||
Items := make([]*item.Item, 0)
|
||||
Items = append(Items, &item.Item{Id: item.ITEM_ENERGY_ID, Num: 500})
|
||||
MailMod := p.PlayMod.getMailMod()
|
||||
MailMod.Send("Game Bug Report Handling & Compensation",
|
||||
`We sincerely apologize for this issue that has affected your experience.
|
||||
One of our collleague will contact you soon, and we kindly ask for your cooperation with the QA process.
|
||||
As a token of our appreciation, here is 500 Energy for your trouble.
|
||||
Once again, we deeply regret any trouble this may have caused and thank you for your understanding and support.`, Items)
|
||||
}
|
||||
HandbookItem := p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
|
||||
p.HandleItem(HandbookItem, msg.ITEM_POP_LABEL_AllCollectRewardHB.String())
|
||||
}
|
||||
|
||||
func (p *Player) Outline() {
|
||||
@ -380,6 +365,7 @@ func (p *Player) Outline() {
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
BaseMod.Outline(int(Cacumulative))
|
||||
p.PlayMod.save()
|
||||
p.UpdateUserInfo()
|
||||
}
|
||||
|
||||
// 离线 保存数据
|
||||
@ -739,6 +725,7 @@ func (p *Player) GetSimpleData(Uid int, simple *PlayerSimpleData) error {
|
||||
func (p *Player) UpdateUserInfo() {
|
||||
simple := &PlayerSimpleData{}
|
||||
Base := p.GetPlayerBaseMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
simple.Name = p.PlayMod.getBaseMod().NickName
|
||||
simple.Avatar = p.PlayMod.getAvatarMod().SetId
|
||||
simple.Uid = int(p.M_DwUin)
|
||||
@ -746,8 +733,8 @@ func (p *Player) UpdateUserInfo() {
|
||||
simple.Face = p.PlayMod.getFaceMod().SetId
|
||||
simple.Level = p.GetPlayerBaseMod().GetLevel()
|
||||
simple.Decorate = p.PlayMod.getDecorateMod().DecorateNum
|
||||
simple.Login = int64(Base.Data.LoginTime)
|
||||
simple.Loginout = int64(Base.Data.LogoutTime)
|
||||
simple.Login = int64(BaseMod.LoginTime)
|
||||
simple.Loginout = int64(BaseMod.LogoutTime)
|
||||
simple.FaceBook = Base.Data.FaceBookId
|
||||
simple.FaceBookPic = p.PlayMod.getBaseMod().FacebookUrl
|
||||
simple.Playroom = p.PlayMod.getPlayroomMod().Room
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"math"
|
||||
"server/GoUtil"
|
||||
"server/conf"
|
||||
mergeDataCfg "server/conf/mergeData"
|
||||
orderCfg "server/conf/order"
|
||||
"server/game/mod/item"
|
||||
@ -113,9 +114,9 @@ func (p *PlayerChessData) UpdateChessData(player *Player, MChessData map[string]
|
||||
|
||||
// 检查棋子数据是否一致
|
||||
func (p *PlayerChessData) checkChessEqual(player *Player) bool {
|
||||
// if len(p.Data.MChessData) == 0 {
|
||||
// return true
|
||||
// }
|
||||
if len(p.Data.MChessData) == 0 && conf.Server.GameName == "Merge_Pet_Local" {
|
||||
return true
|
||||
}
|
||||
ChessList := player.PlayMod.getChessMod().GetChessList()
|
||||
if len(ChessList) != len(p.Data.MChessData) {
|
||||
return false
|
||||
|
||||
@ -59,6 +59,9 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
p.NoonUpdate(nil)
|
||||
case msg.HANDLE_TYPE_INVITE_ADD_FRIEND: // 邀请添加好友
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
if m.From == 0 && m.From == int(p.M_DwUin) {
|
||||
return nil
|
||||
}
|
||||
FriendMod.AddFriend(m.From)
|
||||
p.TeLog("friend_add", map[string]interface{}{
|
||||
"player_id": m.From,
|
||||
@ -204,8 +207,8 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
PlayroomMod.AddVisitor(m.From, m.SendT)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_VISIT, fmt.Sprintf("%d,%d", Items[0].Id, Items[0].Num))
|
||||
if len(Items) > 0 && Items[0].Id == item.ITEM_STAR_ID {
|
||||
ItemMod := p.PlayMod.getItemMod()
|
||||
StarNum := ItemMod.GetItem(item.ITEM_STAR_ID)
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
StarNum := BaseMod.GetStar()
|
||||
Items[0].Num = min(Items[0].Num, StarNum)
|
||||
p.HandleLoseItem(Items, "")
|
||||
} else {
|
||||
@ -285,6 +288,8 @@ func HandleFriendMsg(p *Player, m *msg.Msg) error {
|
||||
// 同步好友请求
|
||||
func SyncFriendMsg(p *Player) {
|
||||
MsgList := G_GameLogicPtr.FriendMgrCall(&msg.Msg{Type: msg.HANDLE_TYPE_SYNC, From: int(p.M_DwUin)})
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
MsgId := FriendMod.GetSyncId()
|
||||
if MsgList == nil {
|
||||
return
|
||||
}
|
||||
@ -295,9 +300,18 @@ func SyncFriendMsg(p *Player) {
|
||||
sort.Slice(ml, func(i, j int) bool {
|
||||
return ml[i].SendT < ml[j].SendT
|
||||
})
|
||||
maxId := int64(0)
|
||||
for _, v := range ml {
|
||||
maxId = max(maxId, v.Id)
|
||||
if v.H == 1 {
|
||||
continue
|
||||
}
|
||||
if v.Id > 0 && v.Id <= MsgId {
|
||||
continue
|
||||
}
|
||||
handle(p, v)
|
||||
}
|
||||
FriendMod.SetSyncId(maxId)
|
||||
p.PlayMod.save()
|
||||
}
|
||||
|
||||
@ -318,6 +332,9 @@ func FriendListBackData(p *Player) {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var fl []*proto.ResPlayerSimple
|
||||
for k := range FriendMod.FriendList {
|
||||
if k == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(k)
|
||||
if ps != nil {
|
||||
fl = append(fl, ps)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -42,7 +42,7 @@ func (s *ServerMod) init() {
|
||||
s.update = false
|
||||
s.LoadData()
|
||||
s.mDispatr.AfterFunc(time.Duration(PER_SAVE_TIME)*time.Second, func() {
|
||||
s.SaveData()
|
||||
go s.SaveData()
|
||||
})
|
||||
go func() {
|
||||
defer func() {
|
||||
@ -128,7 +128,7 @@ func (s *ServerMod) Call(m *msg.Msg) (interface{}, error) {
|
||||
// mysql 保存消息
|
||||
func (s *ServerMod) SaveData() {
|
||||
s.mDispatr.AfterFunc(time.Duration(PER_SAVE_TIME+GoUtil.RandNum(5, 10))*time.Second, func() {
|
||||
s.SaveData()
|
||||
go s.SaveData()
|
||||
})
|
||||
DbData := db.SqlServerModStruct{}
|
||||
DbData.Key = s.key
|
||||
@ -139,16 +139,19 @@ func (s *ServerMod) SaveData() {
|
||||
log.Debug("SaveData Marshal failed,Mod Key: %s err:%v", s.key, err)
|
||||
}
|
||||
// log.Debug("SaveData Marshal success,Mod Key: %s", s.key)
|
||||
ctx := context.Background()
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
txOptions := &sql.TxOptions{}
|
||||
tx, err := db.SqlDb.BeginTx(ctx, txOptions)
|
||||
if err != nil {
|
||||
log.Debug("SaveData sql begin tx failed,Mod Key: %s err:%v", s.key, err)
|
||||
return
|
||||
}
|
||||
err = db.SaveServerData(&DbData)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
log.Debug("SaveData sql exec ,Mod Key: %s err:%v", s.key, err)
|
||||
return
|
||||
}
|
||||
tx.Commit()
|
||||
}
|
||||
|
||||
@ -32,6 +32,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
|
||||
}
|
||||
OrderData, err = GoogleVerify(player, OrderSn, req.ProduceId, req.Token)
|
||||
if err != nil {
|
||||
log.Debug("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token)
|
||||
log.Debug("GoogleVerify err:%v", err)
|
||||
time.Sleep(1 * time.Second)
|
||||
continue
|
||||
|
||||
@ -17,6 +17,7 @@ var AdminFuncMap = map[string]func([]interface{}) error{
|
||||
"ReqServerInfo": ReqServerInfo,
|
||||
"ReqReloadServerMail": ReqReloadServerMail,
|
||||
"ReqReload": ReqReload,
|
||||
"ReqAdminGm": ReqAdminGm,
|
||||
}
|
||||
|
||||
func AdminProcess(Func string, args []interface{}) {
|
||||
@ -69,18 +70,15 @@ func AdminPlayerInfo(args []interface{}) error {
|
||||
Index++
|
||||
}
|
||||
res["Order"] = OrderMap
|
||||
JsonBuff, err := json.Marshal(res)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
AdminPlayerBack(a, JsonBuff)
|
||||
AdminPlayerBack(a, res)
|
||||
return nil
|
||||
}
|
||||
|
||||
func AdminPlayerBack(a gate.Agent, buf []byte) {
|
||||
func AdminPlayerBack(a gate.Agent, res map[string]interface{}) {
|
||||
JsonBuff, _ := json.Marshal(res)
|
||||
response := &msg.AdminRes{}
|
||||
response.Func = "admin"
|
||||
response.Info = buf
|
||||
response.Info = JsonBuff
|
||||
a.WriteMsg(response)
|
||||
}
|
||||
|
||||
@ -89,11 +87,7 @@ func ReqServerInfo(args []interface{}) error {
|
||||
res := make(map[string]interface{})
|
||||
res["PlayerNum"] = G_GameLogicPtr.GetPlayerNum()
|
||||
res["StartTime"] = G_GameLogicPtr.GetStartTime()
|
||||
JsonBuff, err := json.Marshal(res)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
AdminPlayerBack(a, JsonBuff)
|
||||
AdminPlayerBack(a, res)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -108,10 +102,38 @@ func ReqReload(args []interface{}) error {
|
||||
gamedata.Reload()
|
||||
res := make(map[string]interface{})
|
||||
res["Code"] = 0
|
||||
JsonBuff, err := json.Marshal(res)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
AdminPlayerBack(a, JsonBuff)
|
||||
AdminPlayerBack(a, res)
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqAdminGm(args []interface{}) error {
|
||||
a, buf := ParseAdminArgs(args)
|
||||
req := &msg.ReqAdminGm{}
|
||||
proto.Unmarshal(buf, req)
|
||||
res := make(map[string]interface{})
|
||||
res["Code"] = 0
|
||||
res["Msg"] = "ok"
|
||||
player := G_GameLogicPtr.GetPlayer(req.Uid)
|
||||
if player == nil {
|
||||
res["Code"] = 1
|
||||
res["Msg"] = "player not found"
|
||||
AdminPlayerBack(a, res)
|
||||
return nil
|
||||
}
|
||||
player.lock.Lock()
|
||||
defer player.lock.Unlock()
|
||||
err := ReqGmCommand_(player, req.Command)
|
||||
|
||||
if err != nil {
|
||||
res["Code"] = 1
|
||||
res["Msg"] = err.Error()
|
||||
}
|
||||
if err != nil {
|
||||
res["Code"] = 1
|
||||
res["Msg"] = err.Error()
|
||||
AdminPlayerBack(a, res)
|
||||
return err
|
||||
}
|
||||
AdminPlayerBack(a, res)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"server/GoUtil"
|
||||
"server/MergeConst"
|
||||
@ -68,6 +69,12 @@ func HandleClientReq(args []interface{}) {
|
||||
detail := &msg.ReqRegisterAccount{}
|
||||
proto.Unmarshal(buf, detail)
|
||||
gl := G_getGameLogic()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
GoUtil.SendFeishuFatal(0, m.GetFunc(), fmt.Sprintf("username: %s, fatal: %s", detail.UserName, r))
|
||||
log.Debug("uid : %d, func : %s, fatal : %s", 0, m.GetFunc(), r)
|
||||
}
|
||||
}()
|
||||
if gl.IsExsitAccount(detail.UserName) {
|
||||
ResRegisterAccount := &msg.ResRegisterAccount{}
|
||||
ResRegisterAccount.ResultCode = MergeConst.Protocol_Error_Account_Exist
|
||||
@ -96,14 +103,16 @@ func HandleClientReq(args []interface{}) {
|
||||
data, _ := proto.Marshal(ResRegisterAccount)
|
||||
gl.PackResInfo(a, "ResRegisterAccount", data)
|
||||
case "ReqLogin":
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
log.Debug("uid : %d, func : %s, fatal : %s", 0, m.GetFunc(), r)
|
||||
}
|
||||
}()
|
||||
|
||||
detail := &msg.ReqLogin{}
|
||||
proto.Unmarshal(buf, detail)
|
||||
accountInfo := db.GetAccountInfoFromDb(detail.UserName)
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
GoUtil.SendFeishuFatal(0, m.GetFunc(), fmt.Sprintf("username: %s, fatal: %s", detail.UserName, r))
|
||||
log.Debug("uid : %d, func : %s, fatal : %s", 0, m.GetFunc(), r)
|
||||
}
|
||||
}()
|
||||
ResLogin := &msg.ResLogin{}
|
||||
if accountInfo != nil {
|
||||
if accountInfo.UserPassword == detail.UserPwd {
|
||||
@ -159,13 +168,15 @@ func HandleClientReq(args []interface{}) {
|
||||
backup := p.(*Player).BackUp() // 备份当前的 Player 值
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
log.Debug("uid : %d, func : %s, fatal : %s", p.(*Player).M_DwUin, m.GetFunc(), r)
|
||||
log.Error("uid : %d, func : %s, fatal : %s", p.(*Player).M_DwUin, m.GetFunc(), r)
|
||||
GoUtil.SendFeishuFatal(int(p.(*Player).M_DwUin), m.GetFunc(), r.(string))
|
||||
p.(*Player).Recover(backup) //还原Player的数据
|
||||
}
|
||||
p.(*Player).lock.Unlock() //解锁
|
||||
}()
|
||||
p.(*Player).args = make(map[string]interface{})
|
||||
p.(*Player).args["func"] = m
|
||||
p.(*Player).args["agent"] = a
|
||||
err := RunNetProcessByKey(m.GetFunc(), []interface{}{a, buf})
|
||||
if err != nil {
|
||||
log.Debug("uid : %d, func : %s, err : %s", p.(*Player).M_DwUin, m.GetFunc(), err)
|
||||
|
||||
@ -47,7 +47,7 @@ func (b *Base) InitData(Uid int) {
|
||||
|
||||
func (b *Base) Login() {
|
||||
b.LoginTime = GoUtil.Now()
|
||||
// b.LogoutTime = 0
|
||||
b.LogoutTime = 0
|
||||
}
|
||||
|
||||
func (b *Base) GetNickName() string {
|
||||
|
||||
@ -13,6 +13,7 @@ type FriendMod struct {
|
||||
Card map[string]*card.CardInfo // 收到的申请交换
|
||||
Log []*LogInfo // 日志
|
||||
AutoId int
|
||||
Id int64 // 已同步msg ID
|
||||
}
|
||||
|
||||
const (
|
||||
@ -61,6 +62,14 @@ func (f *FriendMod) InitData() {
|
||||
}
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetSyncId() int64 {
|
||||
return f.Id
|
||||
}
|
||||
|
||||
func (f *FriendMod) SetSyncId(Id int64) {
|
||||
f.Id = Id
|
||||
}
|
||||
|
||||
func (f *FriendMod) AddFriend(id int) {
|
||||
f.FriendList[id] = struct{}{}
|
||||
delete(f.ApplyList, id)
|
||||
|
||||
@ -158,3 +158,17 @@ func Merge(Item1, Item2 []*Item) []*Item {
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func MutilItem(i []*Item, num int) []*Item {
|
||||
if i == nil {
|
||||
return nil
|
||||
}
|
||||
res := make([]*Item, 0)
|
||||
for _, v := range i {
|
||||
res = append(res, &Item{
|
||||
Id: v.Id,
|
||||
Num: v.Num * num,
|
||||
})
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
@ -10,6 +10,8 @@ type Msg struct {
|
||||
SendT int64 // 发送时间
|
||||
End int64 // 过期时间
|
||||
Extra interface{} //额外信息
|
||||
Id int64
|
||||
H int //处理类型
|
||||
}
|
||||
|
||||
var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE}
|
||||
|
||||
@ -343,7 +343,7 @@ func getEmitSeries(o *OrderMod, Emit []int) string {
|
||||
o.EmitShuffle = append(o.EmitShuffle, EmitSerie)
|
||||
}
|
||||
}
|
||||
GoUtil.ShuffleStringArray(o.EmitShuffle)
|
||||
o.EmitShuffle = GoUtil.ShuffleStringArray(o.EmitShuffle)
|
||||
}
|
||||
PopEmitId, NewSlice := GoUtil.PopStringArray(o.EmitShuffle)
|
||||
o.EmitShuffle = NewSlice
|
||||
@ -364,7 +364,7 @@ func getEmitSeries(o *OrderMod, Emit []int) string {
|
||||
}
|
||||
Num := 1
|
||||
for {
|
||||
GoUtil.ShuffleStringArray(o.EmitShuffle)
|
||||
o.EmitShuffle = GoUtil.ShuffleStringArray(o.EmitShuffle)
|
||||
if o.EmitShuffle[0] != PopEmitId {
|
||||
break
|
||||
}
|
||||
|
||||
@ -85,11 +85,11 @@ type Info struct {
|
||||
func (p *PlayroomMod) InitData() {
|
||||
if p.Collect == nil {
|
||||
p.Collect = make(map[int]int)
|
||||
}
|
||||
InitCollect := playroomCfg.GetInitDecorate()
|
||||
for _, v := range InitCollect {
|
||||
p.Collect[v] = 1
|
||||
}
|
||||
}
|
||||
if p.Room == nil {
|
||||
p.Room = make(map[int]int)
|
||||
p.JackpotNum = playroomCfg.GetJackpotNum()
|
||||
@ -189,9 +189,6 @@ func (p *PlayroomMod) SetTarget(Target int) {
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) SetGameId(GameId int) {
|
||||
if p.GameId != 0 {
|
||||
return
|
||||
}
|
||||
p.GameId = GameId
|
||||
}
|
||||
|
||||
@ -468,9 +465,10 @@ func (p *PlayroomMod) FlipCard(Pos int) (int, error) {
|
||||
return Prob, nil
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) GetFlipReward() ([]*item.Item, error) {
|
||||
func (p *PlayroomMod) GetFlipReward() ([]*item.Item, int, error) {
|
||||
check := make(map[int]int)
|
||||
Items := make([]*item.Item, 0)
|
||||
T := p.Target
|
||||
for _, v := range p.Flip {
|
||||
check[v]++
|
||||
if check[v] == 3 {
|
||||
@ -491,10 +489,10 @@ func (p *PlayroomMod) GetFlipReward() ([]*item.Item, error) {
|
||||
p.GameId = 0
|
||||
p.Flip = make(map[int]int)
|
||||
p.Target = 0
|
||||
return Items, nil
|
||||
return Items, T, nil
|
||||
}
|
||||
}
|
||||
return Items, fmt.Errorf("GetFlipReward check is not 3")
|
||||
return Items, T, fmt.Errorf("GetFlipReward check is not 3")
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) BuyItem(Id int) ([]*item.Item, []*item.Item) {
|
||||
@ -509,9 +507,10 @@ func (p *PlayroomMod) UnLock(Lv int) {
|
||||
if len(p.Physiology) == 0 {
|
||||
Now := GoUtil.Now()
|
||||
p.Physiology = make(map[int]*Physiology)
|
||||
for k := 1; k <= 5; k++ {
|
||||
Max := playroomCfg.GetPhysiologyMax(k)
|
||||
p.Physiology[k] = &Physiology{Id: k, Num: Max, Time: Now}
|
||||
TypeList := playroomCfg.GetPhysiologyTypeList()
|
||||
for _, v := range TypeList {
|
||||
Max := playroomCfg.GetPhysiologyMax(v)
|
||||
p.Physiology[v] = &Physiology{Id: v, Num: Max, Time: Now}
|
||||
}
|
||||
}
|
||||
if len(p.MoodInfo) == 0 {
|
||||
@ -521,3 +520,13 @@ func (p *PlayroomMod) UnLock(Lv int) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// shop
|
||||
func (p *PlayroomMod) ShopBuy(Id, Num int) ([]*item.Item, []*item.Item, error) {
|
||||
AddItemId, CostItem := playroomCfg.GetShopItem(Id)
|
||||
if AddItemId == 0 {
|
||||
return nil, nil, fmt.Errorf("ShopBuy AddItemId is 0")
|
||||
}
|
||||
NewCostItem := item.MutilItem(CostItem, Num)
|
||||
return []*item.Item{item.NewItem(AddItemId, Num)}, NewCostItem, nil
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2,12 +2,13 @@ package network
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"github.com/gorilla/websocket"
|
||||
"net"
|
||||
"net/http"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
type WSServer struct {
|
||||
@ -41,7 +42,7 @@ func (handler *WSHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
conn, err := handler.upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Debug("upgrade error: %v", err)
|
||||
// log.Debug("upgrade error: %v", err)
|
||||
return
|
||||
}
|
||||
conn.SetReadLimit(int64(handler.maxMsgLen))
|
||||
|
||||
Loading…
Reference in New Issue
Block a user