示例#1
0
 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));
        }