internal override void Dispose() { SNIPacket packetHandle = _sniPacket; SNIHandle sessionHandle = _sessionHandle; SNIPacket asyncAttnPacket = _sniAsyncAttnPacket; _sniPacket = null; _sessionHandle = null; _sniAsyncAttnPacket = null; _marsConnection = null; DisposeCounters(); if (null != sessionHandle || null != packetHandle) { packetHandle?.Dispose(); asyncAttnPacket?.Dispose(); if (sessionHandle != null) { sessionHandle.Dispose(); DecrementPendingCallbacks(true); // Will dispose of GC handle. } } DisposePacketCache(); }
/// <summary> /// Constructor /// </summary> /// <param name="connection">MARS connection</param> /// <param name="sessionId">MARS session ID</param> /// <param name="callbackObject">Callback object</param> /// <param name="async">true if connection is asynchronous</param> public SNIMarsHandle(SNIMarsConnection connection, ushort sessionId, TdsParserStateObject callbackObject, out SNIError sniError) { _sessionId = sessionId; _connection = connection; _callbackObject = callbackObject; sniError = SendControlPacket(SNISMUXFlags.SMUX_SYN, true); }
/// <summary> /// Constructor /// </summary> /// <param name="connection">MARS connection</param> /// <param name="sessionId">MARS session ID</param> /// <param name="callbackObject">Callback object</param> /// <param name="async">true if connection is asynchronous</param> public SNIMarsHandle(SNIMarsConnection connection, ushort sessionId, object callbackObject, bool async) { _sessionId = sessionId; _connection = connection; _callbackObject = callbackObject; SendControlPacket(SNISMUXFlags.SMUX_SYN); _status = TdsEnums.SNI_SUCCESS; }
/// <summary> /// Enables MARS for a TdsParserStateObject and returns its new handle. /// </summary> public static SNIMarsHandle EnableMars(TdsParserStateObject stateObject, out SNIError sniError) { Debug.Assert(!(stateObject.Handle is SNIMarsHandle), "Cannot enable MARS on a SNIMarsHandle"); SNIMarsConnection marsConnection = new SNIMarsConnection(stateObject.Handle); marsConnection.StartReceive(); return(marsConnection.CreateSession(stateObject, out sniError)); }
internal override uint EnableMars(ref uint info) { _marsConnection = new SNIMarsConnection(Handle); if (_marsConnection.StartReceive() == TdsEnums.SNI_SUCCESS_IO_PENDING) { return(TdsEnums.SNI_SUCCESS); } return(TdsEnums.SNI_ERROR); }
/// <summary> /// Create a MARS connection /// </summary> /// <param name="lowerHandle">Lower SNI handle</param> /// <returns>SNI error code</returns> public uint CreateMarsConnection(SNIHandle lowerHandle) { SNIMarsConnection connection = new SNIMarsConnection(lowerHandle); if (_connections.TryAdd(lowerHandle, connection)) { return connection.StartReceive(); } else { return TdsEnums.SNI_ERROR; } }
/// <summary> /// Create a MARS connection /// </summary> /// <param name="lowerHandle">Lower SNI handle</param> /// <returns>SNI error code</returns> public uint CreateMarsConnection(SNIHandle lowerHandle) { SNIMarsConnection connection = new SNIMarsConnection(lowerHandle); if (_connections.TryAdd(lowerHandle, connection)) { return(connection.StartReceive()); } else { return(TdsEnums.SNI_ERROR); } }
internal override void Dispose() { SNIHandle sessionHandle = _sessionHandle; _sessionHandle = null; _marsConnection = null; DisposeCounters(); if (sessionHandle != null) { sessionHandle.Dispose(); DecrementPendingCallbacks(true); // Will dispose of GC handle. } DisposePacketCache(); }
/// <summary> /// Create MARS handle /// </summary> /// <param name="callbackObject">Asynchronous I/O callback object</param> /// <param name="physicalConnection">SNI connection handle</param> /// <param name="defaultBufferSize">Default buffer size</param> /// <param name="async">Asynchronous connection</param> /// <returns>SNI error status</returns> public SNIHandle CreateMarsHandle(object callbackObject, SNIHandle physicalConnection, int defaultBufferSize, bool async) { SNIMarsConnection connection = SNIMarsManager.Singleton.GetConnection(physicalConnection); return(connection.CreateSession(callbackObject, async)); }