-
Notifications
You must be signed in to change notification settings - Fork 3
/
hooks.go
73 lines (57 loc) · 1.46 KB
/
hooks.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
// Copyright (c) 2017 Darren Whitlen <darren@kiwiirc.com>
// released under the MIT license
package ircbnc
import (
"github.com/goshuirc/irc-go/ircmsg"
)
type HookEmitter struct {
Registered map[string][]func(interface{})
}
func MakeHookEmitter() HookEmitter {
return HookEmitter{
Registered: make(map[string][]func(interface{})),
}
}
func (hooks *HookEmitter) Dispatch(hookName string, data interface{}) {
callbacks, _ := hooks.Registered[hookName]
for _, p := range callbacks {
p(data)
}
}
func (hooks *HookEmitter) Register(hookName string, p func(interface{})) {
_, exists := hooks.Registered[hookName]
if !exists {
hooks.Registered[hookName] = make([]func(interface{}), 0)
}
hooks.Registered[hookName] = append(hooks.Registered[hookName], p)
}
/**
* Hooks that are dispatched throughout the core.
* Components and plugins will listen out for these hooks
* to extend the core functionality.
*/
var HookIrcRawName = "irc.raw"
type HookIrcRaw struct {
Listener *Listener
FromServer bool
FromClient bool
User *User
Server *ServerConnection
Raw string
Message ircmsg.IrcMessage
Halt bool
}
var HookNewListenerName = "listener.new"
type HookNewListener struct {
Listener *Listener
Halt bool
}
var HookListenerCloseName = "listener.close"
type HookListenerClose struct {
Listener *Listener
}
var HookStateSentName = "listener.statesent"
type HookStateSent struct {
Listener *Listener
Server *ServerConnection
}