本文整理汇总了Golang中github.com/kandoo/beehive.RcvContext.BeeLocal方法的典型用法代码示例。如果您正苦于以下问题:Golang RcvContext.BeeLocal方法的具体用法?Golang RcvContext.BeeLocal怎么用?Golang RcvContext.BeeLocal使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/kandoo/beehive.RcvContext
的用法示例。
在下文中一共展示了RcvContext.BeeLocal方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Rcv
// Rcv handles both Discovery and Advertisement messages.
func (r Router) Rcv(msg bh.Msg, ctx bh.RcvContext) error {
switch d := msg.Data().(type) {
case Discovery:
if err := r.appendNieghbor(Edge(d), ctx); err != nil {
return err
}
if Edge(d).To.Endhost {
adv, err := Path{}.Append(Edge(d).From, Edge(d).To)
if err != nil {
return err
}
ctx.Emit(Advertisement(adv))
}
// Indication of an update.
ctx.SetBeeLocal(true)
case Advertisement:
path := Path(d)
if to, err := path.To(); err != nil || !to.Endhost {
return errors.New("Route is not towards an end-host")
}
if _, err := r.appendToRoutingTable(path, ctx); err != nil {
return err
}
case Timeout:
if !ctx.BeeLocal().(bool) {
return nil
}
ctx.SetBeeLocal(false)
type keyTable struct {
k string
t RoutingTable
}
var entries []keyTable
ctx.Dict(routeDict).ForEach(func(k string, v interface{}) bool {
tbl := v.(RoutingTable)
from := Node{
ID: string(k),
}
for to, route := range tbl {
if len(route.Updates) == 0 {
continue
}
shortestPaths := route.ShortestPaths()
glog.V(1).Infof("Shortest paths: %v", shortestPaths)
for _, p := range route.Updates {
if !route.IsShortestPath(p) {
continue
}
for _, n := range r.neighbors(from, ctx) {
if np, err := p.Prepend(n.From); err == nil {
ctx.Emit(Advertisement(np))
}
}
}
route.Updates = nil
tbl[to] = route
}
entries = append(entries, keyTable{k, tbl})
return true
})
for _, e := range entries {
ctx.Dict(routeDict).Put(e.k, e.t)
}
}
return nil
}