コード例 #1
0
        /// <summary>
        /// 向远端注册服务信息
        /// </summary>
        public void RegisterServer(IServiceProvider provider)
        {
            //注册服务
            var servers  = provider.GetServices <DevelopBase.Discovery.IServer>();
            var Register = servers.First(c => c.GetType().GetInterfaces().Contains(DiscoveryMap[BaseServerInfo.DiscoveryInfo.ProtocolType].BaseInterface));

            Register.SetServer(BaseServerInfo.DiscoveryInfo.Connstring, BaseServerInfo.DiscoveryInfo.TimeOut);
            //转换本地配置为远端配置
            foreach (var localInfo in Appinfos)
            {
                foreach (var SupportProtocolType in localInfo.SupportProtocolTypes)
                {
                    var remoteInfo = new DPBase.RemoteAppInfo()
                    {
                        AppName      = localInfo.AppName,
                        ProtocolType = SupportProtocolType,
                        HostName     = BaseServerInfo.HostName,
                        Infos        = BaseServerInfo.Infos,
                        HostAddr     = ProtocolInfos.First(c => c.ProtocolType == SupportProtocolType).HostAddr,
                        HostPort     = ProtocolInfos.First(c => c.ProtocolType == SupportProtocolType).HostPort,
                    };
                    lock (Registered)
                    {
                        var key = $"{remoteInfo.AppName}-{remoteInfo.HostName}-{remoteInfo.ProtocolType}";
                        Registered.Add(key, Newtonsoft.Json.JsonConvert.SerializeObject(remoteInfo));
                        Register.Register(key, Registered[key]);
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 向远端注册服务信息
        /// </summary>
        public void UpdateServer(IServiceProvider provider, DPBase.BaseServerInfo NewInfos)
        {
            //移除旧注册信息
            var servers  = provider.GetServices <DevelopBase.Discovery.IServer>();
            var Register = servers.First(c => c.GetType().GetInterfaces().Contains(DiscoveryMap[BaseServerInfo.DiscoveryInfo.ProtocolType].BaseInterface));

            //重置连接将删除以前全部数据
            Register.SetServer(BaseServerInfo.DiscoveryInfo.Connstring);
            lock (Registered)
            {
                Registered.Clear();
            }
            //更新本地缓存信息
            Appinfos = provider.GetService <HashSet <DPBase.Appinfo> >();
            if (Appinfos == null)
            {
                Appinfos = new HashSet <DPBase.Appinfo>();
            }
            foreach (var item in NewInfos.Appinfos)
            {
                lock (Appinfos)
                {
                    if (!Appinfos.Any(c => c.AppName == item.AppName))
                    {
                        Appinfos.Add(item);
                    }
                }
            }
            ProtocolInfos  = NewInfos.ProtocolInfos;
            BaseServerInfo = NewInfos;
            //重新注册信息
            foreach (var localInfo in Appinfos)
            {
                foreach (var SupportProtocolType in localInfo.SupportProtocolTypes)
                {
                    var remoteInfo = new DPBase.RemoteAppInfo()
                    {
                        AppName      = localInfo.AppName,
                        ProtocolType = SupportProtocolType,
                        HostName     = BaseServerInfo.HostName,
                        Infos        = BaseServerInfo.Infos,
                        HostAddr     = ProtocolInfos.First(c => c.ProtocolType == SupportProtocolType).HostAddr,
                        HostPort     = ProtocolInfos.First(c => c.ProtocolType == SupportProtocolType).HostPort,
                    };
                    lock (Registered)
                    {
                        var key = $"{remoteInfo.AppName}-{remoteInfo.HostName}-{remoteInfo.ProtocolType}";
                        Registered.Add(key, Newtonsoft.Json.JsonConvert.SerializeObject(remoteInfo));
                        Register.Register(key, Registered[key]);
                    }
                }
            }
        }
コード例 #3
0
ファイル: BaseClient.cs プロジェクト: zhj149/ContainerBase
        /// <summary>
        /// 调用app
        /// </summary>
        /// <param name="appname">app名</param>
        /// <param name="appmsg">app传入参数</param>
        /// <returns>异步应用调用结果</returns>
        public async Task <string> RunAppAsync(IServiceProvider provider, string appname, string appmsg)
        {
            DPBase.RemoteAppInfo app = GetAppInfo(appname);//获取app信息
            //获取client
            var clients = provider.GetServices <DevelopBase.Protocol.IClient>();
            var client  = clients.First(c => c.GetType().GetInterfaces().Contains(ProtocolMap[app.ProtocolType].BaseInterface));

            //设置client参数
            client.UseClient(app.HostAddr, app.HostPort);
            //调用数据
            return(await client.GetReponseAsync(app.AppName, appmsg));
        }
コード例 #4
0
ファイル: BaseClient.cs プロジェクト: zhj149/ContainerBase
        /// <summary>
        /// 调用app
        /// </summary>
        /// <param name="appname">app名</param>
        /// <param name="appmsg">app传入参数</param>
        /// <returns>应用调用结果</returns>
        public string RunApp(IServiceProvider provider, string appname, string appmsg)
        {
            DPBase.RemoteAppInfo app = GetAppInfo(appname);//获取app信息
            if (app == null)
            {
                return(Newtonsoft.Json.JsonConvert.SerializeObject(new Grpcconnect.Standard.ReponseMsg()
                {
                    ErrorCode = -1, ErrorInfo = "no action", Result = null
                }));
            }
            //获取client
            var clients = provider.GetServices <DevelopBase.Protocol.IClient>();
            var client  = clients.First(c => c.GetType().GetInterfaces().Contains(ProtocolMap[app.ProtocolType].BaseInterface));

            //设置client参数
            client.UseClient(app.HostAddr, app.HostPort);
            //调用数据
            return(client.GetReponse(app.AppName, appmsg));
        }