tranport draft, renamed module

This commit is contained in:
2021-07-17 22:40:06 +02:00
parent a6696b1d39
commit 9c16750ffc
14 changed files with 338 additions and 65 deletions

10
transport/grpc/grpc.go Normal file
View File

@ -0,0 +1,10 @@
package grpc
import (
"go.linka.cloud/grpc/transport"
"google.golang.org/grpc"
)
var (
_ transport.Transport = &grpc.Server{}
)

View File

@ -0,0 +1,52 @@
package inproc
import (
"errors"
"net"
"sync"
"github.com/fullstorydev/grpchan/inprocgrpc"
"go.linka.cloud/grpc/transport"
)
var (
_ transport.Transport = &InProc{}
)
func New() transport.Transport {
return &InProc{stop: make(chan struct{})}
}
type InProc struct {
inprocgrpc.Channel
stop chan struct{}
running bool
mu sync.RWMutex
}
func (i *InProc) Serve(lis net.Listener) error {
i.mu.RLock()
running := i.running
i.mu.RUnlock()
if running {
return errors.New("already running")
}
i.mu.Lock()
i.running = true
i.mu.Unlock()
<-i.stop
return nil
}
func (i *InProc) Stop() {
i.mu.RLock()
running := i.running
i.mu.RUnlock()
if running {
i.stop <- struct{}{}
}
}
func (i *InProc) GracefulStop() {
i.Stop()
}

15
transport/transport.go Normal file
View File

@ -0,0 +1,15 @@
package transport
import (
"net"
"google.golang.org/grpc"
)
type Transport interface {
grpc.ServiceRegistrar
RegisterService(sd *grpc.ServiceDesc, ss interface{})
Serve(lis net.Listener) error
Stop()
GracefulStop()
}