架构优化

This commit is contained in:
hahwu 2026-02-02 17:42:57 +08:00
parent 90e1115798
commit bd96bfa29e
6 changed files with 32 additions and 66 deletions

View File

@ -56,7 +56,11 @@ func (p *Player) handle(m *msg.Msg) error {
switch m.Type { switch m.Type {
case msg.HANDLE_TYPE_APPLY: // 好友申请 case msg.HANDLE_TYPE_APPLY: // 好友申请
FriendMod := p.PlayMod.getFriendMod() FriendMod := p.PlayMod.getFriendMod()
FriendMod.AddFriendApply(m.From) ok := FriendMod.AddFriendApply(m.From)
// 已申请
if ok {
return nil
}
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "", m.SendT) p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "", m.SendT)
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From) PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
p.PushClientRes(&proto.ResFriendApplyNotify{ p.PushClientRes(&proto.ResFriendApplyNotify{
@ -73,10 +77,10 @@ func (p *Player) handle(m *msg.Msg) error {
Type: friend.FRIEND_NOTIFY_AGREE, Type: friend.FRIEND_NOTIFY_AGREE,
Time: int32(GoUtil.Now()), Time: int32(GoUtil.Now()),
}) })
PlayroomMod := p.PlayMod.getPlayroomMod() // PlayroomMod := p.PlayMod.getPlayroomMod()
BaseMod := p.PlayMod.getBaseMod() // BaseMod := p.PlayMod.getBaseMod()
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel()) // PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
p.PlayroomBackData() // p.PlayroomBackData()
p.TeLog("friend_add", map[string]interface{}{ p.TeLog("friend_add", map[string]interface{}{
"player_id": m.From, "player_id": m.From,
"add_type": "接受申请", "add_type": "接受申请",
@ -128,10 +132,6 @@ func (p *Player) handle(m *msg.Msg) error {
return nil return nil
} }
FriendMod.AddFriend(m.From) FriendMod.AddFriend(m.From)
PlayroomMod := p.PlayMod.getPlayroomMod()
BaseMod := p.PlayMod.getBaseMod()
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
p.PlayroomBackData()
p.TeLog("friend_add", map[string]interface{}{ p.TeLog("friend_add", map[string]interface{}{
"player_id": m.From, "player_id": m.From,
"add_type": "发起申请", "add_type": "发起申请",

View File

@ -372,7 +372,7 @@ func PlayerMsgHandler(data *msg.Msg) (interface{}, error) {
if p == nil || p.stop { if p == nil || p.stop {
return nil, nil return nil, nil
} }
p.Send(data.Clone()) go p.Send(data.Clone())
// 处理完后发送消费消息 // 处理完后发送消费消息
if data.HandleType == msg.HANDLE_MOD_PLAYER_MSG { if data.HandleType == msg.HANDLE_MOD_PLAYER_MSG {
data.HandleType = msg.HANDLE_MOD_COMSUME_MSG data.HandleType = msg.HANDLE_MOD_COMSUME_MSG
@ -862,6 +862,16 @@ func saveMessage(m *msg.Msg) error {
messages := getMessgeUnsafe(int64(m.To)) messages := getMessgeUnsafe(int64(m.To))
messages.mu.Lock() messages.mu.Lock()
defer messages.mu.Unlock() defer messages.mu.Unlock()
for _, msgItem := range messages.Messages {
if msgItem == nil {
continue
}
if msgItem.UniKey == m.UniKey {
// 已存在相同消息,直接返回
return nil
}
}
// 添加消息
messages.Messages = append(messages.Messages, m) messages.Messages = append(messages.Messages, m)
return nil return nil
} }

View File

@ -330,8 +330,13 @@ func (f *FriendMod) GetSimpleFriendList() []int {
} }
// 收到申请 // 收到申请
func (f *FriendMod) AddFriendApply(Uid int) { func (f *FriendMod) AddFriendApply(Uid int) bool {
ok := f.CheckApply(Uid)
if ok {
return ok
}
f.ApplyList[Uid] = GoUtil.Now() f.ApplyList[Uid] = GoUtil.Now()
return false
} }
// 发送申请 // 发送申请

View File

@ -1049,35 +1049,6 @@ func (p *PlayroomMod) GetPetAir() map[int]*PetAirInfo {
return p.NewPetAir return p.NewPetAir
} }
// RoomPoint Get Set
func (p *PlayroomMod) GetRoomPoint() int {
return p.RoomPoint
}
func (p *PlayroomMod) SetRoomPoint(Point int) {
p.RoomPoint = Point
}
func (p *PlayroomMod) AddRoomPointInvite(lv int) {
if lv < ROOM_POINT_UNLOCK_LV {
return
}
Point := playroomCfg.GetRoomPointInvite()
p.RoomPoint += Point
if p.RoomPoint < 0 {
p.RoomPoint = 0
}
}
func (p *PlayroomMod) AddRoomPointAdd(lv int) {
if lv < ROOM_POINT_UNLOCK_LV {
return
}
Point := playroomCfg.GetRoomPointAdd()
p.RoomPoint += Point
if p.RoomPoint < 0 {
p.RoomPoint = 0
}
}
func (p *PlayroomMod) BackDataTask() []*msg.DailyTask { func (p *PlayroomMod) BackDataTask() []*msg.DailyTask {
DailyTask := make([]*msg.DailyTask, 0) DailyTask := make([]*msg.DailyTask, 0)
for k, v := range p.DailyTask { for k, v := range p.DailyTask {

View File

@ -1200,25 +1200,25 @@ func (p *Player) GetIp() string {
func (p *Player) func_exec_add() error { func (p *Player) func_exec_add() error {
now := time.Now().Unix() now := time.Now().Unix()
// 如果是新的一秒,重置计数 // 如果是新的一秒,重置计数
if now != int64(p.func_time) { if now != int64(p.func_time) {
p.func_time = int(now) p.func_time = int(now)
p.args["func_exec_count"] = 1 p.args["func_exec_count"] = 1
return nil return nil
} }
// 获取当前秒内的调用次数 // 获取当前秒内的调用次数
count := 0 count := 0
if v, ok := p.args["func_exec_count"]; ok { if v, ok := p.args["func_exec_count"]; ok {
count = GoUtil.Int(v) count = GoUtil.Int(v)
} }
// 检查是否超过限制 // 检查是否超过限制
if count >= 20 { if count >= 20 {
return errors.New("func_exec_add: call limit exceeded (20 times per second)") return errors.New("func_exec_add: call limit exceeded (20 times per second)")
} }
// 增加计数 // 增加计数
p.args["func_exec_count"] = count + 1 p.args["func_exec_count"] = count + 1
return nil return nil
@ -1240,9 +1240,10 @@ func (p *Player) DispatcherHandle() {
case msg := <-p.msgChan: case msg := <-p.msgChan:
if msg != nil { if msg != nil {
p.wg.Done() p.wg.Done()
log.Debug("player %d recive msg %v", p.M_DwUin, msg) now := time.Now()
// 直接在当前 goroutine 中处理,避免创建过多 goroutine // 直接在当前 goroutine 中处理,避免创建过多 goroutine
p.HandleMsg(msg.Clone()) p.HandleMsg(msg.Clone())
log.Debug("player %d recive msg %v;handle time %v", p.M_DwUin, msg, time.Since(now))
} }
} }
} }

View File

@ -1915,10 +1915,6 @@ func ReqApplyFriend(player *Player, buf []byte) error {
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
Uid: req.Uid, Uid: req.Uid,
}) })
PlayroomMod := player.PlayMod.getPlayroomMod()
BaseMod := player.PlayMod.getBaseMod()
PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel())
player.PlayroomBackData()
return nil return nil
} }
@ -1959,10 +1955,6 @@ func ReqAgreeFriend(player *Player, buf []byte) error {
player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now()) player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now())
player.FriendApplyBackData() player.FriendApplyBackData()
player.FriendLogBackData() player.FriendLogBackData()
PlayroomMod := player.PlayMod.getPlayroomMod()
BaseMod := player.PlayMod.getBaseMod()
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
player.PlayroomBackData()
player.PlayMod.save() player.PlayMod.save()
return nil return nil
} }
@ -3374,10 +3366,6 @@ func ReqAutoAddInviteFriend(player *Player, buf []byte) error {
Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND,
SendT: GoUtil.Now(), SendT: GoUtil.Now(),
}) })
PlayroomMod := player.PlayMod.getPlayroomMod()
BaseMod := player.PlayMod.getBaseMod()
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
player.PlayroomBackData()
player.TeLog("friend_add", map[string]interface{}{ player.TeLog("friend_add", map[string]interface{}{
"player_id": req.Id, "player_id": req.Id,
"add_type": "邀请注册", "add_type": "邀请注册",
@ -3418,10 +3406,6 @@ func ReqAutoAddInviteFriend2(player *Player, buf []byte) error {
Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND,
SendT: GoUtil.Now(), SendT: GoUtil.Now(),
}) })
PlayroomMod := player.PlayMod.getPlayroomMod()
BaseMod := player.PlayMod.getBaseMod()
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
player.PlayroomBackData()
player.TeLog("friend_add", map[string]interface{}{ player.TeLog("friend_add", map[string]interface{}{
"player_id": req.Id, "player_id": req.Id,
"add_type": "邀请注册", "add_type": "邀请注册",
@ -5050,11 +5034,6 @@ func ReqAddNpc(player *Player, buf []byte) error {
} }
player.PlayMod.save() player.PlayMod.save()
player.FriendListBackData() player.FriendListBackData()
PlayroomMod := player.PlayMod.getPlayroomMod()
BaseMod := player.PlayMod.getBaseMod()
PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel())
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
player.PlayroomBackData()
player.TeLog("add_npc", map[string]interface{}{ player.TeLog("add_npc", map[string]interface{}{
"NpcId": int(req.NpcId), "NpcId": int(req.NpcId),
}) })