Beispiel #1
0
        /// <summary>
        /// 获取归属地列表
        /// </summary>
        /// <returns></returns>
        public List <SpreadUserDetail> QueryRegionList()
        {
            var result = new List <SpreadUserDetail>();
            var req    = new GetRegionListRequest();

            var res = MKMSClient.Send <GetRegionListResponse>(req);

            if (res.DoFlag)
            {
                result = Mapper.MappGereric <Spread_UserExt, SpreadUserDetail>(res.SpreadUserDos);
            }
            return(result);
        }
        private OperationResponse HandleGetRegionListRequest(OperationRequest operationRequest, SendParameters sendParameters)
        {
            var regionListRequest = new GetRegionListRequest(this.Protocol, operationRequest);

            if (regionListRequest.IsValid == false)
            {
                this.HandleInvalidOperation(regionListRequest, sendParameters);
                return(null);
            }

            List <string> regions;
            List <string> endPoints;
            string        message;

            // authenticate application id
            if (!this.application.ServerCache.TryGetRegions(regionListRequest, this.NetworkProtocol, this.LocalPort, this.LocalIPAddressIsIPv6,
                                                            this.IsIPv6ToIPv4Bridged, out regions, out endPoints, out message))
            {
                this.SendOperationResponse(new OperationResponse((byte)OperationCode.GetRegionList)
                {
                    ReturnCode   = (short)ErrorCode.InvalidRegion,
                    DebugMessage = message
                }, sendParameters);

                this.ScheduleDisconnect(this.GetDisconnectTime());
                return(null);
            }

            var regionListResponse = new GetRegionListResponse
            {
                Endpoints = endPoints.ToArray(),
                Region    = regions.ToArray()
            };


            this.SendOperationResponse(new OperationResponse((byte)OperationCode.GetRegionList, regionListResponse), sendParameters);

            return(null);
        }
        public bool TryGetRegions(GetRegionListRequest regionListRequest, NetworkProtocolType networkProtocol,
                                  int port, bool isIPv6, bool useHostnames,
                                  out List <string> regions, out List <string> endPoints, out string message)
        {
            regions   = new List <string>();
            endPoints = new List <string>();
            message   = string.Empty;

            foreach (var server in this.servers)
            {
                var endpoint = server.GetEndPoint(networkProtocol, port, isIPv6, useHostnames);
                if (endpoint == null)
                {
                    continue;
                }

                regions.Add(server.Region);
                endPoints.Add(endpoint);
            }

            return(true);
        }
Beispiel #4
0
 /// <summary>
 /// 获取地区列表
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public ExecuteResult <GetRegionListResponse> GetRegionList(GetRegionListRequest request)
 {
     throw new NotImplementedException();
 }
Beispiel #5
0
        public bool GetRegionList(GetRegionListRequest request, ApplicationAccount appAccount, NetworkProtocolType networkProtocol, int port, bool isIPv6, bool useHostnames,
                                  out List <string> regions, out List <string> endPoints, out string message)
        {
            regions   = new List <string>();
            endPoints = new List <string>();
            message   = null;

            // check submitted ID:
            Guid appId;

            if (!Guid.TryParse(request.ApplicationId, out appId))
            {
                message = string.Format("Invalid Application ID format: {0}", request.ApplicationId);
                if (log.IsDebugEnabled)
                {
                    log.Debug(message);
                    return(false);
                }
            }

            if (string.IsNullOrEmpty(appAccount.PrivateCloud))
            {
                message = string.Format("No private cloud set for applicaton ID {0} - can not get Master", request.ApplicationId);
                log.Error(message);
                return(false);
            }

            var privateCloud = appAccount.PrivateCloud;

            if (log.IsDebugEnabled)
            {
                log.DebugFormat("PrivateCloud: {0}", privateCloud);
                var infos = appAccount.RegionClusterInfos;
                if (infos == null)
                {
                    log.DebugFormat("RegionClusterInfos == null!");
                }
                else
                {
                    log.DebugFormat("RegionClusterInfos:");
                    foreach (var info in infos)
                    {
                        log.DebugFormat(info.Key);
                        foreach (var clusterInfo in info.Value)
                        {
                            log.DebugFormat("\t{0}", clusterInfo);
                        }
                    }
                }
            }

            var allPhotonEndpoints = this.GetAllPhotonEndpoints(privateCloud, appAccount.ServiceType, appAccount);

            //tmp for whitelist
            var allRegions   = new List <string>();
            var allEndPoints = new List <string>();

            foreach (var server in allPhotonEndpoints)
            {
                var endpoint = server.GetEndPoint(networkProtocol, port, isIPv6, useHostnames);
                if (endpoint == null)
                {
                    continue;
                }

                string regionCluster = FormatRegionCultureString(server, allPhotonEndpoints);

                //use regionwhite list
                if (!string.IsNullOrEmpty(appAccount.GetRegionsFilter))
                {
                    //store all in case whitelist leaves no result
                    allRegions.Add(regionCluster);
                    allEndPoints.Add(endpoint);

                    if (!IsRegionClusterWhitelisted(appAccount.GetRegionsFilter, server.Region, server.Cluster))
                    {
                        if (log.IsDebugEnabled)
                        {
                            log.DebugFormat("Whitelist does not contain regionCluster '{0}', skipping", regionCluster);
                        }
                        continue;
                    }
                }

                regions.Add(regionCluster);
                endPoints.Add(endpoint);

                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("RegionCluster: {0} -> Endpoint: {1}", regionCluster, endpoint);
                }
            }

            if (!string.IsNullOrEmpty(appAccount.GetRegionsFilter) && regions.Count == 0)
            {
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("Whitelist left no entries, ignoring whitelist, returning all {0} entries", allRegions.Count);
                }
                regions.AddRange(allRegions);
                endPoints.AddRange(allEndPoints);
            }

            if (isIPv6 && regions.Count == 0)
            {
                message = string.Format("No IPv6 capable Master found for applicaton ID {0}", request.ApplicationId);
                log.Error(message);
                return(false);
            }

            return(true);
        }
 /// <summary>
 /// 获取地区列表
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public ExecuteResult<GetRegionListResponse> GetRegionList(GetRegionListRequest request)
 {
     throw new NotImplementedException();
 }