summaryrefslogtreecommitdiffstats
path: root/plugin/rpcplugin/api.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/rpcplugin/api.go')
-rw-r--r--plugin/rpcplugin/api.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/plugin/rpcplugin/api.go b/plugin/rpcplugin/api.go
new file mode 100644
index 000000000..a807d0837
--- /dev/null
+++ b/plugin/rpcplugin/api.go
@@ -0,0 +1,62 @@
+package rpcplugin
+
+import (
+ "encoding/json"
+ "io"
+ "net/rpc"
+
+ "github.com/mattermost/platform/plugin"
+)
+
+type LocalAPI struct {
+ api plugin.API
+ muxer *Muxer
+}
+
+func (h *LocalAPI) LoadPluginConfiguration(args struct{}, reply *[]byte) error {
+ var config interface{}
+ if err := h.api.LoadPluginConfiguration(&config); err != nil {
+ return err
+ }
+ b, err := json.Marshal(config)
+ if err != nil {
+ return err
+ }
+ *reply = b
+ return nil
+}
+
+type RemoteAPI struct {
+ client *rpc.Client
+ muxer *Muxer
+}
+
+func ServeAPI(api plugin.API, conn io.ReadWriteCloser, muxer *Muxer) {
+ server := rpc.NewServer()
+ server.Register(&LocalAPI{
+ api: api,
+ muxer: muxer,
+ })
+ server.ServeConn(conn)
+}
+
+var _ plugin.API = (*RemoteAPI)(nil)
+
+func (h *RemoteAPI) LoadPluginConfiguration(dest interface{}) error {
+ var config []byte
+ if err := h.client.Call("LocalAPI.LoadPluginConfiguration", struct{}{}, &config); err != nil {
+ return err
+ }
+ return json.Unmarshal(config, dest)
+}
+
+func (h *RemoteAPI) Close() error {
+ return h.client.Close()
+}
+
+func ConnectAPI(conn io.ReadWriteCloser, muxer *Muxer) *RemoteAPI {
+ return &RemoteAPI{
+ client: rpc.NewClient(conn),
+ muxer: muxer,
+ }
+}