PLT-7407: Back-end plugin mechanism (#7177)
* begin backend plugin wip * flesh out rpcplugin. everything done except for minor supervisor stubs * done with basic plugin infrastructure * simplify tests * remove unused test lines
Этот коммит содержится в:
46
plugin/rpcplugin/main.go
Обычный файл
46
plugin/rpcplugin/main.go
Обычный файл
@@ -0,0 +1,46 @@
|
||||
package rpcplugin
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/mattermost/platform/plugin"
|
||||
)
|
||||
|
||||
// Makes a set of hooks available via RPC. This function never returns.
|
||||
func Main(hooks plugin.Hooks) {
|
||||
ipc, err := InheritedProcessIPC()
|
||||
if err != nil {
|
||||
log.Fatal(err.Error())
|
||||
}
|
||||
muxer := NewMuxer(ipc, true)
|
||||
id, conn := muxer.Serve()
|
||||
buf := make([]byte, 11)
|
||||
buf[0] = 0
|
||||
n := binary.PutVarint(buf[1:], id)
|
||||
if _, err := muxer.Write(buf[:1+n]); err != nil {
|
||||
log.Fatal(err.Error())
|
||||
}
|
||||
ServeHooks(hooks, conn, muxer)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// Returns the hooks being served by a call to Main.
|
||||
func ConnectMain(muxer *Muxer) (*RemoteHooks, error) {
|
||||
buf := make([]byte, 1)
|
||||
if _, err := muxer.Read(buf); err != nil {
|
||||
return nil, err
|
||||
} else if buf[0] != 0 {
|
||||
return nil, fmt.Errorf("unexpected control byte")
|
||||
}
|
||||
reader := bufio.NewReader(muxer)
|
||||
id, err := binary.ReadVarint(reader)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ConnectHooks(muxer.Connect(id), muxer), nil
|
||||
}
|
||||
Ссылка в новой задаче
Block a user