//------------------------------------------------------------------------------
// <auto-generated />
//
// This file was automatically generated by SWIG (http://www.swig.org).
// Version 3.0.12
//
// Do not make changes to this file unless you know what you are doing--modify
// the SWIG interface file instead.
//------------------------------------------------------------------------------
namespace ons {
public class ONSFactoryAPI : global::System.IDisposable {
  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
  protected bool swigCMemOwn;
  internal ONSFactoryAPI(global::System.IntPtr cPtr, bool cMemoryOwn) {
    swigCMemOwn = cMemoryOwn;
    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
  }
  internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ONSFactoryAPI obj) {
    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
  }
  ~ONSFactoryAPI() {
    Dispose();
  }
  public virtual void Dispose() {
    lock(this) {
      if (swigCPtr.Handle != global::System.IntPtr.Zero) {
        if (swigCMemOwn) {
          swigCMemOwn = false;
          ONSClient4CPPPINVOKE.delete_ONSFactoryAPI(swigCPtr);
        }
        swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
      }
      global::System.GC.SuppressFinalize(this);
    }
  }
  public ONSFactoryAPI() : this(ONSClient4CPPPINVOKE.new_ONSFactoryAPI(), true) {
  }
  public virtual Producer createProducer(ONSFactoryProperty factoryProperty) {
    global::System.IntPtr cPtr = ONSClient4CPPPINVOKE.ONSFactoryAPI_createProducer(swigCPtr, ONSFactoryProperty.getCPtr(factoryProperty));
    Producer ret = (cPtr == global::System.IntPtr.Zero) ? null : new Producer(cPtr, false);
    if (ONSClient4CPPPINVOKE.SWIGPendingException.Pending) throw ONSClient4CPPPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }
  public virtual OrderProducer createOrderProducer(ONSFactoryProperty factoryProperty) {
    global::System.IntPtr cPtr = ONSClient4CPPPINVOKE.ONSFactoryAPI_createOrderProducer(swigCPtr, ONSFactoryProperty.getCPtr(factoryProperty));
    OrderProducer ret = (cPtr == global::System.IntPtr.Zero) ? null : new OrderProducer(cPtr, false);
    if (ONSClient4CPPPINVOKE.SWIGPendingException.Pending) throw ONSClient4CPPPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }
  public virtual OrderConsumer createOrderConsumer(ONSFactoryProperty factoryProperty) {
    global::System.IntPtr cPtr = ONSClient4CPPPINVOKE.ONSFactoryAPI_createOrderConsumer(swigCPtr, ONSFactoryProperty.getCPtr(factoryProperty));
    OrderConsumer ret = (cPtr == global::System.IntPtr.Zero) ? null : new OrderConsumer(cPtr, false);
    if (ONSClient4CPPPINVOKE.SWIGPendingException.Pending) throw ONSClient4CPPPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }
  public virtual TransactionProducer createTransactionProducer(ONSFactoryProperty factoryProperty, LocalTransactionChecker checker) {
    global::System.IntPtr cPtr = ONSClient4CPPPINVOKE.ONSFactoryAPI_createTransactionProducer(swigCPtr, ONSFactoryProperty.getCPtr(factoryProperty), LocalTransactionChecker.getCPtr(checker));
    TransactionProducer ret = (cPtr == global::System.IntPtr.Zero) ? null : new TransactionProducer(cPtr, false);
    if (ONSClient4CPPPINVOKE.SWIGPendingException.Pending) throw ONSClient4CPPPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }
  public virtual PullConsumer createPullConsumer(ONSFactoryProperty factoryProperty) {
    global::System.IntPtr cPtr = ONSClient4CPPPINVOKE.ONSFactoryAPI_createPullConsumer(swigCPtr, ONSFactoryProperty.getCPtr(factoryProperty));
    PullConsumer ret = (cPtr == global::System.IntPtr.Zero) ? null : new PullConsumer(cPtr, false);
    if (ONSClient4CPPPINVOKE.SWIGPendingException.Pending) throw ONSClient4CPPPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }
  public virtual PushConsumer createPushConsumer(ONSFactoryProperty factoryProperty) {
    global::System.IntPtr cPtr = ONSClient4CPPPINVOKE.ONSFactoryAPI_createPushConsumer(swigCPtr, ONSFactoryProperty.getCPtr(factoryProperty));
    PushConsumer ret = (cPtr == global::System.IntPtr.Zero) ? null : new PushConsumer(cPtr, false);
    if (ONSClient4CPPPINVOKE.SWIGPendingException.Pending) throw ONSClient4CPPPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }
}
}