本文整理汇总了Golang中github.com/sarifsystems/sarif/sarif.Message.EncodePayload方法的典型用法代码示例。如果您正苦于以下问题:Golang Message.EncodePayload方法的具体用法?Golang Message.EncodePayload怎么用?Golang Message.EncodePayload使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/sarifsystems/sarif/sarif.Message
的用法示例。
在下文中一共展示了Message.EncodePayload方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: handleEventLast
func (s *Service) handleEventLast(msg sarif.Message) {
filter := make(map[string]interface{})
if err := msg.DecodePayload(&filter); err != nil {
s.ReplyBadRequest(msg, err)
return
}
s.Log("debug", "get last by filter:", filter)
var events []Event
err := s.Store.Scan("events", store.Scan{
Reverse: true,
Only: "values",
Filter: filter,
Limit: 1,
}, &events)
if err != nil {
s.ReplyInternalError(msg, err)
}
if len(events) == 0 {
s.Reply(msg, MessageEventNotFound)
return
}
s.Log("debug", "last - found", events)
reply := sarif.Message{Action: "event/found"}
if err := reply.EncodePayload(events[0]); err != nil {
s.ReplyInternalError(msg, err)
return
}
reply.Text = events[0].String()
s.Reply(msg, reply)
}
示例2: Parse
func (r *SentenceRule) Parse(s string) (sarif.Message, bool) {
msg := sarif.Message{}
match := r.Regexp.FindStringSubmatch(s)
if match == nil {
return msg, false
}
msg.Action = r.Action
p := make(map[string]string)
for i, field := range r.Regexp.SubexpNames() {
if field == "" {
continue
}
v := TrimQuotes(match[i])
if field == "text" {
msg.Text = strings.TrimSpace(msg.Text + " " + v)
continue
}
if field == "_action" {
msg.Action = strings.TrimSpace(msg.Action + "/" + v)
continue
}
p[field] = v
}
if len(p) > 0 {
msg.EncodePayload(p)
}
return msg, true
}
示例3: Up
func (app *App) Up() {
if flag.NArg() <= 1 {
app.Log.Fatal("Please specify an action to send to.")
}
action := flag.Arg(1)
in, err := ioutil.ReadAll(os.Stdin)
if err != nil {
app.Log.Fatal(err)
}
msg := sarif.Message{
Action: action,
}
pl := ContentPayload{
Content: content.PutData(in),
}
if strings.HasPrefix(pl.Content.Type, "text/") {
msg.Text = string(in)
}
if err := msg.EncodePayload(pl); err != nil {
app.Log.Fatal(err)
}
msg, ok := <-app.Client.Request(msg)
if !ok {
app.Log.Fatal("No reply received.")
}
fmt.Println(strings.TrimSpace(msg.Text))
}
示例4: answer
func (cv *Conversation) answer(a *schema.Action, text string) (sarif.Message, bool) {
reply := sarif.Message{
Action: a.Reply,
Text: text,
}
if text == ".cancel" || text == "cancel" || strings.HasPrefix(text, "cancel ") {
return reply, false
}
t := a.SchemaType
if t == "ConfirmAction" || t == "DeleteAction" || t == "CancelAction" {
ctx := &natural.Context{Text: text, ExpectedReply: "affirmative"}
r, err := cv.service.Parse(ctx)
if err != nil || len(r.Intents) == 0 {
return reply, false
}
if r.Intents[0].Type == "neg" {
reply.Action = a.ReplyNegative
return reply, reply.Action != ""
}
}
if a.Payload != nil {
reply.EncodePayload(a.Payload)
}
return reply, true
}
示例5: Apply
func (r *MessageSchema) Apply(vars []*Var) sarif.Message {
msg := sarif.Message{}
msg.Action = r.Action
pl := make(map[string]string)
sort.Sort(sort.Reverse(byWeight(vars)))
for _, v := range vars {
switch v.Name {
case "_action":
msg.Action = v.Value
case "text":
msg.Text = v.Value
case "to":
fallthrough
case "that":
if msg.Text == "" {
msg.Text = v.Value
}
default:
if _, ok := r.Fields[v.Name]; ok {
pl[v.Name] = v.Value
}
}
}
if len(vars) > 0 {
msg.EncodePayload(&pl)
}
return msg
}
示例6: tableToMessage
func tableToMessage(L *lua.LState, t *lua.LTable) sarif.Message {
msg := sarif.Message{}
msg.Version = tableGetString(t, "sarif")
msg.Id = tableGetString(t, "id")
msg.Action = tableGetString(t, "action")
msg.Source = tableGetString(t, "src")
msg.Destination = tableGetString(t, "dest")
msg.CorrId = tableGetString(t, "corr")
msg.Text = tableGetString(t, "text")
p := luareflect.DecodeToBasic(t.RawGetH(lua.LString("p")))
msg.EncodePayload(p)
return msg
}
示例7: handleEventNew
func (s *Service) handleEventNew(msg sarif.Message) {
isTargeted := msg.IsAction("event/new")
var e Event
e.Text = msg.Text
e.Time = time.Now()
e.Value = 1
if s, v, ok := parseDataFromAction(msg.Action, "event/new"); ok {
e.Action, e.Value = s, v
}
if err := msg.DecodePayload(&e); err != nil && isTargeted {
s.ReplyBadRequest(msg, err)
return
}
if err := msg.DecodePayload(&e.Meta); err != nil {
s.ReplyBadRequest(msg, err)
return
}
if e.Time.IsZero() {
e.Time = time.Now()
}
if _, err := s.Store.Put(e.Key(), &e); err != nil {
s.Log("err/internal", "could not store finished task: "+err.Error())
return
}
if isTargeted {
reply := sarif.Message{Action: "event/created"}
if err := reply.EncodePayload(e); err != nil {
s.ReplyInternalError(msg, err)
return
}
reply.Text = "New event: " + e.String()
s.Reply(msg, reply)
}
}
示例8: handleGeofenceCreate
func (s *Service) handleGeofenceCreate(msg sarif.Message) {
var g Geofence
if err := msg.DecodePayload(&g); err != nil {
s.ReplyBadRequest(msg, err)
return
}
if g.Address != "" {
geo, err := Geocode(g.Address)
if err != nil {
s.ReplyBadRequest(msg, err)
return
}
if len(geo) == 0 {
s.Publish(msg.Reply(MsgAddressNotFound))
return
}
g.BoundingBox = BoundingBox(geo[0].BoundingBox)
}
if g.Name == "" {
g.Name = sarif.GenerateId()
}
g.GeohashMin = EncodeGeohash(g.BoundingBox.LatMin, g.BoundingBox.LngMin, 12)
g.GeohashMax = EncodeGeohash(g.BoundingBox.LatMax, g.BoundingBox.LngMax, 12)
if _, err := s.Store.Put(g.Key(), &g); err != nil {
s.ReplyInternalError(msg, err)
}
reply := sarif.Message{Action: "location/fence/created"}
if err := reply.EncodePayload(g); err != nil {
s.ReplyInternalError(msg, err)
return
}
reply.Text = "Geofence '" + g.Name + "' created."
s.Publish(reply)
}
示例9: InventMessageForMeaning
func (p *Parser) InventMessageForMeaning(action string, m *Meaning) (sarif.Message, error) {
msg := sarif.Message{}
if action != "" {
msg.Action += "/" + action
}
if m.Subject != "" {
msg.Action += "/" + m.Subject
}
if m.Predicate != "" {
msg.Action += "/" + m.Predicate
}
if m.Object != "" {
msg.Action += "/" + m.Object
}
msg.Action = strings.Trim(msg.Action, "/")
pl := make(map[string]string)
for _, v := range m.Vars {
pl[v.Name] = v.Value
}
msg.EncodePayload(pl)
return msg, nil
}
示例10: handleRestPublish
func (s *Server) handleRestPublish(w http.ResponseWriter, req *http.Request) {
defer req.Body.Close()
s.Client.Log("debug", "new REST request: "+req.URL.Path)
// Parse form values.
if err := req.ParseForm(); err != nil {
s.Client.Log("warn", "REST bad request: "+err.Error())
w.WriteHeader(400)
fmt.Fprintln(w, "Bad request:", err)
return
}
// Check authentication.
name := s.checkAuthentication(req)
if name == "" {
w.WriteHeader(401)
fmt.Fprintln(w, "Not authorized")
s.Client.Log("info", "authentication failed for "+req.RemoteAddr)
return
}
s.Client.Log("info", "authenticated "+req.RemoteAddr+" for "+name)
client := s.getApiClientByName(name)
// Create message from form values.
msg := sarif.Message{
Id: sarif.GenerateId(),
Source: name,
}
if strings.HasPrefix(req.URL.Path, REST_URL) {
msg.Action = strings.TrimPrefix(req.URL.Path, REST_URL)
}
pl := make(map[string]interface{})
for k, v := range req.Form {
if k == "authtoken" {
continue
}
if k == "_device" {
msg.Destination = v[0]
} else if k == "text" {
msg.Text = strings.Join(v, "\n")
} else if len(v) == 1 {
pl[k] = parseValue(v[0])
} else if k == "_device" {
pl[k] = v
}
}
_ = msg.EncodePayload(pl)
if !s.clientIsAllowed(name, msg) {
w.WriteHeader(401)
fmt.Fprintf(w, "'%s' is not authorized to publish '%s'", name, msg.Action)
s.Client.Log("warn", "REST '"+name+"' is not authorized to publish on "+msg.Action)
return
}
// Publish message.
if err := client.Publish(msg); err != nil {
s.Client.Log("warn", "REST bad request: "+err.Error())
w.WriteHeader(400)
fmt.Fprintln(w, "Bad Request:", err)
return
}
w.Write([]byte(msg.Id))
}
示例11: ParseSimple
func ParseSimple(text string) (sarif.Message, bool) {
msg := sarif.Message{}
// Raw JSON message
if strings.HasPrefix(text, "{") {
if err := json.Unmarshal([]byte(text), &msg); err == nil {
return msg, true
}
}
if strings.HasPrefix(text, "sarif://") {
if msg, err := sarif.ConvertURL(text); err == nil {
return msg, true
}
}
if strings.HasPrefix(text, ".") || strings.HasPrefix(text, "/") {
text = strings.TrimLeft(text, "./ ")
parts, _ := SplitQuoted(text, " ")
if parts[0] == "" {
return msg, false
}
msg.Action = parts[0]
msg.Text = ""
payload := make(map[string]interface{}, 0)
for _, part := range parts[1:] {
keyval, _ := SplitQuoted(part, "=")
if len(keyval) == 1 {
if msg.Text != "" {
msg.Text += " "
}
msg.Text += TrimQuotes(keyval[0])
continue
}
k := TrimQuotes(keyval[0])
vtext := strings.Join(keyval[1:], "=")
quoted := strings.ContainsAny(vtext, "\"`")
vtext = TrimQuotes(vtext)
var v interface{} = vtext
if !quoted {
v = ParseValue(vtext)
}
switch k {
case "text":
msg.Text = vtext
case "device":
fallthrough
case "destination":
msg.Destination = vtext
default:
payload[k] = v
}
}
if len(payload) > 0 {
msg.EncodePayload(payload)
}
return msg, true
}
return msg, false
}