/* Copyright 2018-present MongoDB Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Bson;
using MongoDB.Driver.Core.Clusters;
using MongoDB.Driver.Core.Misc;
using MongoDB.Driver.Core.Operations;
namespace MongoDB.Driver
{
///
/// Extension methods on IMongoClient.
///
public static class IMongoClientExtensions
{
///
/// Watches changes on all collections in all databases.
///
/// The client.
/// The options.
/// The cancellation token.
///
/// A change stream.
///
public static IAsyncCursor> Watch(
this IMongoClient client,
ChangeStreamOptions options = null,
CancellationToken cancellationToken = default(CancellationToken))
{
Ensure.IsNotNull(client, nameof(client));
var emptyPipeline = new EmptyPipelineDefinition>();
return client.Watch(emptyPipeline, options, cancellationToken);
}
///
/// Watches changes on all collections in all databases.
///
/// The client.
/// The session.
/// The options.
/// The cancellation token.
///
/// A change stream.
///
public static IAsyncCursor> Watch(
this IMongoClient client,
IClientSessionHandle session,
ChangeStreamOptions options = null,
CancellationToken cancellationToken = default(CancellationToken))
{
Ensure.IsNotNull(client, nameof(client));
Ensure.IsNotNull(session, nameof(session));
var emptyPipeline = new EmptyPipelineDefinition>();
return client.Watch(session, emptyPipeline, options, cancellationToken);
}
///
/// Watches changes on all collections in all databases.
///
/// The client.
/// The options.
/// The cancellation token.
///
/// A change stream.
///
public static Task>> WatchAsync(
this IMongoClient client,
ChangeStreamOptions options = null,
CancellationToken cancellationToken = default(CancellationToken))
{
Ensure.IsNotNull(client, nameof(client));
var emptyPipeline = new EmptyPipelineDefinition>();
return client.WatchAsync(emptyPipeline, options, cancellationToken);
}
///
/// Watches changes on all collections in all databases.
///
/// The client.
/// The session.
/// The options.
/// The cancellation token.
///
/// A change stream.
///
public static Task>> WatchAsync(
this IMongoClient client,
IClientSessionHandle session,
ChangeStreamOptions options = null,
CancellationToken cancellationToken = default(CancellationToken))
{
Ensure.IsNotNull(client, nameof(client));
Ensure.IsNotNull(session, nameof(session));
var emptyPipeline = new EmptyPipelineDefinition>();
return client.WatchAsync(session, emptyPipeline, options, cancellationToken);
}
// internal static methods
internal static IClusterInternal GetClusterInternal(this IMongoClient client) => (IClusterInternal)client.Cluster;
}
}