inital commit
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
module plugin-sample-go/wasm
|
||||
|
||||
go 1.21
|
||||
|
||||
require github.com/vmihailenco/msgpack/v5 v5.4.1
|
||||
@@ -0,0 +1,76 @@
|
||||
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})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user