73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package proto
|
|
|
|
import (
|
|
context "context"
|
|
"strings"
|
|
|
|
grpc "google.golang.org/grpc"
|
|
)
|
|
|
|
type GostTunelClientX interface {
|
|
TunnelX(ctx context.Context, method string, opts ...grpc.CallOption) (GostTunel_TunnelClient, error)
|
|
}
|
|
type gostTunelClientX struct {
|
|
cc grpc.ClientConnInterface
|
|
}
|
|
|
|
func NewGostTunelClientX(cc grpc.ClientConnInterface) GostTunelClientX {
|
|
return &gostTunelClientX{
|
|
cc: cc,
|
|
}
|
|
}
|
|
|
|
func (c *gostTunelClientX) TunnelX(ctx context.Context, method string, opts ...grpc.CallOption) (GostTunel_TunnelClient, error) {
|
|
sd := ServerDesc(method)
|
|
method = "/" + sd.ServiceName + "/" + sd.Streams[0].StreamName
|
|
stream, err := c.cc.NewStream(ctx, &sd.Streams[0], method, opts...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
x := &gostTunelTunnelClient{stream}
|
|
return x, nil
|
|
}
|
|
|
|
func RegisterGostTunelServerX(s grpc.ServiceRegistrar, srv GostTunelServer, method string) {
|
|
sd := ServerDesc(method)
|
|
s.RegisterService(&sd, srv)
|
|
}
|
|
|
|
func ServerDesc(method string) grpc.ServiceDesc {
|
|
serviceName, streamName := parsingMethod(method)
|
|
|
|
return grpc.ServiceDesc{
|
|
ServiceName: serviceName,
|
|
HandlerType: GostTunel_ServiceDesc.HandlerType,
|
|
Methods: GostTunel_ServiceDesc.Methods,
|
|
Streams: []grpc.StreamDesc{
|
|
{
|
|
StreamName: streamName,
|
|
Handler: GostTunel_ServiceDesc.Streams[0].Handler,
|
|
ServerStreams: GostTunel_ServiceDesc.Streams[0].ServerStreams,
|
|
ClientStreams: GostTunel_ServiceDesc.Streams[0].ClientStreams,
|
|
},
|
|
},
|
|
Metadata: GostTunel_ServiceDesc.Metadata,
|
|
}
|
|
|
|
}
|
|
|
|
func parsingMethod(method string) (string, string) {
|
|
serviceName := GostTunel_ServiceDesc.ServiceName
|
|
streamName := GostTunel_ServiceDesc.Streams[0].StreamName
|
|
v := strings.SplitN(strings.Trim(method, "/"), "/", 2)
|
|
if len(v) == 1 && v[0] != "" {
|
|
serviceName = v[0]
|
|
}
|
|
if len(v) == 2 {
|
|
serviceName = v[0]
|
|
streamName = strings.Replace(v[1], "/", "-", -1)
|
|
}
|
|
|
|
return serviceName, streamName
|
|
}
|