1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package ami
- import (
- "bytes"
- "fmt"
- )
- type ActionData map[string]string
- func (s ActionData) raw() (res []byte) {
- for key, val := range s {
- res = append(res, []byte(fmt.Sprintf("%v: %v\r\n", key, val))...)
- }
- res = append(res, []byte("\r\n")...)
- return
- }
- func (s ActionData) isEvent() bool {
- _, check := s["Event"]
- return check
- }
- func (s ActionData) ActionID() string {
- return s["ActionID"]
- }
- func actionDataFromRaw(src []byte) (res ActionData) {
- res, lines := make(ActionData), bytes.Split(src, []byte("\r\n"))
- /// todo...
- for _, line := range lines {
- parts := bytes.SplitN(line, []byte(":"), 2)
- if len(parts) == 2 {
- res[string(bytes.TrimSpace(parts[0]))] = string(bytes.TrimSpace(parts[1]))
- }
- }
- return
- }
- func actionsFromRaw(src []byte, accept func(ActionData)) (res []byte) {
- if bytes.Index(src, []byte("\r\n\r\n")) < 0 {
- return src
- }
- actionsRaw := bytes.Split(src, []byte("\r\n\r\n"))
- for i := 0; i < len(actionsRaw)-1; i++ {
- action := actionDataFromRaw(actionsRaw[i])
- accept(action)
- }
- res = actionsRaw[len(actionsRaw)-1]
- return
- }
|