gotd: add fallback handlers
Cherry-picked from https://github.com/gotd/td/commit/3238f7e7d3623ecd3648e2124f962c4ea0d03134
This commit is contained in:
committed by
Tulir Asokan
parent
8e7a7db85f
commit
097211cba1
@@ -2,15 +2,16 @@
|
|||||||
{{ $pkg := $.Package }}
|
{{ $pkg := $.Package }}
|
||||||
{{ template "header" $ }}
|
{{ template "header" $ }}
|
||||||
|
|
||||||
type handler = func(context.Context, Entities, UpdateClass) error
|
type Handler = func(context.Context, Entities, UpdateClass) error
|
||||||
|
|
||||||
type UpdateDispatcher struct {
|
type UpdateDispatcher struct {
|
||||||
handlers map[uint32]handler
|
handlers map[uint32]Handler
|
||||||
|
fallback Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUpdateDispatcher() UpdateDispatcher {
|
func NewUpdateDispatcher() UpdateDispatcher {
|
||||||
return UpdateDispatcher{
|
return UpdateDispatcher{
|
||||||
handlers: map[uint32]handler{},
|
handlers: map[uint32]Handler{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,10 +72,13 @@ func (u UpdateDispatcher) dispatch(ctx context.Context, e Entities, update Updat
|
|||||||
}
|
}
|
||||||
typeID := update.TypeID()
|
typeID := update.TypeID()
|
||||||
handler, ok := u.handlers[typeID]
|
handler, ok := u.handlers[typeID]
|
||||||
if !ok {
|
if ok {
|
||||||
return nil
|
return handler(ctx, e, update)
|
||||||
}
|
}
|
||||||
return handler(ctx, e, update)
|
if u.fallback != nil {
|
||||||
|
return u.fallback(ctx, e, update)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
{{- range $s := $.Structs }}{{ if eq $s.Interface "UpdateClass" }}
|
{{- range $s := $.Structs }}{{ if eq $s.Interface "UpdateClass" }}
|
||||||
@@ -90,4 +94,9 @@ func (u UpdateDispatcher) On{{ $eventName }}(handler {{ $eventName }}Handler) {
|
|||||||
}
|
}
|
||||||
{{- end }}{{ end }}
|
{{- end }}{{ end }}
|
||||||
|
|
||||||
|
// OnFallback sets fallback handler.
|
||||||
|
func (u *UpdateDispatcher) OnFallback(handler Handler) {
|
||||||
|
u.fallback = handler
|
||||||
|
}
|
||||||
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|||||||
Generated
+15
-6
@@ -31,15 +31,16 @@ var (
|
|||||||
_ = tdjson.Encoder{}
|
_ = tdjson.Encoder{}
|
||||||
)
|
)
|
||||||
|
|
||||||
type handler = func(context.Context, Entities, UpdateClass) error
|
type Handler = func(context.Context, Entities, UpdateClass) error
|
||||||
|
|
||||||
type UpdateDispatcher struct {
|
type UpdateDispatcher struct {
|
||||||
handlers map[uint32]handler
|
handlers map[uint32]Handler
|
||||||
|
fallback Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUpdateDispatcher() UpdateDispatcher {
|
func NewUpdateDispatcher() UpdateDispatcher {
|
||||||
return UpdateDispatcher{
|
return UpdateDispatcher{
|
||||||
handlers: map[uint32]handler{},
|
handlers: map[uint32]Handler{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,10 +101,13 @@ func (u UpdateDispatcher) dispatch(ctx context.Context, e Entities, update Updat
|
|||||||
}
|
}
|
||||||
typeID := update.TypeID()
|
typeID := update.TypeID()
|
||||||
handler, ok := u.handlers[typeID]
|
handler, ok := u.handlers[typeID]
|
||||||
if !ok {
|
if ok {
|
||||||
return nil
|
return handler(ctx, e, update)
|
||||||
}
|
}
|
||||||
return handler(ctx, e, update)
|
if u.fallback != nil {
|
||||||
|
return u.fallback(ctx, e, update)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewMessageHandler is a NewMessage event handler.
|
// NewMessageHandler is a NewMessage event handler.
|
||||||
@@ -1605,3 +1609,8 @@ func (u UpdateDispatcher) OnStarGiftAuctionUserState(handler StarGiftAuctionUser
|
|||||||
return handler(ctx, e, update.(*UpdateStarGiftAuctionUserState))
|
return handler(ctx, e, update.(*UpdateStarGiftAuctionUserState))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OnFallback sets fallback handler.
|
||||||
|
func (u *UpdateDispatcher) OnFallback(handler Handler) {
|
||||||
|
u.fallback = handler
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user