本文整理匯總了Golang中github.com/elos/data.DB.Changes方法的典型用法代碼示例。如果您正苦於以下問題:Golang DB.Changes方法的具體用法?Golang DB.Changes怎麽用?Golang DB.Changes使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/elos/data.DB
的用法示例。
在下文中一共展示了DB.Changes方法的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: WebSensorsAgent
func WebSensorsAgent(ctx context.Context, db data.DB, u *models.User) {
// Get the db's changes, then filter by updates, then
// filter by whether this user can read the record
changes := data.Filter(data.FilterKind(db.Changes(), models.EventKind), func(c *data.Change) bool {
ok, _ := access.CanRead(db, u, c.Record)
return ok
})
Run:
for {
select {
case c, ok := <-*changes:
if !ok {
break Run
}
switch c.Record.(*models.Event).Name {
case WEB_SENSOR_LOCATION:
webSensorLocation(db, u, c.Record.(*models.Event).Data)
}
case <-ctx.Done():
break Run
}
}
}
示例2: TaskAgent
func TaskAgent(ctx context.Context, db data.DB, u *models.User) {
changes := data.Filter(data.FilterKind(db.Changes(), models.EventKind), func(c *data.Change) bool {
ok, _ := access.CanRead(db, u, c.Record)
return ok
})
Run:
for {
select {
case c, ok := <-*changes:
if !ok {
break Run
}
switch c.Record.(*models.Event).Name {
case TaskMakeGoal:
taskMakeGoal(db, u, c.Record.(*models.Event).Data)
case TaskDropGoal:
taskDropGoal(db, u, c.Record.(*models.Event).Data)
}
case <-ctx.Done():
break Run
}
}
}
示例3: LocationAgent
func LocationAgent(ctx context.Context, db data.DB, u *models.User) {
locTag, err := tag.ForName(db, u, tag.Location)
if err != nil {
log.Fatal(err)
}
updTag, err := tag.ForName(db, u, tag.Update)
if err != nil {
log.Fatal(err)
}
// Get the db's changes, then filter by updates, then
// filter by whether this user can read the record
changes := data.Filter(data.FilterKind(db.Changes(), models.EventKind), func(c *data.Change) bool {
ok, _ := access.CanRead(db, u, c.Record)
if !ok {
return false
}
return event.ContainsTags(c.Record.(*models.Event), locTag, updTag)
})
Run:
for {
select {
case c, ok := <-*changes:
if !ok {
break Run
}
locationUpdate(db, u, c.Record.(*models.Event))
case <-ctx.Done():
break Run
}
}
}
示例4: RecordChangesGET
func RecordChangesGET(ctx context.Context, ws *websocket.Conn, db data.DB, logger services.Logger) {
l := logger.WithPrefix("RecordChangesGet: ")
u, ok := user.FromContext(ctx)
if !ok {
l.Print("failed to retrieve user from context")
return
}
// Get the db's changes, then filter by updates, then
// filter by whether this user can read the record
changes := data.Filter(db.Changes(), func(c *data.Change) bool {
ok, err := access.CanRead(db, u, c.Record)
if err != nil {
l.Printf("error checking access control: %s", err)
}
return ok
})
var kind data.Kind
if kindParam := ws.Request().Form.Get(kindParam); kindParam != "" {
kind = data.Kind(kindParam)
if _, ok := models.Kinds[kind]; !ok {
l.Printf("unrecognized kind: %q", kind)
if err := websocket.Message.Send(ws, fmt.Sprintf("The kind %q is not recognized", kind)); err != nil {
if err != io.EOF {
l.Printf("error sending on websocket: %s", err)
}
}
return
}
// If a kind was specified, filter by it
changes = data.FilterKind(changes, kind)
}
for {
select {
case change, ok := <-*changes:
if !ok {
l.Printf("change channel was closed")
return
}
l.Printf("recieved change: %+v", change)
changeTransport := transfer.Change(change)
if err := websocket.JSON.Send(ws, changeTransport); err != nil {
if err != io.EOF {
l.Printf("error sending to socket: %s", err)
}
return
}
case <-time.After(5 * time.Second):
l.Printf("no change in 5 seconds, but still listening")
case <-ctx.Done():
l.Printf("context cancelled")
// context was cancelled
return
}
}
}