Example #1
0
        public void WriteSizedMessage(Message message)
        {
            lock (write_lock) {
                ResetWriteBuffer();

                buffer.WriteByte(SizedEnvelopeRecord);

                MemoryStream ms      = new MemoryStream();
                var          session = writer_session ?? new MyXmlBinaryWriterSession();
                writer_session = session;
                int writer_session_count = session.List.Count;
                var benc = Encoder as BinaryMessageEncoder;
                try {
                    if (benc != null)
                    {
                        benc.CurrentWriterSession = session;
                    }
                    Encoder.WriteMessage(message, ms);
                } finally {
                    if (benc != null)
                    {
                        benc.CurrentWriterSession = null;
                    }
                }

                // dictionary
                if (EncodingRecord == Soap12EncodingBinaryWithDictionary)
                {
                    MemoryStream msd = new MemoryStream();
                    BinaryWriter dw  = new BinaryWriter(msd);
                    for (int i = writer_session_count; i < session.List.Count; i++)
                    {
                        dw.Write(session.List [i].Value);
                    }
                    dw.Flush();

                    int length       = (int)(msd.Position + ms.Position);
                    var msda         = msd.ToArray();
                    int sizeOfLength = writer.GetSizeOfLength(msda.Length);

                    writer.WriteVariableInt(length + sizeOfLength);              // dictionary array also involves the size of itself.
                    WriteSizedChunk(msda, 0, msda.Length);
                }
                else
                {
                    writer.WriteVariableInt((int)ms.Position);
                }

                // message body
                var arr = ms.GetBuffer();
                writer.Write(arr, 0, (int)ms.Position);

                writer.Flush();

                s.Write(buffer.GetBuffer(), 0, (int)buffer.Position);
                s.Flush();
            }
        }
Example #2
0
        public void WriteSizedMessage(Message message)
        {
            ResetWriteBuffer();

            if (EncodingRecord != 8)
            {
                throw new NotImplementedException(String.Format("Message encoding {0:X} is not implemented yet", EncodingRecord));
            }

            buffer.WriteByte(SizedEnvelopeRecord);

            MemoryStream ms      = new MemoryStream();
            var          session = writer_session ?? new MyXmlBinaryWriterSession();

            writer_session = session;
            int writer_session_count = session.List.Count;
            var benc = Encoder as BinaryMessageEncoder;

            try {
                if (benc != null)
                {
                    benc.CurrentWriterSession = session;
                }
                Encoder.WriteMessage(message, ms);
            } finally {
                benc.CurrentWriterSession = null;
            }

            // dictionary
            MemoryStream msd = new MemoryStream();
            BinaryWriter dw  = new BinaryWriter(msd);

            for (int i = writer_session_count; i < session.List.Count; i++)
            {
                dw.Write(session.List [i].Value);
            }
            dw.Flush();

            int length       = (int)(msd.Position + ms.Position);
            var msda         = msd.ToArray();
            int sizeOfLength = writer.GetSizeOfLength(msda.Length);

            writer.WriteVariableInt(length + sizeOfLength);              // dictionary array also involves the size of itself.
            WriteSizedChunk(msda, 0, msda.Length);
            // message body
            var arr = ms.GetBuffer();

            writer.Write(arr, 0, (int)ms.Position);

            writer.Flush();

            s.Write(buffer.GetBuffer(), 0, (int)buffer.Position);
            s.Flush();
        }
		public void WriterAddsStringsToSession ()
		{
			var ms = new MemoryStream ();
			var d = new MyXmlDictionary ();
			var s = new MyXmlBinaryWriterSession ();
			var w = XmlDictionaryWriter.CreateBinaryWriter (ms, d, s);
			w.WriteStartElement ("root1");
			w.WriteEndElement ();
			Assert.AreEqual (0, d.List.Count, "#1");
			Assert.AreEqual (0, s.List.Count, "#2");
			w.WriteStartElement (d.Add ("root2"), XmlDictionaryString.Empty);
			w.WriteEndElement ();
			Assert.AreEqual (1, d.List.Count, "#3");
			Assert.AreEqual (0, s.List.Count, "#4");
			w.WriteStartElement (new XmlDictionary ().Add ("root3"), XmlDictionaryString.Empty);
			w.WriteEndElement ();
			Assert.AreEqual (1, d.List.Count, "#5");
			Assert.AreEqual (1, s.List.Count, "#6");
		}
Example #4
0
        public void WriterAddsStringsToSession()
        {
            var ms = new MemoryStream();
            var d  = new MyXmlDictionary();
            var s  = new MyXmlBinaryWriterSession();
            var w  = XmlDictionaryWriter.CreateBinaryWriter(ms, d, s);

            w.WriteStartElement("root1");
            w.WriteEndElement();
            Assert.AreEqual(0, d.List.Count, "#1");
            Assert.AreEqual(0, s.List.Count, "#2");
            w.WriteStartElement(d.Add("root2"), XmlDictionaryString.Empty);
            w.WriteEndElement();
            Assert.AreEqual(1, d.List.Count, "#3");
            Assert.AreEqual(0, s.List.Count, "#4");
            w.WriteStartElement(new XmlDictionary().Add("root3"), XmlDictionaryString.Empty);
            w.WriteEndElement();
            Assert.AreEqual(1, d.List.Count, "#5");
            Assert.AreEqual(1, s.List.Count, "#6");
        }
Example #5
0
		public void WriteSizedMessage (Message message)
		{
			lock (write_lock) {

			ResetWriteBuffer ();

			buffer.WriteByte (SizedEnvelopeRecord);

			MemoryStream ms = new MemoryStream ();
			var session = writer_session ?? new MyXmlBinaryWriterSession ();
			writer_session = session;
			int writer_session_count = session.List.Count;
			var benc = Encoder as BinaryMessageEncoder;
			try {
				if (benc != null)
					benc.CurrentWriterSession = session;
				Encoder.WriteMessage (message, ms);
			} finally {
				if (benc != null)
					benc.CurrentWriterSession = null;
			}

			// dictionary
			if (EncodingRecord == Soap12EncodingBinaryWithDictionary) {
				MemoryStream msd = new MemoryStream ();
				BinaryWriter dw = new BinaryWriter (msd);
				for (int i = writer_session_count; i < session.List.Count; i++)
					dw.Write (session.List [i].Value);
				dw.Flush ();

				int length = (int) (msd.Position + ms.Position);
				var msda = msd.ToArray ();
				int sizeOfLength = writer.GetSizeOfLength (msda.Length);

				writer.WriteVariableInt (length + sizeOfLength); // dictionary array also involves the size of itself.
				WriteSizedChunk (msda, 0, msda.Length);
			}
			else
				writer.WriteVariableInt ((int) ms.Position);

			// message body
			var arr = ms.GetBuffer ();
			writer.Write (arr, 0, (int) ms.Position);

			writer.Flush ();

			s.Write (buffer.GetBuffer (), 0, (int) buffer.Position);
			s.Flush ();

			}
		}