示例#1
0
        public MapConnectInfo GetGlobalMapConnectInfo(ushort planesId, ushort mapSourceId)
        {
            string         key = planesId.ToString() + ":" + mapSourceId.ToString();
            MapConnectInfo cinfo;

            if (false == mGlobalMaps.TryGetValue(key, out cinfo))
            {
                cinfo = new MapConnectInfo();
                cinfo.PlanesPlayerManager = IDataServer.Instance.PlayerManager.FindPlanesPlayerManager(planesId);

                //评估一个压力小的服务器
                var              planesServers   = IDataServer.Instance.PlanesServers;
                Int32            minPlayerNumber = Int32.MaxValue;
                PlanesServerInfo selected        = null;
                foreach (var kv in planesServers)
                {
                    if (kv.Value.PlayerNumber < minPlayerNumber)
                    {
                        selected        = kv.Value;
                        minPlayerNumber = kv.Value.PlayerNumber;
                    }
                }
                if (selected == null)
                {
                    return(null);
                }
                cinfo.mConnect      = selected.EndPoint;
                cinfo.MapSourceId   = mapSourceId;
                cinfo.MapInstanceId = 0;

                mGlobalMaps.Add(key, cinfo);
            }
            return(cinfo);
        }
示例#2
0
        //开启世界地图、国战地图
        public void StartGlobalMap(ulong aiPlanesSerId, ushort planesId, ushort mapSourceId)
        {
            string         key = planesId.ToString() + ":" + mapSourceId.ToString();
            MapConnectInfo cinfo;

            if (false == mGlobalMaps.TryGetValue(key, out cinfo))
            {
                cinfo = new MapConnectInfo();
                cinfo.PlanesPlayerManager = IDataServer.Instance.PlayerManager.FindPlanesPlayerManager(planesId);

                //选择指定位面服务器
                var planesServers = IDataServer.Instance.PlanesServers;

                PlanesServerInfo selected = null;
                foreach (var kv in planesServers)
                {
                    if (kv.Value.EndPoint.Id == aiPlanesSerId)
                    {
                        selected = kv.Value;
                        break;
                    }
                }
                if (selected == null)
                {
                    return;
                }
                cinfo.mConnect      = selected.EndPoint;
                cinfo.MapSourceId   = mapSourceId;
                cinfo.MapInstanceId = 0;

                mGlobalMaps.Add(key, cinfo);
            }
        }
示例#3
0
        private MapConnectInfo GetInstanceMapConnectInfo(CSCommon.Data.PlayerDataEx pd, ushort mapSourceId, ulong mapId)
        {
            MapConnectInfo cinfo;

            if (false == mInstanceMaps.TryGetValue(mapId, out cinfo))
            {
                //评估一个压力小的服务器
                var              planesServers   = IDataServer.Instance.PlanesServers;
                Int32            minPlanesNumber = Int32.MaxValue;
                PlanesServerInfo selected        = null;
                foreach (var kv in planesServers)
                {
                    if (kv.Value.PlanesNumber < minPlanesNumber)
                    {
                        selected        = kv.Value;
                        minPlanesNumber = kv.Value.PlanesNumber;
                    }
                }
                cinfo = new MapConnectInfo();
                cinfo.PlanesPlayerManager = null;
                cinfo.mConnect            = selected.EndPoint;
                cinfo.MapSourceId         = mapSourceId;
                cinfo.MapInstanceId       = mapId;

                cinfo.InstanceCreator = pd.RoleDetail.RoleId;//如果是组队副本,这个地方存队伍Id

//                 var mapInit = Planes.MapInstanceManager.GetMapInitBySourceId(mapSourceId);
//                 if (mapInit != null)
//                 {
//                     switch ((CSCommon.eMapType)mapInit.MapData.mapType)
//                     {
//                         case CSCommon.eMapType.Master:
//                             cinfo.InstanceCreator = pd.RoleDetail.RoleId;//单人副本
//                             break;
//                         //case CSCommon.eMapType.TeamInstance:
//                         //cinfo.InstanceCreator = pd.RoleDetail.TeamId;//组队副本
//                         //   break;
//                     }
//                 }

                mInstanceMaps.Add(mapId, cinfo);
            }
            else
            {
                if (cinfo.MapSourceId != mapSourceId)
                {
                    Log.Log.Server.Info("副本Id错了 {0}:{1}!", mapSourceId, mapId);
                }
            }
            return(cinfo);
        }