protected override void TakeRemote() { GameSession session = paramGetter.GetSession(); if (session == null) { TraceLog.ReleaseWrite("Session is invalid."); return; } int serverId = int.Parse(session.ProxyId); string ip = session.RemoteAddress.Split(':')[0]; string host = paramGetter.RequestPackage.Params["Host"]; int port = int.Parse(paramGetter.RequestPackage.Params["Port"]); bool retval = RoomServerManager.RegisterServer(serverId, ip, host, port); if (!retval) { TraceLog.ReleaseWrite("regist server failure [serverId]:{0} [ip]:{1} [port]:{2}", serverId, ip, port); session.Close(); return; } TraceLog.ReleaseWrite("regist server success [serverId]:{0} [ip]:{1} [port]:{2} [host]:{3}", serverId, ip, port, host); }
public static void ExecuteMatch(object state) { var queues = CacheSet.PVPMathcQueueCache.FindAll(); PlayerSinglePvpLogic psp = new PlayerSinglePvpLogic(); foreach (var queue in queues) { if (queue.InQueueGroups.Count <= 1) { continue; } if (queue.MatchedGroupCount > 0) { ClearMatchedGroups(queue); } var groups = new List <PVPGroup>(); groups.AddRange(queue.InQueueGroups); groups.Sort(); for (int i = 0; i < groups.Count; i++) { if (i + 1 >= groups.Count) { break; } bool success = true; LRCreateNewRoom userData = new LRCreateNewRoom(); foreach (int playerId in groups[i].Players) { if (!GameSession.Get(playerId).Connected) { queue.InQueueGroups.RemoveAt(i); success = false; break; } PBRoomPlayerInfo playerRoomData = GetPlayerRoomData(playerId); userData.RoomPlayerInfo.Add(playerRoomData); } if (!success) { continue; } foreach (int playerId in groups[++i].Players) { if (!GameSession.Get(playerId).Connected) { queue.InQueueGroups.RemoveAt(i); success = false; break; } PBRoomPlayerInfo playerRoomData = GetPlayerRoomData(playerId); userData.RoomPlayerInfo.Add(playerRoomData); } if (!success) { continue; } userData.Token = GetToken(); var room = RoomServerManager.GetLowestLoadedRoomServer(); TraceLog.Write("room" + room.Id.ToString() + "::" + room.IP); RoomServerSender.Send(room.Id, "LRCreateNewRoomHandler", userData, delegate(RemotePackage callback) { var res = RemoteCommunication.ParseRemotePackage <RLCreateNewRoom>(callback.Message as byte[]); LCPushPvpMatchSuccess package = new LCPushPvpMatchSuccess() { RoomId = res.RoomId, RoomServerHost = room.Host, RoomServerPort = room.Port, Token = userData.Token, InstanceId = res.InstanceId }; var rank = RankingFactory.Get <SinglePvpRankUser>("SinglePvpRanking"); foreach (int playerId in groups[queue.MatchedGroupCount].Players) { foreach (var rp in userData.RoomPlayerInfo) { if (rp.PlayerInfo.Id != playerId) { package.EnemyInfo = rp; } } byte[] buffer = CustomActionDispatcher.GeneratePackageStream(package.PacketActionId, ProtoBufUtils.Serialize(package)); try { GameSession.Get(playerId).SendAsync(buffer, 0, buffer.Length); } catch { continue; } } foreach (int playerId in groups[queue.MatchedGroupCount + 1].Players) { foreach (var rp in userData.RoomPlayerInfo) { if (rp.PlayerInfo.Id != playerId) { package.EnemyInfo = rp; } } byte[] buffer = CustomActionDispatcher.GeneratePackageStream(package.PacketActionId, ProtoBufUtils.Serialize(package)); try { GameSession.Get(playerId).SendAsync(buffer, 0, buffer.Length); } catch { continue; } } queue.MatchedGroupCount += 2; }); } ClearMatchedGroups(queue); } }