Flush() 공개 메소드

Flushes the underlying stream.
public Flush ( ) : void
리턴 void
예제 #1
0
        public PrecompiledPacket(List<PacketFromServer> packets)
        {
            if (packets.Count == 0)
                throw new ArgumentException("Empty list");

            using (var ms = new MemoryStream())
            using (var w = new EndianBinaryWriter(EndianBitConverter.Big, ms))
            {
                foreach (var m in packets)
                {
                    //Buffer to memory stream
                    if (m.PacketBuffer == null)
                        m.Prepare();
                    Packet.WriteVarInt(w, m.PacketBuffer.Length);
                    w.Write(m.PacketBuffer);
                }
                w.Flush();
                SetPacketBuffer(ms.ToArray());
            }
            if (PacketBuffer.Length == 0)
                throw new ArgumentException("Empty compiled packet");
        }
        public static void PackSng(Stream input, Stream output, Platform platform)
        {
            EndianBitConverter conv = platform.GetBitConverter;
            Int32 platformHeader = (conv == EndianBitConverter.Big)? 1 : 3;

            using( var w = new EndianBinaryWriter(conv, output) )
            using( var zData = new MemoryStream() )
            using( var plain = new MemoryStream() )
            using( var encrypted = new MemoryStream() )
            using( var encw = new EndianBinaryWriter(conv, plain) )
            {
                w.Write((Int32) 0x4A);
                w.Write(platformHeader);

                // pack with zlib TODO: better packing required!
                RijndaelEncryptor.Zip(input, zData, input.Length);

                if (platformHeader == 3) {
                    // write size of uncompressed data and packed data itself | already there
                    encw.Write((Int32)input.Length);
                    encw.Write(zData.GetBuffer());
                    encw.Flush();

                    // choose key
                    byte[] key;
                    switch (platform.platform) {
                        case GamePlatform.Mac:
                            key = RijndaelEncryptor.SngKeyMac;
                            break;
                        default: //PC
                            key = RijndaelEncryptor.SngKeyPC;
                            break;
                    }
                    // encrypt (writes 16B IV and encrypted data)
                    plain.Position = 0;
                    RijndaelEncryptor.EncryptSngData(plain, encrypted, key);
                    w.Write(encrypted.GetBuffer());
                    w.Write(new Byte[56]); // append zero signature
                } else {
                    // unencrypted and unsigned
                    w.Write((Int32)input.Length);
                    w.Write(zData.GetBuffer());
                }

                output.Flush();
            }
        }
 public MemoryStream CopyStruct(object obj)
 {
     EndianBitConverter conv = EndianBitConverter.Little;
     MemoryStream data = new MemoryStream();
     var w = new EndianBinaryWriter(conv, data);
     bool mode = this.consoleMode;
     this.consoleMode = false;
     writeStruct(w, obj);
     this.consoleMode = mode;
     w.Flush();
     data.Position = 0;
     return data;
 }
        public static string GenerateSoundBank(string soundbankName, Stream audioStream, Stream outStream, float volume, Platform platform)
        {
            string eventName = PLAY + soundbankName;
            string previewName = PLAY30SEC + soundbankName;
            string bankName = SONG + soundbankName;
            var id = RandomGenerator.NextInt();

            byte[] soundbank = null;

            switch (platform.version)
            {
                case GameVersion.RS2012:
                    switch (platform.platform)
                    {
                        case GamePlatform.Pc:
                            soundbank = Resources.PC_soundbank;
                            break;
                        case GamePlatform.XBox360:
                        case GamePlatform.PS3:
                            soundbank = Resources.Console_soundbank;
                            break;
                        default:
                            throw new InvalidOperationException("Unexpected game platform value");
                    }
                    break;
                default:
                    throw new InvalidOperationException("Unexpected game version value");
            }

            var bitConverter = platform.GetBitConverter;

            using (var bankStream = new MemoryStream(soundbank))
            using (var bankReader = new EndianBinaryReader(bitConverter, bankStream))
            {
                var audioReader = new EndianBinaryReader(bitConverter, audioStream);
                var bankWriter = new EndianBinaryWriter(bitConverter, outStream);
                bankWriter.Write(bankReader.ReadBytes(platform.GetOffsets()[0]));
                bankReader.ReadInt32();
                bankWriter.Write(id);
                bankWriter.Write(bankReader.ReadInt32());
                int dataSize = bankReader.ReadInt32();
                bankWriter.Write(dataSize);
                bankWriter.Write(bankReader.ReadInt32());
                bankWriter.Write(bankReader.ReadInt32());
                bankWriter.Write(audioReader.ReadBytes(dataSize));
                bankReader.BaseStream.Seek(dataSize, SeekOrigin.Current);
                bankWriter.Write(bankReader.ReadBytes(platform.GetOffsets()[1]));
                bankWriter.Write(id);
                bankWriter.Write(id);
                bankReader.BaseStream.Seek(8, SeekOrigin.Current);
                bankWriter.Write(bankReader.ReadBytes(platform.GetOffsets()[2]));
                bankWriter.Write((float)volume);
                bankReader.ReadInt32();
                bankWriter.Write(bankReader.ReadBytes(platform.GetOffsets()[3]));
                bankReader.ReadInt32();
                bankWriter.Write(HashString(eventName));
                bankWriter.Write(bankReader.ReadBytes(platform.GetOffsets()[4]));
                bankReader.ReadInt32();
                bankWriter.Write(HashString(previewName));
                bankWriter.Write(bankReader.ReadBytes(platform.GetOffsets()[5]));
                bankWriter.Write(12 + bankName.Length + 1);
                bankReader.ReadInt32();
                bankWriter.Write(bankReader.ReadBytes(platform.GetOffsets()[6]));
                bankWriter.Write((byte)bankName.Length);
                bankWriter.Write(Encoding.ASCII.GetBytes(bankName));
                bankWriter.Flush();
            }

            return id.ToString();
        }
        public static string GenerateSoundBank(string soundbankName, Stream audioStream, Stream outStream, float volume, Platform platform, bool preview = false, bool same = false)
        {
            bitConverter = platform.GetBitConverter;
            int soundbankID = RandomGenerator.NextInt();
            int fileID = same ? oldFileID : RandomGenerator.NextInt();
            int soundID = same ? oldSoundID : RandomGenerator.NextInt();
            oldSoundID = soundID; oldFileID = fileID;

            var audioReader = new EndianBinaryReader(bitConverter, audioStream);
            byte[] dataChunk = audioReader.ReadBytes(51200); // wwise is based on audio length, we'll just make it up(prefethc lookup is 100ms)
            byte[] dataIndexChunk = DataIndex(fileID, dataChunk.Length);
            byte[] headerChunk = Header(soundbankID, dataIndexChunk.Length, platform.IsConsole);
            byte[] stringIdChunk = StringID(soundbankID, soundbankName);
            byte[] hierarchyChunk = Hierarchy(soundbankID, soundID, fileID, soundbankName, volume, preview, platform.IsConsole);

            var bankWriter = new EndianBinaryWriter(bitConverter, outStream);
            WriteChunk(bankWriter, "BKHD", headerChunk);
            WriteChunk(bankWriter, "DIDX", dataIndexChunk);
            WriteChunk(bankWriter, "DATA", dataChunk);
            WriteChunk(bankWriter, "HIRC", hierarchyChunk);
            WriteChunk(bankWriter, "STID", stringIdChunk);
            //Flush
            bankWriter.Flush();
            audioStream.Flush();
            outStream.Flush();
            audioStream.Position = 0;
            outStream.Position = 0;

            return fileID.ToString();
        }
        public static void PackSng(Stream input, Stream output, Platform platform)
        {
            EndianBitConverter conv;
            Int32 platformHeader;

            switch (platform.platform) {
                case GamePlatform.Pc:
                case GamePlatform.Mac:
                // Desktop
                    conv = EndianBitConverter.Little;
                    platformHeader = 3;
                    break;
                case GamePlatform.XBox360:
                case GamePlatform.PS3:
                // Console
                    conv = EndianBitConverter.Big;
                    platformHeader = 1;
                    break;
                default:
                    conv = EndianBitConverter.Little;
                    platformHeader = 3;
                    break;
            }

            using (EndianBinaryWriter w = new EndianBinaryWriter(conv, output)) {
                w.Write((Int32) 0x4A);
                w.Write(platformHeader);

                byte[] inputChartData = null;
                using (var mStream = new MemoryStream())
                {
                    input.CopyTo(mStream);
                    inputChartData = mStream.ToArray();
                }

                // pack with zlib
                MemoryStream zData = new MemoryStream();
                ZOutputStream zOut = new ZOutputStream(zData, zlib.zlibConst.Z_BEST_COMPRESSION);
                zOut.Write(inputChartData, 0, inputChartData.Length);
                zOut.finish();
                byte[] packed = zData.ToArray();

                if (platformHeader == 3) {
                    MemoryStream encrypted = new MemoryStream();
                    MemoryStream plain = new MemoryStream();
                    var encw = new EndianBinaryWriter(conv, plain);
                    // write size of uncompressed data and packed data itself
                    encw.Write((Int32)inputChartData.Length);
                    encw.Write(packed);
                    encw.Flush();
                    MemoryStream inputPlainStream = new MemoryStream(plain.ToArray());

                    // choose key
                    byte[] key;
                    switch (platform.platform) {
                        case GamePlatform.Mac:
                            key = RijndaelEncryptor.SngKeyMac;
                            break;
                        default: //PC
                            key = RijndaelEncryptor.SngKeyPC;
                            break;
                    }

                    // encrypt (writes 16B IV and encrypted data)
                    RijndaelEncryptor.EncryptSngData(inputPlainStream, encrypted, key);
                    w.Write(encrypted.ToArray());
                    // append zero signature
                    w.Write(new Byte[56]);
                } else {
                    // unencrypted and unsigned
                    w.Write((Int32)inputChartData.Length);
                    w.Write(packed);
                }

                output.Flush();
            }
        }
예제 #7
0
        public void MakeACO(string folder)
        {
            MemoryStream memory = new MemoryStream();
            EndianBinaryWriter bwriterWriter = new EndianBinaryWriter(EndianBitConverter.Big,memory);

            const UInt16 separator = 0;
            UInt16 sectionCounter = 0;

            var colorlist = ColorArea.AllColors().ToList();
            UInt16 numberOfColors = UInt16.Parse(colorlist.Count.ToString());
            sectionCounter++;
            using (memory)
            {
                using (bwriterWriter)
                {
                    bwriterWriter.Write(sectionCounter);

                    bwriterWriter.Write(numberOfColors); // write the number of colors

                    foreach (Color color in colorlist)
                    {
                        ColorStructureWriter(bwriterWriter, color);
                    }
                    sectionCounter++;

                    bwriterWriter.Write(sectionCounter);

                    bwriterWriter.Write(numberOfColors);

                    var encoding = new UnicodeEncoding(true,true,true);

                    foreach (var color in colorlist)
                    {
                        ColorStructureWriter(bwriterWriter,color);

                        var tmpcol = ColorArea.List.FirstOrDefault(c => c.Color == color);
                        var bytes = (encoding.GetBytes(tmpcol.Name));
                        bwriterWriter.Write((ushort)tmpcol.Name.Length+1);
                        bwriterWriter.Write(bytes);
                        bwriterWriter.Write((ushort)0);
                    }
                    bwriterWriter.Flush();

                    using (FileStream output = new FileStream(Path.Combine(folder, "palette.ACO"), FileMode.Create))
                    {
                        memory.WriteTo(output);
                    }
                }

            }
        }