any-sync/client/api/service.go
2022-11-30 23:42:26 +01:00

72 lines
2.2 KiB
Go

package api
import (
"context"
"github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto"
"github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace"
"github.com/anytypeio/go-anytype-infrastructure-experiments/client/document"
clientstorage "github.com/anytypeio/go-anytype-infrastructure-experiments/client/storage"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/account"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/app"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/config"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure"
"net/http"
"storj.io/drpc"
)
const CName = "api.service"
var log = logger.NewNamed(CName)
func New() Service {
return &service{BaseDrpcServer: server.NewBaseDrpcServer()}
}
type Service interface {
app.ComponentRunnable
drpc.Mux
}
type service struct {
controller Controller
transport secure.Service
srv *http.Server
cfg *config.Config
*server.BaseDrpcServer
}
func (s *service) Init(a *app.App) (err error) {
s.controller = newController(
a.MustComponent(clientspace.CName).(clientspace.Service),
a.MustComponent(storage.CName).(clientstorage.ClientStorage),
a.MustComponent(document.CName).(document.Service),
a.MustComponent(account.CName).(account.Service))
s.cfg = a.MustComponent(config.CName).(*config.Config)
s.transport = a.MustComponent(secure.CName).(secure.Service)
return nil
}
func (s *service) Name() (name string) {
return CName
}
func (s *service) Run(ctx context.Context) (err error) {
err = s.BaseDrpcServer.Run(
ctx,
s.cfg.APIServer.ListenAddrs, func(handler drpc.Handler) drpc.Handler {
return handler
},
s.transport.BasicListener)
if err != nil {
return
}
return apiproto.DRPCRegisterClientApi(s, &rpcHandler{s.controller})
}
func (s *service) Close(ctx context.Context) (err error) {
return s.BaseDrpcServer.Close(ctx)
}