示例#1
0
        public static bool RegisterServer(int serverId, string ip, int port)
        {
            LobbyServer lobbyServer = CacheSet.LobbyServerCache.FindKey(serverId);

            if (lobbyServer != null)
            {
                //if (roomServer.State == (int)RoomServerState.Normal)
                //{
                //    return false;
                //}

                CacheSet.LobbyServerCache.RemoveCache(lobbyServer);
                LobbyServerSender.RemoveServer(serverId);
            }

            lobbyServer                 = new LobbyServer();
            lobbyServer.Id              = serverId;
            lobbyServer.IP              = ip;
            lobbyServer.Port            = port;
            lobbyServer.LastUpdatedTime = DateTime.UtcNow.Ticks;
            CacheSet.LobbyServerCache.Add(lobbyServer);

            LobbyServerSender.AddServer(serverId, ip, port);

            return(true);
        }
示例#2
0
        public static void ExecuteMatch(object state)
        {
            var queues = CacheSet.PVPMathcQueueCache.FindAll();

            //PlayerSinglePvpLogic psp = new PlayerSinglePvpLogic();
            foreach (var queue in queues)
            {
                queue.MatchedGroupCount = 0;
                if (queue.InQueueGroups.Count <= 1)
                {
                    continue;
                }
                var groups = new List <PVPGroup>();
                groups.AddRange(queue.InQueueGroups);
                groups.Sort();
                for (int i = 0; i < groups.Count; i++)
                {
                    while ((groups[i + 1].Player.Score - groups[i].Player.Score) > 200 && i + 1 < groups.Count)
                    {
                        queue.MatchedGroupCount += 1;
                        i++;
                    }
                    if (i + 1 >= groups.Count)
                    {
                        break;
                    }
                    WRCreateNewRoom userData = new WRCreateNewRoom();
                    userData.RoomPlayerInfo.Add(groups[i].Player);
                    userData.RoomPlayerInfo.Add(groups[i + 1].Player);
                    userData.Token = GetToken();
                    var room = RoomServerManager.GetLowestLoadedRoomServer();
                    RoomServerSender.Send(room.Id, "LRCreateNewRoomHandler", userData, delegate(RemotePackage callback)
                    {
                        //TraceLog.ReleaseWrite("Player:{0} and Player:{1} match success", groups[i].Player.PlayerInfo.Id.ToString(), groups[i + 1].Player.PlayerInfo.Id.ToString());
                        var res = RemoteCommunication.ParseRemotePackage <RWCreateNewRoom>(callback.Message as byte[]);
                        WLMatchSuccess package = new WLMatchSuccess()
                        {
                            RoomId         = res.RoomId,
                            InstanceId     = res.InstanceId,
                            Token          = userData.Token,
                            RoomServerHost = room.Host,
                            RoomServerPort = room.Port,
                        };
                        package.EnemyInfo = groups[queue.MatchedGroupCount + 1].Player;
                        package.PlayerId  = groups[queue.MatchedGroupCount].Player.PlayerInfo.Id;
                        LobbyServerSender.Send(groups[queue.MatchedGroupCount].Player.LobbyServerId, "WLMatchSuccessHandler", package, delegate(RemotePackage cb) { });
                        package.EnemyInfo = groups[queue.MatchedGroupCount].Player;
                        package.PlayerId  = groups[queue.MatchedGroupCount + 1].Player.PlayerInfo.Id;
                        LobbyServerSender.Send(groups[queue.MatchedGroupCount + 1].Player.LobbyServerId, "WLMatchSuccessHandler", package, delegate(RemotePackage cb) { });
                        queue.InQueueGroups.Remove(groups[queue.MatchedGroupCount]);
                        queue.InQueueGroups.Remove(groups[queue.MatchedGroupCount + 1]);
                    });
                    i++;
                }
            }
        }
示例#3
0
        protected override void TakeRemote()
        {
            PvpPlayer player1 = null;
            PvpPlayer player2 = null;

            if (m_RequestPacket.PlayerIds.Count < 2)
            {
                return;
            }
            for (int i = 0; i < m_RequestPacket.PlayerIds.Count; i++)
            {
                PvpPlayer p = CacheSet.PvpPlayerCache.FindKey(m_RequestPacket.PlayerIds[i], m_RequestPacket.ServerId[i]);
                if (p == null)
                {
                    return;
                }
                if (i == 0)
                {
                    player1 = p;
                }
                else if (i == 1)
                {
                    player2 = p;
                }
            }
            int         p1score = PVPLogic.GetDeltaScore(player1.Score, player2.Score, m_RequestPacket.Result[0]);
            int         p2score = PVPLogic.GetDeltaScore(player2.Score, player1.Score, m_RequestPacket.Result[1]);
            WLPvpResult package = new WLPvpResult();

            for (int i = 0; i < m_RequestPacket.PlayerIds.Count; i++)
            {
                package.PlayerId = m_RequestPacket.PlayerIds[i];
                package.Result   = m_RequestPacket.Result[i];
                package.Score    = i == 0 ? p1score : p2score;
                LobbyServerSender.Send(m_RequestPacket.ServerId[i], "WLPvpResultHandler", package, delegate(RemotePackage callback) {
                    LWPvpResult res = RemoteCommunication.ParseRemotePackage <LWPvpResult>(callback.Message as byte[]);
                    if (res.PlayerId == player1.Id)
                    {
                        player1.Score = res.Score;
                    }
                    else if (res.PlayerId == player2.Id)
                    {
                        player2.Score = res.Score;
                    }
                    RankingFactory.Get <SinglePvpRankUser>("SinglePvpRanking").Refresh();
                });
            }
        }