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