52 lines
790 B
Go
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
|
|
}
|