/// <summary>
 /// Adds instance bytes to packet builder.
 /// </summary>
 protected override void AddInstanceBytes(PacketBuilder builder)
 {
     builder.AddUInt16((ushort)_commandType);
     builder.AddInt32(_sequence);
     builder.AddUInt16(_retryAttempt);
     builder.AddUInt32(_timeoutMs);
     builder.AddBytes(_data);
 }
 /// <summary>
 /// Adds instance bytes to packet builder.
 /// </summary>
 protected override void AddInstanceBytes(PacketBuilder builder)
 {
     builder.AddUInt16((ushort)_commandType);
     builder.AddInt32(_sequence);
     builder.AddByte((byte)_code);
     builder.AddBytes(_data);
 }
Beispiel #3
0
        /// <summary>
        /// Serializes high score list to packet bytes.
        /// </summary>
        public byte[] ToBytes()
        {
            PacketBuilder builder = new PacketBuilder();

            lock (this)
            {
                builder.AddUInt16((ushort)_scores.Count);
                foreach (HighScore score in _scores)
                {
                    builder.AddString(score.Initials ?? "");
                    builder.AddInt32(score.Score);
                }
            }
            return(builder.ToBytes());
        }
Beispiel #4
0
        /// <summary>
        /// Answers a 'GetPlayers' request, responds with a list of connected players (of same game).
        /// </summary>
        private void Answer_GetPlayers(Client sourceClient, CommandRequestPacket packet)
        {
            try
            {
                //get source player
                NetworkPlayer player = NetworkPlayer.FromPacket(packet);

                //get list of connected players (not source player)
                List <NetworkPlayer> otherPlayers = GetMatchingPlayers(player.GameTitle, player.GameVersion)
                                                    .Where(p => p.PlayerKey != player.PlayerKey)
                                                    .ToList();

                //message
                Log.Write($"Sending '{packet.CommandType}' ({otherPlayers.Count} player{(otherPlayers.Count != 1 ? "s" : "")}) response to '{player.IP}'");

                //serialize list to bytes
                PacketBuilder builder = new PacketBuilder();
                builder.AddUInt16((ushort)otherPlayers.Count);
                foreach (NetworkPlayer p in otherPlayers)
                {
                    builder.AddBytes(p.ToBytes());
                }

                //create packet
                CommandResponsePacket response = new CommandResponsePacket(
                    gameTitle: player.GameTitle,
                    gameVersion: player.GameVersion,
                    sourceIP: _ip,
                    destinationIP: player.IP,
                    playerName: player.Name,
                    commandType: CommandType.GetPlayers,
                    sequence: packet.Sequence,
                    code: ResultCode.Accept,
                    data: builder.ToBytes());

                //send response back to source
                sourceClient.SendPacket(response);
            }
            catch (Exception ex)
            {
                Log.Write("Answer_GetPlayers: Error returning player list");
                ErrorHandler.LogError(ex);
            }
        }