LEADTOOLS Medical (Leadtools.Dicom assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.29
DicomNetIpTypeFlags Enumeration
See Also  
Leadtools.Dicom Namespace : DicomNetIpTypeFlags Enumeration



Specifies which Internet Protocol Version will be supported with DICOM Communication.

Syntax

Visual Basic (Declaration) 
<FlagsAttribute()>
Public Enum DicomNetIpTypeFlags 
   Inherits System.Enum
   Implements IComparableIConvertibleIFormattable 
Visual Basic (Usage)Copy Code
Dim instance As DicomNetIpTypeFlags
C# 
[FlagsAttribute()]
public enum DicomNetIpTypeFlags : System.Enum, IComparableIConvertibleIFormattable  
C++/CLI 
[FlagsAttribute()]
public enum class DicomNetIpTypeFlags : public System.Enum, IComparableIConvertibleIFormattable  

Members

MemberDescription
Ipv4Only support IPv4 addresses.
Ipv4OrIpv6Support both IPv4 and IPv6 addresses.
Ipv6Only support IPv6 addresses.
NoneNone.

Example

Visual BasicCopy Code
'''
<StructLayout(LayoutKind.Sequential)> _
Public Structure MYMSG
    Public hwnd As IntPtr
    Public message As UInteger
    Public wParam As IntPtr
    Public lParam As IntPtr
    Public time As UInteger
    Public p As System.Drawing.Point
End Structure
Public Enum MyWaitReturn
    Complete
    Timeout
End Enum
Friend Class MyUtils
    <DllImport("user32.dll")> _
    Shared Function PeekMessage(<System.Runtime.InteropServices.Out()> ByRef lpMsg As MYMSG, ByVal hWnd As IntPtr, ByVal wMsgFilterMin As UInteger, ByVal wMsgFilterMax As UInteger, ByVal wRemoveMsg As UInteger) As <MarshalAs(UnmanagedType.Bool)> Boolean
    End Function

    <DllImport("user32.dll")> _
    Shared Function TranslateMessage(ByRef lpMsg As MYMSG) As Boolean
    End Function
    <DllImport("user32.dll")> _
    Shared Function DispatchMessage(ByRef lpmsg As MYMSG) As IntPtr
    End Function

    Private Const PM_REMOVE As UInteger = 1

    Public Shared Function WaitForComplete(ByVal mill As Double, ByVal wh As WaitHandle) As MyWaitReturn
        Dim goal As New TimeSpan(DateTime.Now.AddMilliseconds(mill).Ticks)

        Do
            Dim msg As New MYMSG()

            If PeekMessage(msg, IntPtr.Zero, 0, 0, PM_REMOVE) Then
                TranslateMessage(msg)
                DispatchMessage(msg)
            End If

            If wh.WaitOne(New TimeSpan(0, 0, 0), False) Then
                Return MyWaitReturn.Complete
            End If

            If goal.CompareTo(New TimeSpan(DateTime.Now.Ticks)) < 0 Then
                Return MyWaitReturn.Timeout
            End If

        Loop While True
    End Function
End Class

Friend Class MyClient
    Inherits DicomNet
    Private _LastError As DicomExceptionCode = DicomExceptionCode.Success
    Private waitEvent As New AutoResetEvent(False)

    Public Sub New()
        MyBase.New(Nothing, DicomNetSecurityeMode.None)
    End Sub

    Public ReadOnly Property LastError() As DicomExceptionCode
        Get
            Return _LastError
        End Get
    End Property

    Public Function Wait() As Boolean
        _LastError = DicomExceptionCode.Success
        Dim ret As MyWaitReturn = MyUtils.WaitForComplete((5 * 60) * 1000, waitEvent)

        Return (ret = MyWaitReturn.Complete)
    End Function

    Protected Overrides Sub OnConnect(ByVal [error] As DicomExceptionCode)
        Debug.WriteLine("Client: Receive OnConnect")
        _LastError = [error]
        waitEvent.Set()
    End Sub

    Protected Overrides Sub OnReceiveReleaseResponse()
        Debug.WriteLine("Client: Receive OnReceiveReleaseResponse")
        waitEvent.Set()
    End Sub
End Class

Friend Class MyServerConnection
    Inherits DicomNet
    Public Fail As Boolean = False

    Public Sub New()
        MyBase.New(Nothing, DicomNetSecurityeMode.None)
    End Sub

    Protected Overrides Sub OnReceiveReleaseRequest()
        Debug.WriteLine("Server: Receive OnReceiveReleaseRequest")
        SendReleaseResponse()
    End Sub
End Class

Friend Class MyServer
    Inherits DicomNet
    Private client As MyServerConnection

    Public Sub New()
        MyBase.New(Nothing, DicomNetSecurityeMode.None)
    End Sub

    Public Property Fail() As Boolean
        Get
            If client Is Nothing Then
                Return False
            End If

            Return client.Fail
        End Get

        Set(ByVal value As Boolean)
            If client IsNot Nothing Then
                client.Fail = value
            End If
        End Set
    End Property

    Protected Overrides Sub OnAccept(ByVal [error] As DicomExceptionCode)
        Debug.WriteLine("Server: Receive OnAccept")
        client = New MyServerConnection()

        Accept(client)
        Dim s As String = String.Format(Constants.vbTab & "PeerAddress: {0}" & Constants.vbLf + Constants.vbTab & "PeerPort: {1}", client.PeerAddress, client.PeerPort)
        Debug.WriteLine(s)
    End Sub
End Class

Public Sub DicomDataSet_ListenExample()
    DicomEngine.Startup()
    DicomNet.Startup()

    Using server As New MyServer()
        Using client As New MyClient()
            ' The * below means to listen on all local IP addresses.
            ' The DicomNetIpTypeFlags.Ipv4OrIpv6 means to listen on both IPv4 and IPv6 addresses
            server.Listen("*", 104, 1, DicomNetIpTypeFlags.Ipv4OrIpv6) ' start server

            ' The client is connecting to the server using an IPv6 address.
            ' Note that "::1" is the IPv6 loopback address
            ' Alternatively, you can get type ipconfig from a command box on the local computer to get the local IPv6 address.
            ' The following is an example of a local IPv6 address:
            '    "fe80::18bd:81f:6b02:759f"
            client.Connect(Nothing, 1000, "::1", 104, DicomNetIpTypeFlags.Ipv6) ' connect to server

            If (Not client.Wait()) Then ' wait for connection to finish
                Debug.Fail("Connection timed out")
            End If
            Debug.Assert(client.LastError = DicomExceptionCode.Success, "Connection failed")
            Debug.Assert(client.IsConnected(), "Client not connected")

            client.SendReleaseRequest()
            If (Not client.Wait()) Then ' wait for connection to finish
                Debug.Fail("Timed Out")
            End If

            ' Close the connections
            client.CloseForced(True)
        End Using
        server.CloseForced(True)
    End Using

    DicomEngine.Shutdown()
    DicomNet.Shutdown()
End Sub
C#Copy Code
///
[StructLayout(LayoutKind.Sequential)]
public struct MYMSG
{
   public IntPtr hwnd;
   public uint message;
   public IntPtr wParam;
   public IntPtr lParam;
   public uint time;
   public System.Drawing.Point p;
}
public enum MyWaitReturn
{
   Complete,
   Timeout,
}
class MyUtils
{
   [DllImport("user32.dll")]
   [return: MarshalAs(UnmanagedType.Bool)]
   static extern bool PeekMessage(out MYMSG lpMsg, IntPtr hWnd,
                                  uint wMsgFilterMin, uint wMsgFilterMax,
                                  uint wRemoveMsg);

   [DllImport("user32.dll")]
   static extern bool TranslateMessage([In] ref MYMSG lpMsg);
   [DllImport("user32.dll")]
   static extern IntPtr DispatchMessage([In] ref MYMSG lpmsg);

   const uint PM_REMOVE = 1;

   public static MyWaitReturn WaitForComplete(double mill, WaitHandle wh)
   {
      TimeSpan goal = new TimeSpan(DateTime.Now.AddMilliseconds(mill).Ticks);

      do
      {
         MYMSG msg = new MYMSG();

         if (PeekMessage(out msg, IntPtr.Zero, 0, 0, PM_REMOVE))
         {
            TranslateMessage(ref msg);
            DispatchMessage(ref msg);
         }

         if (wh.WaitOne(new TimeSpan(0, 0, 0), false))
         {
            return MyWaitReturn.Complete;
         }

         if (goal.CompareTo(new TimeSpan(DateTime.Now.Ticks)) < 0)
         {
            return MyWaitReturn.Timeout;
         }

      } while (true);
   }
}

class MyClient : DicomNet
{
   DicomExceptionCode _LastError = DicomExceptionCode.Success;
   AutoResetEvent waitEvent = new AutoResetEvent(false);

   public MyClient()
      : base(null, DicomNetSecurityeMode.None)
   {
   }

   public DicomExceptionCode LastError
   {
      get
      {
         return _LastError;
      }
   }

   public bool Wait()
   {
      _LastError = DicomExceptionCode.Success;
      MyWaitReturn ret = MyUtils.WaitForComplete((5 * 60) * 1000, waitEvent);

      return (ret == MyWaitReturn.Complete);
   }

   protected override void OnConnect(DicomExceptionCode error)
   {
      Debug.WriteLine("Client: Receive OnConnect");
      _LastError = error;
      waitEvent.Set();
   }

   protected override void OnReceiveReleaseResponse()
   {
      Debug.WriteLine("Client: Receive OnReceiveReleaseResponse");
      waitEvent.Set();
   }
}

class MyServerConnection : DicomNet
{
   public bool Fail = false;

   public MyServerConnection()
      : base(null, DicomNetSecurityeMode.None)
   {
   }

   protected override void OnReceiveReleaseRequest()
   {
      Debug.WriteLine("Server: Receive OnReceiveReleaseRequest");
      SendReleaseResponse();
   }
};

class MyServer : DicomNet
{
   MyServerConnection client;

   public MyServer()
      : base(null, DicomNetSecurityeMode.None)
   {
   }

   public bool Fail
   {
      get
      {
         if (client == null)
            return false;

         return client.Fail;
      }

      set
      {
         if (client != null)
         {
            client.Fail = value;
         }
      }
   }

   protected override void OnAccept(DicomExceptionCode error)
   {
      Debug.WriteLine("Server: Receive OnAccept");
      client = new MyServerConnection();

      Accept(client);
      string s = string.Format("\tPeerAddress: {0}\n\tPeerPort: {1}", client.PeerAddress, client.PeerPort);
      Debug.WriteLine(s);
   }
}

public void DicomDataSet_ListenExample()
{
   DicomEngine.Startup();
   DicomNet.Startup();

   using (MyServer server = new MyServer())
   {
      using (MyClient client = new MyClient())
      {
         // The * below means to listen on all local IP addresses.
         // The DicomNetIpTypeFlags.Ipv4OrIpv6 means to listen on both IPv4 and IPv6 addresses
         server.Listen("*", 104, 1, DicomNetIpTypeFlags.Ipv4OrIpv6); // start server 

         // The client is connecting to the server using an IPv6 address.
         // Note that "::1" is the IPv6 loopback address
         // Alternatively, you can get type ipconfig from a command box on the local computer to get the local IPv6 address.
         // The following is an example of a local IPv6 address:
         //    "fe80::18bd:81f:6b02:759f"
         client.Connect(null, 1000, "::1", 104, DicomNetIpTypeFlags.Ipv6); // connect to server 

         if (!client.Wait()) // wait for connection to finish 
         {
            Debug.Fail("Connection timed out");
         }
         Debug.Assert(client.LastError == DicomExceptionCode.Success, "Connection failed");
         Debug.Assert(client.IsConnected(), "Client not connected");

         client.SendReleaseRequest();
         if (!client.Wait()) // wait for connection to finish 
         {
            Debug.Fail("Timed Out");
         }

         // Close the connections
         client.CloseForced(true);
      }
      server.CloseForced(true);
   }

   DicomEngine.Shutdown();
   DicomNet.Shutdown();
}
SilverlightCSharpCopy Code
SilverlightVBCopy Code

Remarks

This enum is used with DicomNet.Listen and DicomNet.Connect to specify the version of the Internet Protocol that will be used.

Inheritance Hierarchy

System.Object
   System.ValueType
      System.Enum
         Leadtools.Dicom.DicomNetIpTypeFlags

Requirements

Target Platforms: Silverlight 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7, MAC OS/X (Intel Only)

See Also

Leadtools.Dicom requires a Medical toolkit server license and unlock key. For more information, refer to: Imaging Pro/Document/Medical Features