vega/botlib/message.go

63 lines
1.3 KiB
Go

package botlib
import (
"errors"
"os/exec"
)
type MessageType int
const (
MessageRequest = 1
MessageResponse = 2
)
type InputPair struct {
Param string `json:"param"`
Argument string `json:"argument"`
}
type Message struct {
Type MessageType `json:"type"`
Inputs []InputPair `json:"inputs"`
Sender string `json:"sender"`
Receiver string `json:"receiver"`
Body string `json:"body"`
}
func Knock(name string) error {
path, exists := Registry[name]
if !exists {
return errors.New("Unknown knock target")
}
/*knock_msg := Message{
Type: MessageRequest,
Sender: "One-Who-Knocks",
Receiver: name,
}*/
if path.Hostname() == "localhost" || path.Hostname() == "127.0.0.1" {
//Local delivery
if path.EscapedPath() == "" {
if path.Port() == "" {
//no path means it's not a binary but no port means it's not listening
//invalid, can't knock
return errors.New("Can't knock, invalid URL")
} else {
//no path but port, local network connection
return errors.New("Unsupposed: Local network") //TODO
}
} else {
//path on localhost means local bin file
binpath := path.EscapedPath()
cmd := exec.Command(binpath)
err := cmd.Run()
if err != nil {
return err
}
}
} else {
return errors.New("Network messaging not supported yet")
}
return nil
}