当前位置: 首页>>代码示例>>Golang>>正文


Golang RcvContext.BeeLocal方法代码示例

本文整理汇总了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
}
开发者ID:jyzhe,项目名称:beehive,代码行数:77,代码来源:routing.go


注:本文中的github.com/kandoo/beehive.RcvContext.BeeLocal方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。