-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy patheventFuncs.go
71 lines (64 loc) · 1.45 KB
/
eventFuncs.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
package shoset
import (
"fmt"
"time"
"github.com/ditrit/shoset/msg"
)
// GetEvent :
func GetEvent(c *ShosetConn) (msg.Message, error) {
var evt msg.Event
err := c.ReadMessage(&evt)
return evt, err
}
// HandleEvent :
func HandleEvent(c *ShosetConn, message msg.Message) error {
evt := message.(msg.Event)
fmt.Println("Shoset")
c.GetCh().Queue["evt"].Push(evt, c.GetRemoteShosetType(), c.GetLocalAddress())
return nil
}
// SendEventConn :
func SendEventConn(c *ShosetConn, evt interface{}) {
fmt.Print("Sending config.\n")
c.WriteString("evt")
c.WriteMessage(evt)
}
// SendEvent :
func SendEvent(c *Shoset, evt msg.Message) {
fmt.Print("Sending event.\n")
c.ConnsByName.IterateAll(
func(key string, conn *ShosetConn) {
conn.SendMessage(evt)
},
)
}
// WaitEvent :
func WaitEvent(c *Shoset, replies *msg.Iterator, args map[string]string, timeout int) *msg.Message {
topicName, ok := args["topic"]
if !ok {
return nil
}
eventName := args["event"]
term := make(chan *msg.Message, 1)
cont := true
go func() {
for cont {
message := replies.Get().GetMessage()
if message != nil {
event := message.(msg.Event)
if event.GetTopic() == topicName && (eventName == "" || event.GetEvent() == eventName) {
term <- &message
}
} else {
time.Sleep(time.Duration(10) * time.Millisecond)
}
}
}()
select {
case res := <-term:
cont = false
return res
case <-time.After(time.Duration(timeout) * time.Second):
return nil
}
}