wide/event/events.go

56 lines
1.2 KiB
Go

// 事件处理.
package event
import "github.com/golang/glog"
const (
EvtGOPATHNotFound = iota // 事件:找不到环境变量 $GOPATH
EvtGOROOTNotFound // 事件:找不到环境变量 $GOROOT
EvtGocodeNotFount // 事件:找不到 gocode
EvtIDEStubNotFound // 事件:找不到 IDE stub
)
const MaxQueueLength = 10
// 全局事件队列.
// 入队的事件将分发到每个用户的通知队列.
var EventQueue = make(chan int, MaxQueueLength)
// 用户事件队列.
// 入队的事件将翻译为通知,并通过通知通道推送到前端.
var UserEventQueues = map[string]chan int{}
// 加载事件处理.
func Load() {
go func() {
for event := range EventQueue {
glog.V(5).Info("收到全局事件 [%d]", event)
// 将事件分发到每个用户的事件队列里
for _, userQueue := range UserEventQueues {
userQueue <- event
}
}
}()
}
// 添加一个用户事件队列.
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)
}
}()
}