本文整理汇总了Golang中github.com/kandoo/beehive.RcvContext.Hive方法的典型用法代码示例。如果您正苦于以下问题:Golang RcvContext.Hive方法的具体用法?Golang RcvContext.Hive怎么用?Golang RcvContext.Hive使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/kandoo/beehive.RcvContext
的用法示例。
在下文中一共展示了RcvContext.Hive方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Rcv
func (c *Collector) Rcv(m beehive.Msg, ctx beehive.RcvContext) error {
res := m.Data().(StatResult)
glog.V(2).Infof("Stat results: %+v", res)
matrix := ctx.Dict(matrixDict)
key := res.Switch.Key()
v, err := matrix.Get(key)
if err != nil {
return fmt.Errorf("No such switch in matrix: %+v", res)
}
c.poller.query <- StatQuery{res.Switch}
sw := v.(SwitchStats)
stat, ok := sw[res.Flow]
sw[res.Flow] = res.Bytes
glog.V(2).Infof("Previous stats: %+v, Now: %+v", stat, res.Bytes)
if !ok || res.Bytes-stat > c.delta {
glog.Infof("Found an elephent flow: %+v, %+v, %+v", res, stat,
ctx.Hive().ID())
ctx.Emit(MatrixUpdate(res))
}
matrix.Put(key, sw)
return nil
}
示例2: Start
func (c *ofConn) Start(ctx bh.RcvContext) {
defer func() {
if c.driver != nil {
c.driver.handleConnClose(c)
}
c.Close()
// TODO(soheil): is there any better way to prevent deadlocks?
glog.Infof("%v drains write queue for %v", ctx, c.RemoteAddr())
go c.drainWCh()
}()
c.ctx = ctx
c.wCh = make(chan bh.Msg, ctx.Hive().Config().DataChBufSize)
var err error
if c.driver, err = c.handshake(); err != nil {
glog.Errorf("Error in OpenFlow handshake: %v", err)
return
}
stop := make(chan struct{})
wdone := make(chan struct{})
go c.doWrite(wdone, stop)
rdone := make(chan struct{})
go c.doRead(rdone, stop)
select {
case <-rdone:
close(stop)
case <-wdone:
close(stop)
}
<-rdone
<-wdone
}