go-ssb-room/muxrpc/handlers/tunnel/server/plugin.go

64 lines
1.5 KiB
Go
Raw Normal View History

2021-02-09 11:53:33 +00:00
// SPDX-License-Identifier: MIT
package server
2021-01-25 17:31:09 +00:00
import (
"net"
kitlog "github.com/go-kit/kit/log"
"go.cryptoscope.co/muxrpc/v2"
"go.cryptoscope.co/muxrpc/v2/typemux"
"github.com/ssb-ngi-pointer/go-ssb-room/internal/maybemuxrpc"
"github.com/ssb-ngi-pointer/go-ssb-room/roomstate"
refs "go.mindeco.de/ssb-refs"
2021-01-25 17:31:09 +00:00
)
const name = "tunnel"
var method muxrpc.Method = muxrpc.Method{name}
type plugin struct {
h muxrpc.Handler
log kitlog.Logger
}
func (plugin) Name() string { return name }
func (plugin) Method() muxrpc.Method { return method }
func (p plugin) Handler() muxrpc.Handler { return p.h }
func (plugin) Authorize(net.Conn) bool { return true }
/* manifest:
{
"announce": "sync",
"leave": "sync",
"connect": "duplex",
"endpoints": "source",
"isRoom": "async",
"ping": "sync",
}
*/
func New(log kitlog.Logger, self refs.FeedRef, m *roomstate.Manager) maybemuxrpc.Plugin {
2021-01-25 17:31:09 +00:00
mux := typemux.New(log)
var h = new(handler)
h.self = self
h.logger = log
h.state = m
2021-01-25 17:31:09 +00:00
mux.RegisterAsync(append(method, "isRoom"), typemux.AsyncFunc(h.isRoom))
mux.RegisterAsync(append(method, "ping"), typemux.AsyncFunc(h.ping))
2021-01-25 17:31:09 +00:00
mux.RegisterAsync(append(method, "announce"), typemux.AsyncFunc(h.announce))
mux.RegisterAsync(append(method, "leave"), typemux.AsyncFunc(h.leave))
2021-01-25 17:31:09 +00:00
mux.RegisterSource(append(method, "endpoints"), typemux.SourceFunc(h.endpoints))
2021-01-25 17:31:09 +00:00
mux.RegisterDuplex(append(method, "connect"), typemux.DuplexFunc(h.connect))
2021-01-25 17:31:09 +00:00
return plugin{
h: &mux,
}
}