LAUREL BRIDGE

LaurelBridge.DCF.Examples.StoreClient Namespace

DICOM Connectivity Framework V3.4
The StoreClient example demonstrates how to use the DCF to construct and use the high level store SCU class LaurelBridge.DCF.Dicom.Store.StoreClient.
Classes

  ClassDescription
Public classOptions
Command line options class for parsing user options for StoreClient.
Public classProgram
Basic store service class user example which should be run with StoreSCP.
Examples

StoreClient Sample Code
public class Program : IStoreClientListener
{
    private static readonly ILogger Logger = LogManager.GetCurrentClassLogger();
    private readonly Options _options;

    /// <summary>
    /// Main entry point for StoreClient.
    /// </summary>
    /// <param name="args">Program arguments.</param>
    [STAThread]
    public static void Main(string[] args)
    {
        try
        {
            Options options;
            if (!Options.TryParse(args, out options))
                return;
            new Program(options);
        }
        catch (Exception e)
        {
            Console.WriteLine("Error during execution: {0}", e);
            Environment.ExitCode = 1;
        }
        finally
        {
            if (System.Diagnostics.Debugger.IsAttached)
            {
                Console.Write("Press any key to continue . . . ");
                Console.ReadKey();
            }
        }
    }

    /// <summary>
    /// The class submits a store job.
    /// </summary>
    /// <param name="options">Parsed command line options class.</param>
    public Program(Options options)
    {
        _options = options;
        Dicom.Store.StoreClient client = new Dicom.Store.StoreClient();
        StoreJobStatus status = client.SubmitStoreJob(CreateStoreJobDescription(), this);
        Console.WriteLine("status for the job: " + Environment.NewLine + status);
    }

    /// <summary>
    /// Make a StoreJobDescriptions.  Multiple instances of datasets may be added to the job.
    /// </summary>
    /// <returns>The StoreJobDescription.</returns>
    private StoreJobDescription CreateStoreJobDescription()
    {
        StoreJobDescription sjd = new StoreJobDescription();
        sjd.CalledAETitle = _options.CalledAETitle;
        sjd.CallingAETitle = _options.CallingAETitle;
        sjd.CalledHost = _options.RemoteHost;
        sjd.CalledPort = _options.RemotePort.ToString();
        sjd.AddInstance(new DicomInstanceInfo(_options.InputPath));
        sjd.SessionSettings.SendDimseTimeoutSeconds = 60;
        sjd.SessionSettings.ReceiveDimseTimeoutSeconds = 60;

        return sjd;
    }

    /// <summary>
    /// Implementation of StoreClientListener interface.
    /// </summary>
    /// <param name="status">The status for an store job instance.</param>
    public virtual void StoreObjectComplete(StoreJobInstanceStatus status)
    {
        int base10DimseStatus = status.DimseStatusCode;
        string hexDimseStatus = base10DimseStatus.ToString("X");
        string stringDimseStatus = StoreDimseStatus.GetStatusAsString(status.DimseStatusCode);
        Logger.InfoFormat("Received storeObjectComplete event status({0}) (0x{1}), {2}", base10DimseStatus, hexDimseStatus, stringDimseStatus);
    }

    /// <summary>
    /// Implementation of StoreClientListener interface.
    /// </summary>
    /// <param name="status">The status for the store job.</param>
    public virtual void StoreJobComplete(StoreJobStatus status)
    {
        Logger.Info("Received storeJobComplete event "
                    + Environment.NewLine
                    + "status = "
                    + JobStatus.GetStatusAsString(status.Status)
                    + Environment.NewLine
                    + "statusInfo = "
                    + JobStatusInfo.GetStatusAsString(status.StatusInfo)
        );
    }
}