Documentation
¶
Overview ¶
Package updates provides a Telegram's state synchronization engine.
It guarantees that all state-sensitive updates will be performed in correct order.
Limitations:
Engine cannot verify stateless types of updates (tg.UpdatesClass without Seq, or tg.UpdateClass without Pts or Qts).
Due to the fact that updates.getDifference and updates.getChannelDifference do not return event sequences, the engine cannot guarantee the correctness of these operations. We rely on the server here.
Engine cannot recover the channel gap if there is a ChannelDifferenceTooLong error. Restoring the state in such situation is not the prerogative of this engine. See: https://core.telegram.org/constructor/updates.channelDifferenceTooLong
TODO: Write implementation details.
Index ¶
- Variables
- type AccessHasher
- type Config
- type DiffUpdate
- type Engine
- type Entities
- type Handler
- type MemStorage
- func (s *MemStorage) Channels(f func(channelID, pts int)) error
- func (s *MemStorage) ForgetAll() error
- func (s *MemStorage) GetState() (State, error)
- func (s *MemStorage) SetChannelPts(channelID, pts int) error
- func (s *MemStorage) SetDate(date int) error
- func (s *MemStorage) SetPts(pts int) error
- func (s *MemStorage) SetQts(qts int) error
- func (s *MemStorage) SetSeq(seq int) error
- func (s *MemStorage) SetState(state State) error
- type RawClient
- type State
- type Storage
Constants ¶
This section is empty.
Variables ¶
var ErrStateNotFound = xerrors.Errorf("state not found")
ErrStateNotFound means that state is not found in storage.
Functions ¶
This section is empty.
Types ¶
type AccessHasher ¶
type AccessHasher interface {
GetChannelHash(channelID int) (hash int64, found bool, err error)
SetChannelHash(channelID int, accessHash int64) error
}
AccessHasher stores channel access hashes.
type Config ¶
type Config struct {
RawClient RawClient
Handler Handler
Storage Storage
AccessHasher AccessHasher
SelfID int
IsBot bool
Forget bool
Logger *zap.Logger
}
Config of the engine.
type DiffUpdate ¶
type DiffUpdate struct {
NewMessages []tg.MessageClass
NewEncryptedMessages []tg.EncryptedMessageClass
Users []tg.UserClass
Chats []tg.ChatClass
}
DiffUpdate struct.
type Engine ¶
type Engine struct {
// contains filtered or unexported fields
}
Engine deals with gaps.
func (*Engine) HandleUpdates ¶
func (e *Engine) HandleUpdates(u tg.UpdatesClass) error
HandleUpdates handles updates.
type Entities ¶
type Entities struct {
Users map[int]*tg.User
Chats map[int]*tg.Chat
Channels map[int]*tg.Channel
ChannelsForbidden map[int]*tg.ChannelForbidden
}
Entities contains update entities.
type Handler ¶
type Handler interface {
HandleDiff(DiffUpdate) error
HandleUpdates(*Entities, []tg.UpdateClass) error
ChannelTooLong(channelID int)
}
Handler interface.
type MemStorage ¶
type MemStorage struct {
// contains filtered or unexported fields
}
MemStorage is a in-memory sequence storage.
func (*MemStorage) Channels ¶
func (s *MemStorage) Channels(f func(channelID, pts int)) error
Channels iterates through channels.
func (*MemStorage) ForgetAll ¶
func (s *MemStorage) ForgetAll() error
ForgetAll clears all sequence info.
func (*MemStorage) GetState ¶
func (s *MemStorage) GetState() (State, error)
GetState returns the state.
func (*MemStorage) SetChannelPts ¶
func (s *MemStorage) SetChannelPts(channelID, pts int) error
SetChannelPts sets channel pts.
func (*MemStorage) SetState ¶
func (s *MemStorage) SetState(state State) error
SetState sets the state.
type RawClient ¶
type RawClient interface {
UpdatesGetState(ctx context.Context) (*tg.UpdatesState, error)
UpdatesGetDifference(ctx context.Context, request *tg.UpdatesGetDifferenceRequest) (tg.UpdatesDifferenceClass, error)
UpdatesGetChannelDifference(ctx context.Context, request *tg.UpdatesGetChannelDifferenceRequest) (tg.UpdatesChannelDifferenceClass, error)
}
RawClient is the interface which contains Telegram RPC methods used by the engine for state synchronization.
type Storage ¶
type Storage interface {
GetState() (State, error)
SetState(s State) error
SetPts(pts int) error
SetQts(qts int) error
SetSeq(seq int) error
SetDate(date int) error
SetChannelPts(channelID, pts int) error
Channels(iter func(channelID, pts int)) error
ForgetAll() error
}
Storage interface.