架构优化

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 {
case msg.HANDLE_TYPE_APPLY: // 好友申请
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)
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
p.PushClientRes(&proto.ResFriendApplyNotify{
@ -73,10 +77,10 @@ func (p *Player) handle(m *msg.Msg) error {
Type: friend.FRIEND_NOTIFY_AGREE,
Time: int32(GoUtil.Now()),
})
PlayroomMod := p.PlayMod.getPlayroomMod()
BaseMod := p.PlayMod.getBaseMod()
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
p.PlayroomBackData()
// PlayroomMod := p.PlayMod.getPlayroomMod()
// BaseMod := p.PlayMod.getBaseMod()
// PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
// p.PlayroomBackData()
p.TeLog("friend_add", map[string]interface{}{
"player_id": m.From,
"add_type": "接受申请",
@ -128,10 +132,6 @@ func (p *Player) handle(m *msg.Msg) error {
return nil
}
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{}{
"player_id": m.From,
"add_type": "发起申请",

View File

@ -372,7 +372,7 @@ func PlayerMsgHandler(data *msg.Msg) (interface{}, error) {
if p == nil || p.stop {
return nil, nil
}
p.Send(data.Clone())
go p.Send(data.Clone())
// 处理完后发送消费消息
if data.HandleType == msg.HANDLE_MOD_PLAYER_MSG {
data.HandleType = msg.HANDLE_MOD_COMSUME_MSG
@ -862,6 +862,16 @@ func saveMessage(m *msg.Msg) error {
messages := getMessgeUnsafe(int64(m.To))
messages.mu.Lock()
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)
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()
return false
}
// 发送申请

View File

@ -1049,35 +1049,6 @@ func (p *PlayroomMod) GetPetAir() map[int]*PetAirInfo {
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 {
DailyTask := make([]*msg.DailyTask, 0)
for k, v := range p.DailyTask {

View File

@ -1200,25 +1200,25 @@ func (p *Player) GetIp() string {
func (p *Player) func_exec_add() error {
now := time.Now().Unix()
// 如果是新的一秒,重置计数
if now != int64(p.func_time) {
p.func_time = int(now)
p.args["func_exec_count"] = 1
return nil
}
// 获取当前秒内的调用次数
count := 0
if v, ok := p.args["func_exec_count"]; ok {
count = GoUtil.Int(v)
}
// 检查是否超过限制
if count >= 20 {
return errors.New("func_exec_add: call limit exceeded (20 times per second)")
}
// 增加计数
p.args["func_exec_count"] = count + 1
return nil
@ -1240,9 +1240,10 @@ func (p *Player) DispatcherHandle() {
case msg := <-p.msgChan:
if msg != nil {
p.wg.Done()
log.Debug("player %d recive msg %v", p.M_DwUin, msg)
now := time.Now()
// 直接在当前 goroutine 中处理,避免创建过多 goroutine
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,
Uid: req.Uid,
})
PlayroomMod := player.PlayMod.getPlayroomMod()
BaseMod := player.PlayMod.getBaseMod()
PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel())
player.PlayroomBackData()
return nil
}
@ -1959,10 +1955,6 @@ func ReqAgreeFriend(player *Player, buf []byte) error {
player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now())
player.FriendApplyBackData()
player.FriendLogBackData()
PlayroomMod := player.PlayMod.getPlayroomMod()
BaseMod := player.PlayMod.getBaseMod()
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
player.PlayroomBackData()
player.PlayMod.save()
return nil
}
@ -3374,10 +3366,6 @@ func ReqAutoAddInviteFriend(player *Player, buf []byte) error {
Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND,
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_id": req.Id,
"add_type": "邀请注册",
@ -3418,10 +3406,6 @@ func ReqAutoAddInviteFriend2(player *Player, buf []byte) error {
Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND,
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_id": req.Id,
"add_type": "邀请注册",
@ -5050,11 +5034,6 @@ func ReqAddNpc(player *Player, buf []byte) error {
}
player.PlayMod.save()
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{}{
"NpcId": int(req.NpcId),
})