本文整理汇总了Golang中github.com/sarifsystems/sarif/sarif.CreateMessage函数的典型用法代码示例。如果您正苦于以下问题:Golang CreateMessage函数的具体用法?Golang CreateMessage怎么用?Golang CreateMessage使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CreateMessage函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: ServiceSchedulerTest
func ServiceSchedulerTest(tr *TestRunner) {
Convey("should receive simple task", func() {
tr.When(sarif.CreateMessage("schedule/duration", map[string]interface{}{
"duration": "300ms",
}))
reply := tr.Expect()
So(reply, ShouldBeAction, "schedule/created")
})
Convey("should receive complex task", func() {
tr.When(sarif.CreateMessage("schedule/duration", map[string]interface{}{
"duration": "100ms",
"reply": sarif.Message{
Action: "push/text",
Destination: tr.Id,
Text: "reminder finished",
},
}))
reply := tr.Expect()
So(reply, ShouldBeAction, "schedule/created")
})
Convey("should emit both tasks", func() {
reply := tr.Expect()
So(reply, ShouldBeAction, "push/text")
So(reply.Text, ShouldEqual, "reminder finished")
reply = tr.Expect()
So(reply, ShouldBeAction, "schedule/finished")
So(reply.Text, ShouldStartWith, "Reminder from")
})
}
示例2: handlePut
func (s *Service) handlePut(msg sarif.Message) {
collection, key := parseAction("store/put/", msg.Action)
if collection == "" {
s.ReplyBadRequest(msg, errors.New("No collection specified."))
return
}
if len(msg.Payload.Raw) == 0 && msg.Text != "" {
v, _ := json.Marshal(msg.Text)
msg.Payload.Raw = json.RawMessage(v)
}
var p interface{}
if err := msg.DecodePayload(&p); err != nil {
s.ReplyBadRequest(msg, err)
return
}
// TODO: maybe a JSON payload consistency check
doc, err := s.Store.Put(&Document{
Collection: collection,
Key: key,
Value: msg.Payload.Raw,
})
if err != nil {
s.ReplyInternalError(msg, err)
return
}
doc.Value = nil
reply := sarif.CreateMessage("store/updated/"+doc.Collection+"/"+doc.Key, doc)
s.Reply(msg, reply)
pub := sarif.CreateMessage("store/updated/"+doc.Collection+"/"+doc.Key, doc)
s.Publish(pub)
}
示例3: handleQuery
func (s *Service) handleQuery(msg sarif.Message) {
query := msg.Text
// Query and wait for first answer
answers, errs := know.Ask(query)
ans, ok := <-answers
if !ok {
// No answer found? Check for errors.
err, ok := <-errs
if !ok {
// No errors found? Send negative answer
pl := MessageAnswer{
Query: query,
}
s.Reply(msg, sarif.CreateMessage("knowledge/noanswer", pl))
return
}
// Error received, forward.
s.ReplyInternalError(msg, err)
return
}
// Send answer.
pl := MessageAnswer{
ans.Question,
ans.Answer,
ans.Provider,
}
s.Reply(msg, sarif.CreateMessage("knowledge/answer", pl))
return
}
示例4: ServiceEventsTest
func ServiceEventsTest(tr *TestRunner) {
Convey("should store a new event", func() {
tr.When(sarif.CreateMessage("event/new", map[string]interface{}{
"action": "user/drink/coffee",
"text": "User drinks coffee.",
}))
reply := tr.Expect()
So(reply, ShouldBeAction, "event/created")
})
Convey("should store return last event", func() {
tr.When(sarif.CreateMessage("event/last", map[string]interface{}{
"action": "user/drink/coffee",
}))
reply := tr.Expect()
So(reply, ShouldBeAction, "event/found")
payload := Event{}
reply.DecodePayload(&payload)
So(payload.Text, ShouldEqual, "User drinks coffee.")
})
Convey("should record other messages", func() {
// Create test events
tr.When(sarif.CreateMessage("event/record", map[string]interface{}{
"action": "some/value/changed",
"time": time.Now().Add(-100 * time.Minute),
}))
So(tr.Expect(), ShouldBeAction, "event/recording")
tr.When(sarif.Message{
Action: "some/value/changed",
Text: "some value has changed",
})
tr.Wait()
tr.When(sarif.CreateMessage("event/last", map[string]interface{}{
"action": "some/value/changed",
}))
reply := tr.Expect()
So(reply, ShouldBeAction, "event/found")
payload := Event{}
reply.DecodePayload(&payload)
So(payload.Text, ShouldEqual, "some value has changed")
})
}
示例5: handleDel
func (s *Service) handleDel(msg sarif.Message) {
collection, key := parseAction("store/del/", msg.Action)
if collection == "" || key == "" {
s.ReplyBadRequest(msg, errors.New("No collection or key specified."))
return
}
if err := s.Store.Del(collection, key); err != nil {
s.ReplyInternalError(msg, err)
return
}
s.Reply(msg, sarif.CreateMessage("store/deleted/"+collection+"/"+key, nil))
s.Publish(sarif.CreateMessage("store/deleted/"+collection+"/"+key, nil))
}
示例6: handleScan
func (s *Service) handleScan(msg sarif.Message) {
collection, prefix := parseAction("store/scan/", msg.Action)
if collection == "" {
s.ReplyBadRequest(msg, errors.New("No collection specified."))
return
}
var p scanMessage
if err := msg.DecodePayload(&p); err != nil {
s.ReplyBadRequest(msg, err)
return
}
if p.Start == "" && p.End == "" {
if p.Prefix == "" {
p.Prefix = prefix
}
}
got, err := s.doScan(collection, p)
if err != nil {
s.ReplyInternalError(msg, err)
return
}
s.Reply(msg, sarif.CreateMessage("store/scanned/"+collection, got))
}
示例7: handleUnknownUserMessage
func (cv *Conversation) handleUnknownUserMessage(msg sarif.Message) {
pl := &MsgErrNatural{
Original: msg.Text,
}
cv.SendToClient(msg.Reply(sarif.CreateMessage("err/natural", pl)))
}
示例8: UseConn
func (t *TestRunner) UseConn(conn sarif.Conn) {
t.conn = conn
t.Publish(sarif.CreateMessage("proto/sub", map[string]string{
"device": t.Id,
}))
go t.listen()
}
示例9: handleEventList
func (s *Service) handleEventList(msg sarif.Message) {
var filter map[string]interface{}
if err := msg.DecodePayload(&filter); err != nil {
s.ReplyBadRequest(msg, err)
return
}
if filter == nil {
filter = make(map[string]interface{})
}
reverse := false
if len(filter) == 0 {
filter["time >="] = time.Now().Add(-24 * time.Hour)
reverse = true
}
s.Log("debug", "list by filter:", filter)
var events []Event
err := s.Store.Scan("events", store.Scan{
Only: "values",
Filter: filter,
Reverse: reverse,
}, &events)
if err != nil {
s.ReplyInternalError(msg, err)
}
s.Log("debug", "list - found", len(events))
s.Reply(msg, sarif.CreateMessage("events/listed", &aggPayload{
Type: "list",
Filter: filter,
Events: events,
Value: float64(len(events)),
}))
}
示例10: HandleQuery
func (s *Service) HandleQuery(msg sarif.Message) {
var f Fact
if err := msg.DecodePayload(&f); err != nil {
s.ReplyBadRequest(msg, err)
return
}
f, err := s.InterpretLiterals(f)
if err != nil {
s.ReplyInternalError(msg, err)
return
}
var facts []*Fact
if err := s.DB.Where(f).Limit(100).Find(&facts).Error; err != nil {
s.ReplyInternalError(msg, err)
return
}
if facts, err = s.AddLabelFacts(facts); err != nil {
s.ReplyInternalError(msg, err)
return
}
s.Reply(msg, sarif.CreateMessage("concepts/result", &resultPayload{
ToJsonLd(facts),
facts,
}))
}
示例11: HandleQueryExternal
func (s *Service) HandleQueryExternal(msg sarif.Message) {
var f Fact
if err := msg.DecodePayload(&f); err != nil {
s.ReplyBadRequest(msg, err)
return
}
facts := []*Fact{&f}
FillVariables(facts)
var r sparql.ResourceResponse
q := sparql.DBPedia.Query()
q = BuildQuery(q, facts)
if err := q.Exec(&r); err != nil {
s.ReplyInternalError(msg, err)
return
}
result := ApplyBindings(facts, r.Results.Bindings, sparql.CommonPrefixes)
s.Reply(msg, sarif.CreateMessage("concepts/result", &resultPayload{
ToJsonLd(result),
result,
}))
for _, f := range result {
if err := s.DB.FirstOrCreate(&f, &f).Error; err != nil {
s.Log("err", "[reasoner] error updating external fact: "+err.Error())
}
}
}
示例12: handleCounter
func (s *Service) handleCounter(msg sarif.Message) {
if msg.Text == "" {
s.ReplyBadRequest(msg, errors.New("Please specify a counter name!"))
return
}
name := msg.Text
cnt, err := s.counterGet(name)
if err != nil {
s.ReplyInternalError(msg, err)
return
}
newCnt := cnt
if msg.IsAction("cmd/decrement") {
newCnt--
} else if msg.IsAction("cmd/increment") {
newCnt++
}
if newCnt != cnt {
if err := s.counterSet(name, newCnt); err != nil {
s.ReplyInternalError(msg, err)
return
}
}
s.Reply(msg, sarif.CreateMessage("counter/changed/"+name, &counterMessage{name, newCnt}))
}
示例13: handleEventRecord
func (s *Service) handleEventRecord(msg sarif.Message) {
var p recordPayload
if err := msg.DecodePayload(&p); err != nil {
s.ReplyBadRequest(msg, err)
return
}
if p.Action == "" {
s.ReplyBadRequest(msg, errors.New("No action specified"))
return
}
var cfg Config
s.cfg.Get(&cfg)
if cfg.RecordedActions == nil {
cfg.RecordedActions = make(map[string]bool)
}
if enabled := cfg.RecordedActions[p.Action]; !enabled {
cfg.RecordedActions[p.Action] = true
s.cfg.Set(cfg)
s.Subscribe(p.Action, "", s.handleEventNew)
}
s.Log("debug", "recording action:", p.Action)
s.Reply(msg, sarif.CreateMessage("event/recording", p))
}
示例14: handleAuthOtp
func (s *Service) handleAuthOtp(msg sarif.Message) {
tok := "otp/std:" + GenerateDigits()
s.SessionTokens[tok] = time.Now().Add(time.Minute)
s.Reply(msg, sarif.CreateMessage("auth/generated", sarif.ClientInfo{
Auth: tok,
}))
}
示例15: handleLuaLoad
func (s *Service) handleLuaLoad(msg sarif.Message) {
gen := false
name := strings.TrimPrefix(strings.TrimPrefix(msg.Action, "lua/load"), "/")
if name == "" {
name, gen = sarif.GenerateId(), true
}
if _, ok := s.Machines[name]; ok {
s.destroyMachine(name)
}
m, err := s.createMachine(name)
if err != nil {
s.ReplyInternalError(msg, err)
return
}
var ctp ContentPayload
if err := msg.DecodePayload(&ctp); err != nil {
s.ReplyBadRequest(msg, err)
return
}
text := msg.Text
if ctp.Content.Url != "" {
ct, err := content.Get(ctp.Content)
if err != nil {
s.ReplyBadRequest(msg, err)
}
text = string(ct.Data)
}
var gp interface{}
msg.DecodePayload(&gp)
out, err, _ := m.Do(text, gp)
if err != nil {
s.ReplyBadRequest(msg, err)
s.destroyMachine(name)
return
}
if !gen {
f, err := os.Create(s.cfg.ScriptDir + "/" + name + ".lua")
if err == nil {
_, err = f.Write([]byte(text))
defer f.Close()
}
if err != nil {
s.ReplyInternalError(msg, err)
s.destroyMachine(name)
return
}
}
s.Reply(msg, sarif.CreateMessage("lua/loaded", &MsgMachineStatus{
name,
"up",
out,
}))
}