mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 07:32:32 +01:00
refactor(channelserver): extract UserBinaryStore and MinidataStore
The userBinary and minidata maps with their locks were spread across Server as raw fields with manual lock management. Cross-channel session searches also required acquiring nested locks (server lock + binary lock). Encapsulating in dedicated types eliminates the nested locking and reduces Server's field count by 4.
This commit is contained in:
@@ -217,10 +217,7 @@ func handleMsgMhfUseUdShopCoin(s *Session, p mhfpacket.MHFPacket) {}
|
||||
func handleMsgMhfGetEnhancedMinidata(s *Session, p mhfpacket.MHFPacket) {
|
||||
pkt := p.(*mhfpacket.MsgMhfGetEnhancedMinidata)
|
||||
|
||||
s.server.minidataLock.RLock()
|
||||
data, ok := s.server.minidataParts[pkt.CharID]
|
||||
s.server.minidataLock.RUnlock()
|
||||
|
||||
data, ok := s.server.minidata.Get(pkt.CharID)
|
||||
if !ok {
|
||||
data = make([]byte, 1)
|
||||
}
|
||||
@@ -231,9 +228,7 @@ func handleMsgMhfSetEnhancedMinidata(s *Session, p mhfpacket.MHFPacket) {
|
||||
pkt := p.(*mhfpacket.MsgMhfSetEnhancedMinidata)
|
||||
dumpSaveData(s, pkt.RawDataPayload, "minidata")
|
||||
|
||||
s.server.minidataLock.Lock()
|
||||
s.server.minidataParts[s.charID] = pkt.RawDataPayload
|
||||
s.server.minidataLock.Unlock()
|
||||
s.server.minidata.Set(s.charID, pkt.RawDataPayload)
|
||||
|
||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user