コード例 #1
0
        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);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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.");
            }
        }