feat: complete cmpp platform phases 0-5

This commit is contained in:
hectorzhao
2026-07-01 13:22:04 +08:00
parent 824a8b334f
commit ee926fea04
86 changed files with 10490 additions and 14 deletions
+83
View File
@@ -0,0 +1,83 @@
package tracker
import (
"errors"
"sync"
)
var ErrMappingNotFound = errors.New("tracker mapping not found")
type Mapping struct {
MessageID string
SequenceID uint32
GatewayMessageID string
}
type Tracker struct {
mu sync.RWMutex
byMessage map[string]Mapping
bySeq map[uint32]string
byGateway map[string]string
}
func New() *Tracker {
return &Tracker{
byMessage: make(map[string]Mapping),
bySeq: make(map[uint32]string),
byGateway: make(map[string]string),
}
}
func (t *Tracker) TrackSubmit(messageID string, sequenceID uint32) Mapping {
t.mu.Lock()
defer t.mu.Unlock()
mapping := t.byMessage[messageID]
mapping.MessageID = messageID
mapping.SequenceID = sequenceID
t.byMessage[messageID] = mapping
t.bySeq[sequenceID] = messageID
return mapping
}
func (t *Tracker) TrackSubmitResp(sequenceID uint32, gatewayMessageID string) (Mapping, error) {
t.mu.Lock()
defer t.mu.Unlock()
messageID, ok := t.bySeq[sequenceID]
if !ok {
return Mapping{}, ErrMappingNotFound
}
mapping := t.byMessage[messageID]
mapping.GatewayMessageID = gatewayMessageID
t.byMessage[messageID] = mapping
t.byGateway[gatewayMessageID] = messageID
return mapping, nil
}
func (t *Tracker) ByGatewayMessageID(gatewayMessageID string) (Mapping, error) {
t.mu.RLock()
defer t.mu.RUnlock()
messageID, ok := t.byGateway[gatewayMessageID]
if !ok {
return Mapping{}, ErrMappingNotFound
}
return t.byMessage[messageID], nil
}
func (t *Tracker) ByMessageID(messageID string) (Mapping, error) {
t.mu.RLock()
defer t.mu.RUnlock()
mapping, ok := t.byMessage[messageID]
if !ok {
return Mapping{}, ErrMappingNotFound
}
return mapping, nil
}