-
Notifications
You must be signed in to change notification settings - Fork 0
/
notifier.go
66 lines (58 loc) · 1.27 KB
/
notifier.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
package eventbus
import (
"errors"
"net"
)
//--------------------------------------------------
// Notifier
//--------------------------------------------------
type Notifier interface {
Notify(e *Event) error
}
type notifierImpl struct {
host string
port int
}
//--------------------------------------------------
// Methods
//--------------------------------------------------
func (n *notifierImpl) Notify(e *Event) error {
//setup conn
addr := net.TCPAddr{Port: n.port, IP: net.ParseIP(n.host)}
conn, err := net.Dial("tcp", addr.String())
if err != nil {
return err
}
//convert event in bytes
b, err := fromEvent(e)
if err != nil {
return err
}
//create frame
frameOut := NewFrame(EvtReqFrameType, b)
//write frame in conn
err = WriteFrame(conn, frameOut)
if err != nil {
return err
}
//read response (error ou ok)
frameIn, err := ReadFrame(conn)
if err != nil {
return err
}
//check if exists error
if frameIn.Type == ErrRespFrameType {
return errors.New(string(frameIn.Data))
}
//result
return nil
}
//--------------------------------------------------
// Public Operations
//--------------------------------------------------
func NewNotifier(host string, port int) Notifier {
n := new(notifierImpl)
n.host = host
n.port = port
return n
}