Files
overlord/plugin-sample-go/wasm/main.go
T
2026-03-05 00:04:26 -06:00

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})
}
}
}
}