package stream_client import ( "common/log" "common/net/grpc/service" "context" "google.golang.org/grpc" ) var sceneServerM map[int64]map[SceneFun]grpc.ClientStream // map[sid]map[方法名]流连接 type SceneFun int const ( FunAction SceneFun = iota ) func FindSceneBySID(sid int64, fun SceneFun) grpc.ClientStream { g := sceneServerM[sid] if g == nil { g = make(map[SceneFun]grpc.ClientStream) sceneServerM[sid] = g } sceneLink := g[fun] if sceneLink == nil { sceneClient, err := service.SceneNewClient(sid) if err != nil { log.Errorf("cannot find sceneClient: %v", err) return nil } var link grpc.ClientStream switch fun { case FunAction: link, err = sceneClient.Action(context.Background()) } if err != nil { log.Errorf("FindSceneBySID %v err: %v, sid: %v", fun, err, sid) return nil } g[fun] = link sceneLink = link } return sceneLink }