void Rcon_DataRecieved(object sender, SourceRconPacket e) { if (e.ID != 0) { return; } ProcessMessage(e.Body); }
private static Tuple <List <SourceRconPacket>, byte[]> BytesIntoPackets(byte[] bytes) { var packets = new List <SourceRconPacket>(); var offset = 0; try { do { if (offset + 4 > bytes.Length) { break; } var size = BitConverter.ToInt32(bytes, offset); if (size == 0) { break; } if (offset + size > bytes.Length) { break; } var id = BitConverter.ToInt32(bytes, offset + 4); var type = BitConverter.ToInt32(bytes, offset + 8); var body = Encoding.ASCII.GetString(bytes.Skip(offset + 12).Take(size - 6).ToArray()).Trim(); offset += 4 + size; var packet = new SourceRconPacket(id, type, body); packets.Add(packet); } while (true); } catch (Exception e) { Console.WriteLine(e); throw; } var leftover = offset == bytes.Length ? null : bytes.Skip(offset).Take(bytes.Length - offset).ToArray(); return(new Tuple <List <SourceRconPacket>, byte[]>(packets, leftover)); }