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); }
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++; } } }
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(); }); } }