77 lines
1.8 KiB
Go
77 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/vmihailenco/msgpack/v5"
|
|
)
|
|
|
|
type Incoming struct {
|
|
Type string `msgpack:"type"`
|
|
Event string `msgpack:"event,omitempty"`
|
|
Payload interface{} `msgpack:"payload,omitempty"`
|
|
}
|
|
|
|
type Outgoing struct {
|
|
Type string `msgpack:"type"`
|
|
Event string `msgpack:"event,omitempty"`
|
|
Payload interface{} `msgpack:"payload,omitempty"`
|
|
}
|
|
|
|
type UiMessage struct {
|
|
Message string `msgpack:"message"`
|
|
}
|
|
|
|
type HostInfo struct {
|
|
ClientID string `msgpack:"clientId"`
|
|
OS string `msgpack:"os"`
|
|
Arch string `msgpack:"arch"`
|
|
Version string `msgpack:"version"`
|
|
}
|
|
|
|
type InitPayload struct {
|
|
Host HostInfo `msgpack:"host"`
|
|
}
|
|
|
|
func main() {
|
|
dec := msgpack.NewDecoder(os.Stdin)
|
|
enc := msgpack.NewEncoder(os.Stdout)
|
|
|
|
for {
|
|
var msg Incoming
|
|
if err := dec.Decode(&msg); err != nil {
|
|
log.Printf("decode error: %v", err)
|
|
return
|
|
}
|
|
|
|
switch msg.Type {
|
|
case "init":
|
|
var init InitPayload
|
|
if payloadBytes, err := msgpack.Marshal(msg.Payload); err == nil {
|
|
_ = msgpack.Unmarshal(payloadBytes, &init)
|
|
}
|
|
|
|
osName := init.Host.OS
|
|
if osName == "" {
|
|
osName = "unknown"
|
|
}
|
|
|
|
if osName == "windows" {
|
|
log.Printf("[sample] windows detected - you can use WinAPI-specific flows")
|
|
_ = enc.Encode(Outgoing{Type: "event", Event: "ready", Payload: "sample plugin ready (windows detected)"})
|
|
} else {
|
|
log.Printf("[sample] non-windows host detected (%s)", osName)
|
|
_ = enc.Encode(Outgoing{Type: "event", Event: "ready", Payload: "sample plugin ready"})
|
|
}
|
|
case "event":
|
|
if msg.Event == "ui_message" {
|
|
payloadBytes, _ := msgpack.Marshal(msg.Payload)
|
|
var ui UiMessage
|
|
_ = msgpack.Unmarshal(payloadBytes, &ui)
|
|
_ = enc.Encode(Outgoing{Type: "event", Event: "echo", Payload: ui.Message})
|
|
}
|
|
}
|
|
}
|
|
}
|