Esempio n. 1
0
        public int AddBytes(byte[] rBytes)
        {
            int tmpError;
            accessControl.WaitOne();
            for(int i=0; i<rBytes.Length; i++) // Der reihe nach hinzufügen
            {
                tmpError = addByteInternal(rBytes[i]);

                if(tmpError != 0) // sollte beispielsweise der Buffer überlaufen, Exception raus
                {

                    EDOLLHandler.Error(tmpError); // Buffer overflow...
                    BufferOverflow ex = new BufferOverflow(EDOLLHandler.GetLastError() + "Datapointer: " + this.dptr.ToString());
                    accessControl.Release();
                    throw ex;
                }
            }
            // wenn ich bis hierher gekommen bin, gabs keinen Fehler...

            availableSema = accessControl.Release();

            if(ByteAdded != null)
            {
                ByteAdded(this, EventArgs.Empty); // Fire Events (if there are any)
            }

            return(0);
        }
Esempio n. 2
0
        ///<summary>
        /// Fügt ein Byte hinten an den Buffer an (an die Stelle, auf die der Datenpointer vorher zeigte)
        /// </summary>
        /// <param name="pByte">Anzuhängendes Byte</param>
        /// <returns>
        /// <list type="bullet">
        /// <item>0 bei Erfolg (<see cref="EDOLLHandler">EDOLL-Code</see>)</item>
        /// <item>-201 wenn Buffer voll (Byte wurde nicht geschrieben) (<see cref="EDOLLHandler">EDOLL-Code</see>)</item>
        /// </list>
        /// </returns>
        /// <example>
        /// Beispieloperationen mit dem Buffer
        /// <para><img src="tbl_img/receiveBufferExample.jpg" /></para>
        /// <code> 
        /// public static void receiveBufferExample()
        /// {
        /// 	receiveBuffer testBuffer = new receiveBuffer();
        /// 
        ///		testBuffer.AddByte((byte)'a');
        ///     testBuffer.AddByte((byte)'b');
        ///     testBuffer.AddByte((byte)'c');
        /// 
        ///     stdOut.Debug("Dataptr now: " + testBuffer.DataPtr.ToString());     // printet 3
        /// 	stdOut.Debug("Buffer content: " + testBuffer.ToString());// Zeigt Hexwerte im Buffer an
        ///  
        ///     testBuffer.FreeBytes(0,1); // markiert 'a' und 'b' zum Löschen
        ///            
        ///     stdOut.Info("a und b marked for erasing");
        ///     stdOut.Debug("Dataptr now: " + testBuffer.DataPtr.ToString());     // liefert 3, wurde ja erst markiert
        ///                            
        ///     testBuffer.Flush();
        ///            
        ///     stdOut.Info("buffer flushed...");
        ///     stdOut.Debug("Dataptr now: " + testBuffer.DataPtr.ToString());     // liefert 1, 'c' wurde ganz nach vorne gerutscht
        ///     stdOut.Debug("Buffer content: " + testBuffer.ToString());// Zeigt Hexwerte im Buffer an
        /// 
        ///     testBuffer.Clear(); // Buffer wieder ausleeren
        ///            
        ///     stdOut.Info("buffer cleared");
        ///     stdOut.Debug("Dataptr now: " + testBuffer.DataPtr.ToString());     // liefert 0
        /// }
        /// </code>
        /// </example>>
        // TODO: EXCEPTION dokumentieren
        public int AddByte(byte pByte)
        {
            int tmpError;

            accessControl.WaitOne();
            tmpError = addByteInternal(pByte);

            if(tmpError == 0)
            {
                accessControl.Release();
                if(ByteAdded != null)
                {
                    ByteAdded(this, EventArgs.Empty); // Call Events (if there are any)
                }

                return(0); // EDOLL no Error
            }
            else
            {

                EDOLLHandler.Error(tmpError); // Buffer overflow...
                BufferOverflow ex = new BufferOverflow(EDOLLHandler.GetLastError() + "Datapointer: " + this.dptr.ToString());
                accessControl.Release();
                throw ex;
            }
        }