示例#1
0
            public static Packet FromByteArray(byte[] data)
            {
                using (MemoryStream ms = new MemoryStream(data, false))
                    using (BinaryReader reader = new BinaryReader(ms))
                    {
                        ulong magic = reader.ReadUInt64();
                        if (magic != STEAM_DISCOVERY_MAGIC)
                        {
                            throw new IOException("Invalid packet, bad magic number: 0x" + magic.ToString("X16"));
                        }

                        Packet packet = new Packet();

                        uint   hdrLen  = reader.ReadUInt32();
                        byte[] hdrData = reader.ReadBytes((int)hdrLen);
                        CMsgRemoteClientBroadcastHeader hdr = CMsgRemoteClientBroadcastHeader.Parser.ParseFrom(hdrData);
                        packet.clientId   = hdr.ClientId;
                        packet.instanceId = hdr.InstanceId;
                        packet.type       = hdr.MsgType;

                        if (ms.Position < ms.Length)
                        {
                            uint payloadLen = reader.ReadUInt32();
                            packet.payload = reader.ReadBytes((int)payloadLen);
                        }

                        return(packet);
                    }
            }
示例#2
0
            public byte[] payload; // optional

            public byte[] ToByteArray()
            {
                using (MemoryStream ms = new MemoryStream())
                    using (BinaryWriter writer = new BinaryWriter(ms))
                    {
                        writer.Write(STEAM_DISCOVERY_MAGIC);

                        CMsgRemoteClientBroadcastHeader hdr = new CMsgRemoteClientBroadcastHeader()
                        {
                            ClientId   = clientId,
                            InstanceId = instanceId,
                            MsgType    = type
                        };
                        byte[] hdrData = hdr.ToByteArray();
                        writer.Write((uint)hdrData.Length);
                        writer.Write(hdrData);

                        if (payload != null)
                        {
                            writer.Write((uint)payload.Length);
                            writer.Write(payload);
                        }

                        writer.Flush();
                        return(ms.ToArray());
                    }
            }