44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
package grpcclient
|
||
|
||
import (
|
||
"fmt"
|
||
"git.hlsq.asia/alex/proto/proto/rs/rspb"
|
||
"git.hlsq.asia/alex/service-common/discover"
|
||
"git.hlsq.asia/alex/service-common/discover/common"
|
||
"git.hlsq.asia/alex/service-common/net/grpc/resolver"
|
||
"google.golang.org/grpc"
|
||
)
|
||
|
||
// SceneNewClient 根据SID查找场景服,一般不用这个函数
|
||
func SceneNewClient(sid ...int64) (rspb.SceneClient, error) {
|
||
var c *grpc.ClientConn
|
||
var err error
|
||
if len(sid) == 0 {
|
||
c, err = resolver.GetGrpcClientConn("etcd:///" + common.KeyDiscoverServiceNameScene)
|
||
} else {
|
||
c, err = discover.FindServer(common.KeyDiscoverScene, sid...)
|
||
}
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return rspb.NewSceneClient(c), nil
|
||
}
|
||
|
||
// SceneInstanceNewClient 根据副本唯一编号查找场景服
|
||
func SceneInstanceNewClient(uniqueNO int64) (rspb.SceneClient, error) {
|
||
sid := discover.FindInstanceByUniqueNo(uniqueNO)
|
||
if sid == 0 {
|
||
return nil, fmt.Errorf("instance not found: %v", uniqueNO)
|
||
}
|
||
return SceneNewClient(sid)
|
||
}
|
||
|
||
func SceneNewBroadcastClient() map[int64]rspb.SceneClient {
|
||
clientM := make(map[int64]rspb.SceneClient)
|
||
connM := discover.FindServerAll(common.KeyDiscoverScene)
|
||
for sid, conn := range connM {
|
||
clientM[sid] = rspb.NewSceneClient(conn)
|
||
}
|
||
return clientM
|
||
}
|