wide/event/events.go

56 lines
1.2 KiB
Go
Raw Normal View History

2014-09-15 10:24:40 +04:00
// 事件处理.
package event
2014-09-15 14:03:52 +04:00
import "github.com/golang/glog"
2014-09-15 10:24:40 +04:00
const (
EvtGOPATHNotFound = iota // 事件:找不到环境变量 $GOPATH
EvtGOROOTNotFound // 事件:找不到环境变量 $GOROOT
EvtGocodeNotFount // 事件:找不到 gocode
EvtIDEStubNotFound // 事件:找不到 IDE stub
2014-09-15 14:03:52 +04:00
2014-09-15 10:24:40 +04:00
)
2014-09-15 14:03:52 +04:00
const MaxQueueLength = 10
2014-09-15 10:24:40 +04:00
// 全局事件队列.
// 入队的事件将分发到每个用户的通知队列.
2014-09-15 14:03:52 +04:00
var EventQueue = make(chan int, MaxQueueLength)
2014-09-15 10:24:40 +04:00
// 用户事件队列.
// 入队的事件将翻译为通知,并通过通知通道推送到前端.
2014-09-15 14:03:52 +04:00
var UserEventQueues = map[string]chan int{}
2014-09-15 10:24:40 +04:00
// 加载事件处理.
func Load() {
go func() {
2014-09-15 14:03:52 +04:00
for event := range EventQueue {
2014-09-15 10:24:40 +04:00
glog.V(5).Info("收到全局事件 [%d]", event)
// 将事件分发到每个用户的事件队列里
2014-09-15 14:03:52 +04:00
for _, userQueue := range UserEventQueues {
2014-09-15 10:24:40 +04:00
userQueue <- event
}
}
}()
}
2014-09-15 14:03:52 +04:00
// 添加一个用户事件队列.
func InitUserQueue(sid string) {
// FIXME: 会话过期后需要销毁对应的用户事件队列
q := UserEventQueues[sid]
if nil != q {
close(q)
}
q = make(chan int, MaxQueueLength)
UserEventQueues[sid] = q
go func() {
for event := range q {
glog.Infof("Session [%s] received a event [%d]", sid, event)
}
}()
}