ultone/internal/unix/start.go
2024-07-26 17:59:02 +08:00

52 lines
790 B
Go

package unix
import (
"context"
"net"
"net/rpc"
"net/url"
"ultone/internal/log"
"ultone/internal/opt"
)
func Start(ctx context.Context) error {
ready := make(chan bool)
defer close(ready)
uri, err := url.Parse(opt.Cfg.Listen.Unix)
if err != nil {
return err
}
address := uri.Host + uri.Path
log.Debug(ctx, "[rpc-svc] listen at [%s] [%s]", uri.Scheme, address)
ln, err := net.Listen(uri.Scheme, address)
if err != nil {
return err
}
go func() {
ready <- true
<-ctx.Done()
_ = ln.Close()
}()
<-ready
svc := rpc.NewServer()
if err = svc.RegisterName("svc", &Handler{Ctx: ctx}); err != nil {
return err
}
go func() {
log.Info(ctx, "[rpc-svc] start at: [%s] [%s]", uri.Scheme, address)
ready <- true
svc.Accept(ln)
}()
<-ready
return nil
}