protected override void CheckRequest() { base.CheckRequest(); //Save server information. _dataPartition = Encoding.ASCII.GetString(_request.RawRequest.Skip(5).ToArray()); _playerPos = _dataPartition.IndexOf("player_\0", StringComparison.Ordinal); _teamPos = _dataPartition.IndexOf("team_t\0", StringComparison.Ordinal); if (_playerPos != -1 && _teamPos != -1) { _reportType = HeartBeatReportType.ServerTeamPlayerData; } else if (_playerPos != -1) { //normal heart beat _reportType = HeartBeatReportType.ServerPlayerData; } else if (_playerPos == -1 && _teamPos == -1) { _reportType = HeartBeatReportType.ServerData; } else { _errorCode = QRErrorCode.Parse; return; } _session.SetInstantKey(_request.InstantKey); }
protected override void CheckRequest() { BasePacket basePacket = new BasePacket(); basePacket.Parse(_recv); //DedicatedGameServer gameServer = new DedicatedGameServer(); //gameServer.Parse(endPoint, basePacket.InstantKey); _gameServer = new GameServer(); QRSession client = (QRSession)_session.GetInstance(); _gameServer.Parse(client.RemoteEndPoint, basePacket.InstantKey); //_gameServer = QRServer.GameServerList.GetOrAdd(endPoint, gameServer); //Save server information. _dataPartition = Encoding.ASCII.GetString(_recv.Skip(5).ToArray()); //keep this for debug string[] temp = _dataPartition.Split("\0\0", StringSplitOptions.RemoveEmptyEntries); _playerPos = _dataPartition.IndexOf("player_\0", StringComparison.Ordinal); _teamPos = _dataPartition.IndexOf("team_t\0", StringComparison.Ordinal); if (_playerPos != -1 && _teamPos != -1) { _reportType = HeartBeatReportType.ServerTeamPlayerData; } else if (_playerPos != -1) { //normal heart beat _reportType = HeartBeatReportType.ServerPlayerData; } else if (_playerPos == -1 && _teamPos == -1) { _reportType = HeartBeatReportType.ServerData; //if (PeerGroup.PeerGroupKeyList.Contains(_gameServer.ServerData.KeyValue["gamename"]) // && !_gameServer.ServerData.KeyValue.ContainsKey("hostport")) //{ // _gameServer.IsPeerServer = true; //} //GameServer.DeleteServer( // endPoint, // _gameServer.ServerData.KeyValue["gamename"] // ); } else { _errorCode = QRErrorCode.Parse; return; } base.CheckRequest(); }
public override void Parse() { base.Parse(); int playerPos, teamPos; int playerLenth, teamLength; DataPartition = UniSpyEncoding.GetString(RawRequest.Skip(5).ToArray()); playerPos = DataPartition.IndexOf("player_\0", StringComparison.Ordinal); teamPos = DataPartition.IndexOf("team_t\0", StringComparison.Ordinal); if (playerPos != -1 && teamPos != -1) { ReportType = HeartBeatReportType.ServerTeamPlayerData; playerLenth = teamPos - playerPos; teamLength = DataPartition.Length - teamPos; var serverDataStr = DataPartition.Substring(0, playerPos - 4); ParseServerData(serverDataStr); var playerDataStr = DataPartition.Substring(playerPos - 1, playerLenth - 2); ParsePlayerData(playerDataStr); var teamDataStr = DataPartition.Substring(teamPos - 1, teamLength); ParseTeamData(teamDataStr); } else if (playerPos != -1) { //normal heart beat ReportType = HeartBeatReportType.ServerPlayerData; playerLenth = DataPartition.Length - playerPos; var serverDataStr = DataPartition.Substring(0, playerPos - 4); ParseServerData(serverDataStr); var playerDataStr = DataPartition.Substring(playerPos - 1, playerLenth); ParsePlayerData(playerDataStr); } else if (playerPos == -1 && teamPos == -1) { ReportType = HeartBeatReportType.ServerData; var serverDataStr = DataPartition; ParseServerData(serverDataStr); } else { throw new QRException("HeartBeat request is invalid."); } }