Ejemplo n.º 1
0
        /// <summary>
        /// Send packet asynchronously
        /// </summary>
        /// <param name="packet">SNI packet</param>
        /// <param name="callback">Completion callback</param>
        /// <returns>SNI error code</returns>
        private uint InternalSendAsync(SNIPacket packet, SNIAsyncCallback callback)
        {
            SNIPacket encapsulatedPacket = null;

            lock (this)
            {
                if (_sequenceNumber >= _sendHighwater)
                {
                    return(TdsEnums.SNI_QUEUE_FULL);
                }

                encapsulatedPacket = GetSMUXEncapsulatedPacket(packet);

                if (callback != null)
                {
                    encapsulatedPacket.SetCompletionCallback(callback);
                }
                else
                {
                    encapsulatedPacket.SetCompletionCallback(HandleSendComplete);
                }

                return(_connection.SendAsync(encapsulatedPacket, callback));
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Send packet asynchronously
        /// </summary>
        /// <param name="packet">SNI packet</param>
        /// <param name="callback">Completion callback</param>
        /// <returns>True if completed successfully, otherwise false</returns>
        private bool InternalSendAsync(SNIPacket packet, SNIAsyncCallback callback)
        {
            SNIPacket encapsulatedPacket = null;

            lock (this)
            {
                if (_sequenceNumber >= _sendHighwater)
                {
                    return(false);
                }

                encapsulatedPacket = GetSMUXEncapsulatedPacket(packet);

                if (callback != null)
                {
                    encapsulatedPacket.SetCompletionCallback(callback);
                }
                else
                {
                    encapsulatedPacket.SetCompletionCallback(HandleSendComplete);
                }

                SNIError sniError;
                bool     completedSync = _connection.SendAsync(encapsulatedPacket, callback, true, out sniError);
                Debug.Assert(!completedSync && (sniError == null), "Should not have completed synchronously");
                return(true);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Send packet asynchronously
        /// </summary>
        /// <param name="packet">SNI packet</param>
        /// <param name="callback">Completion callback</param>
        /// <returns>SNI error code</returns>
        private uint InternalSendAsync(SNIPacket packet, SNIAsyncCallback callback)
        {
            Debug.Assert(packet.ReservedHeaderSize == SNISMUXHeader.HEADER_LENGTH, "mars handle attempting to send muxed packet without mux reservation in InternalSendAsync");
            lock (this)
            {
                if (_sequenceNumber >= _sendHighwater)
                {
                    return(TdsEnums.SNI_QUEUE_FULL);
                }

                SNIPacket muxedPacket = SetPacketSMUXHeader(packet);
                muxedPacket.SetCompletionCallback(callback ?? HandleSendComplete);
                return(_connection.SendAsync(muxedPacket, callback));
            }
        }