nex-go/sequence_id_manager.go

29 lines
877 B
Go

package nex
// SequenceIDManager implements an API for managing the sequence IDs of different packet streams on a client
type SequenceIDManager struct {
reliableCounter *Counter // TODO - NEX only uses one reliable stream, but Rendezvous supports many. This needs to be a slice!
pingCounter *Counter
// TODO - Unreliable packets for Rendezvous
}
// Next gets the next sequence ID for the packet. Returns 0 for an unsupported packet
func (s *SequenceIDManager) Next(packet PacketInterface) uint32 {
if packet.HasFlag(FlagReliable) {
return s.reliableCounter.Increment()
}
if packet.Type() == PingPacket {
return s.pingCounter.Increment()
}
return 0
}
// NewSequenceIDManager returns a new SequenceIDManager
func NewSequenceIDManager() *SequenceIDManager {
return &SequenceIDManager{
reliableCounter: NewCounter(0),
pingCounter: NewCounter(0),
}
}