本文整理汇总了Golang中gopkg/in/immesys/bw2bind/v5.SimpleMessage类的典型用法代码示例。如果您正苦于以下问题:Golang SimpleMessage类的具体用法?Golang SimpleMessage怎么用?Golang SimpleMessage使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SimpleMessage类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: GetRecords
func GetRecords(msg *bw.SimpleMessage) []*MetadataRecord {
parts := strings.Split(msg.URI, "/")
uri := strings.Join(parts[:len(parts)-2], "/") + "/*"
var records []*MetadataRecord
for _ = range msg.POs {
rec := &MetadataRecord{
Key: parts[len(parts)-1],
Namespace: parts[0],
URI: uri,
VK: msg.From,
Time: time.Now().UnixNano(),
Msg: msg,
}
meta, ok := msg.GetOnePODF(bw.PODFSMetadata).(bw.MetadataPayloadObject)
if ok {
val := meta.Value()
if val != nil {
rec.Value = []byte(val.Value)
} else {
rec.Value = meta.GetContents()
}
} else {
rec.Value = msg.POs[0].GetContents()
}
records = append(records, rec)
}
return records
}
示例2: listenQueries
func (bwh *BOSSWaveHandler) listenQueries(msg *bw.SimpleMessage) {
var (
// the publisher of the message. We incorporate this into the signal URI
fromVK string
// the computed signal based on the VK and query nonce
signalURI string
// query message
query KeyValueQuery
)
fromVK = msg.From
po := msg.GetOnePODF(GilesKeyValueQueryPIDString)
if po == nil { // no query found
return
}
if obj, ok := po.(bw.MsgPackPayloadObject); !ok {
log.Error("Received query was not msgpack")
} else if err := obj.ValueInto(&query); err != nil {
log.Error(errors.Wrap(err, "Could not unmarshal received query"))
return
}
signalURI = fmt.Sprintf("%s,queries", fromVK[:len(fromVK)-1])
log.Infof("Got query %+v", query)
res, err := bwh.a.HandleQuery(query.Query)
if err != nil {
msg := QueryError{
Query: query.Query,
Nonce: query.Nonce,
Error: err.Error(),
}
po, _ := bw.CreateMsgPackPayloadObject(GilesQueryErrorPID, msg)
log.Error(errors.Wrap(err, "Error evaluating query"))
if err := bwh.iface.PublishSignal(signalURI, po); err != nil {
log.Error(errors.Wrap(err, "Error sending response"))
}
}
var reply []bw.PayloadObject
switch t := res.(type) {
case common.SmapMessageList:
log.Debug("smap messages list")
pos := POsFromSmapMessageList(query.Nonce, t)
reply = append(reply, pos...)
case common.DistinctResult:
log.Debug("distinct list")
reply = append(reply, POFromDistinctResult(query.Nonce, t))
default:
log.Debug("type %T", res)
}
log.Debugf("Reply on %s: %d", bwh.iface.SignalURI(signalURI), len(reply))
if err := bwh.iface.PublishSignal(signalURI, reply...); err != nil {
log.Error(errors.Wrap(err, "Error sending response"))
}
}
示例3: send
func (f *forwarder) send(msg *bw.SimpleMessage) {
f.RLock()
for view := range f.forwardList {
select {
case view.C <- msg:
default:
log.Warningf("Dropping msg")
msg.Dump()
}
}
f.RUnlock()
}
示例4: GetDistinctList
func GetDistinctList(nonce uint32, msg *bw.SimpleMessage) (bool, messages.QueryListResult, error) {
var (
po bw.PayloadObject
listResult messages.QueryListResult
)
if po = msg.GetOnePODF(messages.GilesQueryListResultPIDString); po != nil {
if err := po.(bw.MsgPackPayloadObject).ValueInto(&listResult); err != nil {
return false, listResult, err
}
if listResult.Nonce != nonce {
return false, listResult, nil
}
return true, listResult, nil
}
return false, listResult, nil
}
示例5: GetTimeseries
// Extracts Timeseries from Giles response. Returns false if no related message was found
func GetTimeseries(nonce uint32, msg *bw.SimpleMessage) (bool, messages.QueryTimeseriesResult, error) {
var (
po bw.PayloadObject
timeseriesResults messages.QueryTimeseriesResult
)
if po = msg.GetOnePODF(messages.GilesQueryTimeseriesResultPIDString); po != nil {
if err := po.(bw.MsgPackPayloadObject).ValueInto(×eriesResults); err != nil {
return false, timeseriesResults, err
}
if timeseriesResults.Nonce != nonce {
return false, timeseriesResults, nil
}
return true, timeseriesResults, nil
}
return false, timeseriesResults, nil
}
示例6: GetError
// Extracts QueryError from Giles response. Returns false if no related message was found
func GetError(nonce uint32, msg *bw.SimpleMessage) (bool, error) {
var (
po bw.PayloadObject
queryError messages.QueryError
)
if po = msg.GetOnePODF(messages.GilesQueryErrorPIDString); po != nil {
if err := po.(bw.MsgPackPayloadObject).ValueInto(&queryError); err != nil {
return false, err
}
if queryError.Nonce != nonce {
return false, nil
}
return true, nil
}
return false, nil
}
示例7: listenCQBS
func (bwh *BOSSWaveHandler) listenCQBS(msg *bw.SimpleMessage) {
var (
// the publisher of the message. We incorporate this into the signal URI
fromVK string
// query message
query KeyValueQuery
)
fromVK = msg.From
po := msg.GetOnePODF(GilesKeyValueQueryPIDString)
if po == nil { // no query found
return
}
if obj, ok := po.(bw.MsgPackPayloadObject); !ok {
log.Error("Received query was not msgpack")
} else if err := obj.ValueInto(&query); err != nil {
log.Error(errors.Wrap(err, "Could not unmarshal received query"))
}
subscription := bwh.StartSubscriber(fromVK, query)
go bwh.a.HandleNewSubscriber(subscription, query.Query)
}