-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathhandlers.go
109 lines (83 loc) · 2.98 KB
/
handlers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package tdlib
import (
"github.com/aliforever/go-tdlib/entities"
"github.com/aliforever/go-tdlib/incomingevents"
"sync"
)
type Handlers struct {
rawIncomingEvent func(event []byte)
incomingEvent func(event incomingevents.Event)
onUpdateConnectionState func(newState entities.ConnectionStateType)
authorizationHandler AuthorizationHandler
onUpdateAuthorizationState func(newState entities.AuthorizationStateType)
onError func(err incomingevents.ErrorEvent)
eventTypeHandlerLocker sync.Mutex
eventTypeHandlers map[string]event
onNewMessageHandlers []*newMessageHandler
onMessageEditedHandlers []func(data *incomingevents.UpdateMessageEdited)
onMessageContentHandlers []func(data *incomingevents.UpdateMessageContent)
}
func NewHandlers() *Handlers {
return &Handlers{eventTypeHandlers: map[string]event{}}
}
func (h *Handlers) SetAuthorizationHandler(handler AuthorizationHandler) *Handlers {
h.authorizationHandler = handler
return h
}
func (h *Handlers) SetErrorHandler(fn func(err incomingevents.ErrorEvent)) *Handlers {
h.onError = fn
return h
}
func (h *Handlers) SetRawIncomingEventHandler(fn func(eventBytes []byte)) *Handlers {
h.rawIncomingEvent = fn
return h
}
func (h *Handlers) SetIncomingEventHandler(fn func(event incomingevents.Event)) *Handlers {
h.incomingEvent = fn
return h
}
func (h *Handlers) SetOnUpdateConnectionStateEventHandler(fn func(newState entities.ConnectionStateType)) *Handlers {
h.onUpdateConnectionState = fn
return h
}
func (h *Handlers) SetOnUpdateAuthorizationStateEventHandler(fn func(newState entities.AuthorizationStateType)) *Handlers {
h.onUpdateAuthorizationState = fn
return h
}
func (h *Handlers) AddOnNewMessageHandler(
fn func(data *incomingevents.UpdateNewMessage),
filters *OnNewMessageFilters,
) *Handlers {
h.eventTypeHandlerLocker.Lock()
defer h.eventTypeHandlerLocker.Unlock()
h.onNewMessageHandlers = append(h.onNewMessageHandlers, newOnNewMessageHandler(fn, filters))
return h
}
func (h *Handlers) AddOnUpdateMessageEditedHandler(
fn func(data *incomingevents.UpdateMessageEdited),
) *Handlers {
h.eventTypeHandlerLocker.Lock()
defer h.eventTypeHandlerLocker.Unlock()
h.onMessageEditedHandlers = append(h.onMessageEditedHandlers, fn)
return h
}
func (h *Handlers) AddOnUpdateMessageContentHandler(
fn func(data *incomingevents.UpdateMessageContent),
) *Handlers {
h.eventTypeHandlerLocker.Lock()
defer h.eventTypeHandlerLocker.Unlock()
h.onMessageContentHandlers = append(h.onMessageContentHandlers, fn)
return h
}
func (h *Handlers) SetOnFile(fn func(data *incomingevents.UpdateFile)) *Handlers {
h.eventTypeHandlerLocker.Lock()
defer h.eventTypeHandlerLocker.Unlock()
h.eventTypeHandlers["updateFile"] = NewEventHandler[incomingevents.UpdateFile](fn)
return h
}
func (h *Handlers) AddEventTypeHandler(eventType string, e event) *Handlers {
h.eventTypeHandlerLocker.Lock()
defer h.eventTypeHandlerLocker.Unlock()
h.eventTypeHandlers[eventType] = e
return h
}