2021-02-01 15:45:30 +00:00
|
|
|
package server
|
2021-01-25 17:31:09 +00:00
|
|
|
|
|
|
|
import (
|
2021-01-26 17:33:29 +00:00
|
|
|
"context"
|
2021-01-25 17:31:09 +00:00
|
|
|
"net"
|
|
|
|
|
|
|
|
kitlog "github.com/go-kit/kit/log"
|
|
|
|
"go.cryptoscope.co/muxrpc/v2"
|
|
|
|
"go.cryptoscope.co/muxrpc/v2/typemux"
|
|
|
|
|
2021-01-28 09:51:18 +00:00
|
|
|
refs "go.mindeco.de/ssb-refs"
|
2021-02-04 15:54:30 +00:00
|
|
|
"github.com/ssb-ngi-pointer/gossb-rooms/internal/broadcasts"
|
|
|
|
"github.com/ssb-ngi-pointer/gossb-rooms/internal/maybemuxrpc"
|
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",
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
|
2021-01-28 09:51:18 +00:00
|
|
|
func New(log kitlog.Logger, ctx context.Context, self refs.FeedRef) maybemuxrpc.Plugin {
|
2021-01-25 17:31:09 +00:00
|
|
|
mux := typemux.New(log)
|
|
|
|
|
2021-01-26 17:33:29 +00:00
|
|
|
var rs = new(roomState)
|
2021-01-28 09:51:18 +00:00
|
|
|
rs.self = self
|
2021-01-25 17:31:09 +00:00
|
|
|
rs.logger = log
|
2021-01-26 17:33:29 +00:00
|
|
|
rs.updater, rs.broadcaster = broadcasts.NewRoomChanger()
|
|
|
|
rs.rooms = make(roomsStateMap)
|
|
|
|
|
|
|
|
go rs.stateTicker(ctx)
|
|
|
|
|
|
|
|
// so far just lobby (v1 rooms)
|
|
|
|
rs.rooms["lobby"] = make(roomStateMap)
|
2021-01-25 17:31:09 +00:00
|
|
|
|
|
|
|
mux.RegisterAsync(append(method, "isRoom"), typemux.AsyncFunc(rs.isRoom))
|
|
|
|
mux.RegisterAsync(append(method, "ping"), typemux.AsyncFunc(rs.ping))
|
|
|
|
|
|
|
|
mux.RegisterAsync(append(method, "announce"), typemux.AsyncFunc(rs.announce))
|
|
|
|
mux.RegisterAsync(append(method, "leave"), typemux.AsyncFunc(rs.leave))
|
|
|
|
|
|
|
|
mux.RegisterSource(append(method, "endpoints"), typemux.SourceFunc(rs.endpoints))
|
|
|
|
|
2021-01-28 09:51:18 +00:00
|
|
|
mux.RegisterDuplex(append(method, "connect"), typemux.DuplexFunc(rs.connect))
|
2021-01-25 17:31:09 +00:00
|
|
|
|
|
|
|
return plugin{
|
|
|
|
h: &mux,
|
|
|
|
}
|
|
|
|
}
|