Leadtools.Jpip.Client Requires JPIP module product license | Send comments on this topic. | Back to Introduction - All Topics | Help Version 16.5.9.25
JpipClient Class
See Also  Members   Example 
Leadtools.Jpip.Client Namespace : JpipClient Class



A JPIP client class which sends server requests and receives responses.

Syntax

Visual Basic (Declaration) 
Public Class JpipClient 
Visual Basic (Usage)Copy Code
Dim instance As JpipClient
C# 
public class JpipClient 
C++/CLI 
public ref class JpipClient 

Example

This example demonstrates using Leadtools.Jpip.Client to connect to a JPIP server.

Visual BasicCopy Code
Private Const SERVER_NAME As String = "LEAD JPIP Server - Test Server"
Private Const ENUMERATION_SERVER_PORT As Integer = 109
Private Const JPIP_SERVER_PORT As Integer = 108
  Private Const LOCAL_IP_ADDRESS As String = "127.0.0.1"
  Private CLIENT_CACHE_DIRECTORY As String = LeadtoolsExamples.Common.ImagesPath.Path + "jpeg2000"
  Private SERVER_CACHE_DIRECTORY As String = LeadtoolsExamples.Common.ImagesPath.Path + "jpeg2000"
  Private SERVER_IMAGES_FOLDER As String = LeadtoolsExamples.Common.ImagesPath.Path + "jpeg2000"
Private Const IMAGE_FILE_EXTENSIONS As String = "*.j2k;*.jp2;*.jpx"
  Private CLIENT_SAVED_FILE_NAME As String = LeadtoolsExamples.Common.ImagesPath.Path + "zzzzzzz.bmp"
Private _jpipServer As JpipServer
Private _imageFileExtensions As List(Of String)
Private _listener As HttpListener
Public _serverImagesList As List(Of String) = New List(Of String)()
Public Sub New()
  Leadtools.Examples.Support.Unlock()
   _imageFileExtensions = New List(Of String)()
   _jpipServer = New JpipServer()
End Sub

Public Sub ClientRequestReceived(ByVal ar As IAsyncResult)
   Dim context As HttpListenerContext


   If Nothing Is _listener OrElse (Not _listener.IsListening) Then
      Return
   End If

   Try
      context = _listener.EndGetContext(ar)
   Catch
      Return
   End Try

   Try

      Dim formattedImages As String
      Dim sendBuffer As Byte()

      _listener.BeginGetContext(AddressOf ClientRequestReceived, Nothing)

      formattedImages = GetFormattedServerImagesString()

      sendBuffer = Encoding.ASCII.GetBytes(formattedImages)

      context.Response.OutputStream.Write(sendBuffer, 0, sendBuffer.Length)

      context.Response.Close()
   Catch e1 As Exception
      If Not Nothing Is context Then
         context.Response.Close()
      End If
   End Try
End Sub

Public Function GetFormattedServerImagesString() As String
   Dim serverImageFile As String
   Dim formattedServerImagesString As String = String.Empty
   Dim searchImages As List(Of String) = New List(Of String)()
   Dim serverImages As List(Of String) = New List(Of String)()
   For Each extension As String In _imageFileExtensions
      searchImages.AddRange(Directory.GetFiles(_jpipServer.Configuration.ImagesFolder, extension, SearchOption.AllDirectories))
   Next extension
   For Each file As String In searchImages
      serverImageFile = file.Replace(_jpipServer.Configuration.ImagesFolder, String.Empty)
      serverImageFile = serverImageFile.TrimStart("\"c)
      formattedServerImagesString &= serverImageFile & ";"
   Next file
   searchImages.Clear()
   For Each aliasFolder As KeyValuePair(Of String, String) In _jpipServer.Configuration.AliasFolders
      If (Not Directory.Exists(aliasFolder.Value)) Then
         Continue For
      End If
      For Each extension As String In _imageFileExtensions
         searchImages.AddRange(Directory.GetFiles(aliasFolder.Value, extension, SearchOption.AllDirectories))
      Next extension
      For Each imageFile As String In searchImages
         serverImageFile = imageFile.Replace(aliasFolder.Value, aliasFolder.Key)
         serverImageFile = serverImageFile.TrimStart("\"c)
         formattedServerImagesString &= serverImageFile & ";"
      Next imageFile
      searchImages.Clear()
   Next aliasFolder
   Return formattedServerImagesString.TrimEnd(";"c)
End Function

Public Sub StartFileEnumerationServer()
   Try
      _imageFileExtensions.Clear()
      _imageFileExtensions.AddRange(IMAGE_FILE_EXTENSIONS.Split(";"c))

      If Not _listener Is Nothing Then 'if _listner is already created, then do not create again
         Return
      End If
      _listener = New HttpListener()
      _listener.Prefixes.Add(String.Format("http://{0}:{1}/", LOCAL_IP_ADDRESS, ENUMERATION_SERVER_PORT))

      _listener.Start()
      _listener.BeginGetContext(AddressOf ClientRequestReceived, Nothing)
   Catch ex As Exception
      Debug.Fail("Error in server enumeration: " & Constants.vbLf + ex.Message)
   End Try
End Sub


Public Sub StopFileEnumerationServer()
   Try
      If Not _listener Is Nothing Then
         _listener.Stop()
      End If
   Catch ex As Exception
      Debug.Fail("Error in server enumeration: " & Constants.vbLf + ex.Message)
   End Try
End Sub

Public Sub GetEnumeratedFiles(ByVal filename As String)
   Dim request As HttpWebRequest = CType(HttpWebRequest.Create(String.Format("http://{0}:{1}/", LOCAL_IP_ADDRESS, ENUMERATION_SERVER_PORT)), HttpWebRequest)

   If Not Nothing Is request.Proxy Then
      request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials
   End If

   request.UseDefaultCredentials = True


   Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)

   Dim receivedStream As System.IO.Stream = response.GetResponseStream()
   Dim reader As System.IO.StreamReader = New System.IO.StreamReader(receivedStream)

   Dim read As Char() = New Char(255) {}
   ' Reads 256 characters at a time.
   Dim count As Integer = reader.Read(read, 0, 256)
   Dim imageNames As String = ""

   Do While count > 0
      ' Dumps the 256 characters on a string and displays the string to the console.
      Dim temp As String = New String(read, 0, count)

      imageNames &= temp

      count = reader.Read(read, 0, 256)
   Loop

   ' Releases the resources of the response.
   response.Close()
   ' Releases the resources of the Stream.
   reader.Close()

   Dim imageFileNames As String() = imageNames.Split(";"c)
   Dim counter As Integer = 0
   For Each image As String In imageFileNames
      counter += 1
      Debug.Assert(image.Trim().Length > 0, "There is no image to enumerate")
      Debug.WriteLine("Image " & counter & ": " & image)
      _serverImagesList.Add(image)
   Next image

   File.WriteAllLines(filename, _serverImagesList.ToArray())
End Sub

Public Sub StartJpipServer()
   If (Not _jpipServer.IsRunning) Then
      'Server Settings
      _jpipServer.Configuration.ServerName = SERVER_NAME
      _jpipServer.Configuration.IPAddress = LOCAL_IP_ADDRESS
      _jpipServer.Configuration.Port = JPIP_SERVER_PORT
      _jpipServer.Configuration.ImagesFolder = SERVER_IMAGES_FOLDER
      _jpipServer.Configuration.CacheFolder = SERVER_CACHE_DIRECTORY
      _jpipServer.Configuration.MaxServerBandwidth = _jpipServer.Configuration.MaxServerBandwidth
      _jpipServer.Configuration.CacheSize = 200
      _jpipServer.Configuration.DivideSuperBoxes = True
      _jpipServer.Configuration.ChunkSize = 512
      _jpipServer.Configuration.MaxClientCount = 5
      _jpipServer.Configuration.ConnectionIdleTimeout = New TimeSpan(0, 0, 9100)
      _jpipServer.Configuration.MaxSessionLifetime = New TimeSpan(0, 0, 9900)
      _jpipServer.Configuration.MaxConnectionBandwidth = _jpipServer.Configuration.MaxConnectionBandwidth
      'Communication Settings
      _jpipServer.Configuration.MaxTransportConnections = 15
      _jpipServer.Configuration.HandshakeTimeout = New TimeSpan(0, 0, 9600)
      _jpipServer.Configuration.RequestTimeout = New TimeSpan(0, 0, 920)
      _jpipServer.Configuration.ChunkSize = 512
      'Images Settings
      _jpipServer.Configuration.ImageParsingTimeout = New TimeSpan(0, 0, 9180)
      _jpipServer.Configuration.PartitionBoxSize = 40
      _jpipServer.Configuration.DivideSuperBoxes = True
      'Logging Settings
      _jpipServer.Configuration.LogInformation = False
      _jpipServer.Configuration.LogWarnings = False
      _jpipServer.Configuration.LogDebug = False
      _jpipServer.Configuration.LogErrors = False
      'Start server and delegates
      _jpipServer.Start()
      Debug.Assert(_jpipServer.IsRunning, "Server did not start.")
   End If
End Sub

Public Sub StopJpipServer()
   If _jpipServer.IsRunning Then
      _jpipServer.Stop()
   End If
End Sub

Public Sub SetJpipViewer(ByVal viewer As JpipRasterImageViewer)
   ' Initialize JPIP viewer
   viewer.CacheDirectoryName = CLIENT_CACHE_DIRECTORY
   viewer.PortNumber = JPIP_SERVER_PORT
   viewer.IPAddress = LOCAL_IP_ADDRESS
   viewer.PacketSize = 16384
   viewer.RequestTimeout = New TimeSpan(0, 1, 0)
   viewer.ChannelType = JpipChannelTypes.HttpChannel
End Sub

Public Sub SaveJpipViewerImageToFile(ByVal viewer As JpipRasterImageViewer, ByVal fileName As String)
   RasterCodecs.Startup()
   Dim rc As RasterCodecs = New Leadtools.Codecs.RasterCodecs()
   rc.Save(viewer.Image, fileName, RasterImageFormat.Bmp, 24)
   RasterCodecs.Shutdown()
End Sub

Private Sub OnClientError(ByVal sender As Object, ByVal e As ErrorEventArgs)
   Debug.WriteLine(e.GetException().Message)
End Sub

Private Sub OnBytesLoaded(ByVal sender As Object, ByVal e As TotalBytesLoadedEventArgs)
   Debug.WriteLine(" Total Bytes: " & e.ByteCount.ToString())
End Sub

Private Sub FileOpened(ByVal sender As Object, ByVal e As EventArgs)

   Dim jpipViewer As JpipRasterImageViewer = DirectCast(sender, JpipRasterImageViewer)
   Dim deleteCacheFilePriorTo As DateTime = New DateTime(2008, 8, 8)

   Debug.WriteLine(Constants.vbLf & " FullImageSize: " & jpipViewer.FullImageSize.ToString())
   Debug.WriteLine(" NumberOfColorComponents: " & jpipViewer.NumberOfColorComponents.ToString())
   Debug.WriteLine(" NumberOfResolutions: " & jpipViewer.NumberOfResolutions.ToString())
   Debug.WriteLine(" InteractiveMode: " & jpipViewer.InteractiveMode.ToString())
   Debug.WriteLine(" PaintProperties: " & jpipViewer.PaintProperties.ToString())
   Debug.WriteLine(" Available Resolutions")
   Dim i As Integer = 0
   Do While i < jpipViewer.NumberOfResolutions
      Debug.WriteLine(" Resolution (" & i.ToString() & ") Size" & jpipViewer.GetResolutionSize(i).ToString())
       i += 1
   Loop
   Debug.WriteLine(Constants.vbLf & "Open Image")
   Debug.WriteLine(" CurrentImageSize: " & jpipViewer.CurrentImageSize.ToString())
   Debug.WriteLine(" ComponentIndex: " & jpipViewer.ComponentIndex.ToString())
   Debug.WriteLine(" CurrentResolutionIndex: " & jpipViewer.CurrentResolutionIndex.ToString())

   jpipViewer.ZoomIn()
   Debug.WriteLine(Constants.vbLf & " Zoomed in")
   Debug.WriteLine(" CurrentImageSize: " & jpipViewer.CurrentImageSize.ToString())
   Debug.WriteLine(" ComponentIndex: " & jpipViewer.ComponentIndex.ToString())
   Debug.WriteLine(" CurrentResolutionIndex: " & jpipViewer.CurrentResolutionIndex.ToString())

   jpipViewer.ZoomIn()
   Debug.WriteLine(Constants.vbLf & " Zoomed in")
   Debug.WriteLine(" CurrentImageSize: " & jpipViewer.CurrentImageSize.ToString())
   Debug.WriteLine(" ComponentIndex: " & jpipViewer.ComponentIndex.ToString())
   Debug.WriteLine(" CurrentResolutionIndex: " & jpipViewer.CurrentResolutionIndex.ToString())

   jpipViewer.ComponentIndex = 0
   Debug.WriteLine("Component Index value set to 1 ")
   Debug.WriteLine(" CurrentImageSize: " & jpipViewer.CurrentImageSize.ToString())
   Debug.WriteLine(" ComponentIndex: " & jpipViewer.ComponentIndex.ToString())
   Debug.WriteLine(" CurrentResolutionIndex: " & jpipViewer.CurrentResolutionIndex.ToString())

   jpipViewer.ZoomOut()
   Debug.WriteLine(Constants.vbLf & " ZoomOut ")
   Debug.WriteLine(" CurrentImageSize: " & jpipViewer.CurrentImageSize.ToString())
   Debug.WriteLine(" ComponentIndex: " & jpipViewer.ComponentIndex.ToString())
   Debug.WriteLine(" CurrentResolutionIndex: " & jpipViewer.CurrentResolutionIndex.ToString())

   jpipViewer.ComponentIndex = -1
   Debug.WriteLine("Component Index value set to 1 ")
   Debug.WriteLine(" CurrentImageSize: " & jpipViewer.CurrentImageSize.ToString())
   Debug.WriteLine(" ComponentIndex: " & jpipViewer.ComponentIndex.ToString())
   Debug.WriteLine(" CurrentResolutionIndex: " & jpipViewer.CurrentResolutionIndex.ToString())

   jpipViewer.Zoom(jpipViewer.GetResolutionSize(2))
   Debug.WriteLine(" Resolution size set to 2")
   Debug.WriteLine(" CurrentImageSize: " & jpipViewer.CurrentImageSize.ToString())
   Debug.WriteLine(" ComponentIndex: " & jpipViewer.ComponentIndex.ToString())
   Debug.WriteLine(" CurrentResolutionIndex: " & jpipViewer.CurrentResolutionIndex.ToString())
   SaveJpipViewerImageToFile(jpipViewer, CLIENT_SAVED_FILE_NAME)

   'Client side function to delete cached files of type LCCACHE File (Not LTCACHE File) prior to given date from CACHE_DIRECTORY
   Dim count As Integer = jpipViewer.DeleteCacheFiles(deleteCacheFilePriorTo)
   Debug.WriteLine(count.ToString() & " Cache File Deleted....")

   If jpipViewer.IsActive Then
      Debug.WriteLine(" JpipRasterImageViewer.IsActive Test ")
      Debug.WriteLine(" CurrentImageSize: " & jpipViewer.CurrentImageSize.ToString())
   End If

   jpipViewer.Close()

   If jpipViewer.IsActive Then
      Debug.WriteLine(" JpipRasterImageViewer.IsActive Test (this should not happen becaue no image is loaded at this point")
      Debug.WriteLine(" CurrentImageSize: " & jpipViewer.CurrentImageSize.ToString())
   End If

   'Server side
   StopJpipServer()
End Sub


Public Sub ClientExample()
   'Server side
   StartJpipServer()

   'Client requesting enumerated images from server
   StartFileEnumerationServer()
      GetEnumeratedFiles(LeadtoolsExamples.Common.ImagesPath.Path + "Client_Enumerated_Images.txt")
   StopFileEnumerationServer()

   'Client requests an image, copies to local file, then deletes cached files prior to given date from CACHE_DIRECTORY

   Dim jpipViewer As JpipRasterImageViewer = New JpipRasterImageViewer()
   SetJpipViewer(jpipViewer)
   AddHandler jpipViewer.StreamingError, AddressOf OnClientError
   AddHandler jpipViewer.TotalBytesLoaded, AddressOf OnBytesLoaded
   AddHandler jpipViewer.FileOpened, AddressOf FileOpened
   Debug.WriteLine(Constants.vbLf & " Open File: " & _serverImagesList(0))
   jpipViewer.Open(_serverImagesList(0))


End Sub
C#Copy Code
private const string SERVER_NAME = "LEAD JPIP Server - Test Server"; 
private const int ENUMERATION_SERVER_PORT = 109; 
private const int JPIP_SERVER_PORT = 107; 
private const string LOCAL_IP_ADDRESS = "127.0.0.1"; 
private string CLIENT_CACHE_DIRECTORY = LeadtoolsExamples.Common.ImagesPath.Path + "jpeg2000"; 
private string SERVER_CACHE_DIRECTORY = LeadtoolsExamples.Common.ImagesPath.Path + "jpeg2000"; 
private string SERVER_IMAGES_FOLDER = LeadtoolsExamples.Common.ImagesPath.Path + "jpeg2000"; 
private string IMAGE_FILE_EXTENSIONS = "*.j2k;*.jp2;*.jpx"; 
private string CLIENT_SAVED_FILE_NAME = LeadtoolsExamples.Common.ImagesPath.Path + "zzzzzzz.bmp"; 
private JpipServer _jpipServer; 
private List<string> _imageFileExtensions; 
private HttpListener _listener; 
public List<string> _serverImagesList = new List<string>(); 
public JpipClientExample() 

  Leadtools.Examples.Support.Unlock(); 
   _imageFileExtensions = new List<string>(); 
   _jpipServer = new JpipServer(); 

 
public void ClientRequestReceived(IAsyncResult ar) 

   HttpListenerContext context; 
 
 
   if (null == _listener || !_listener.IsListening) 
   { 
      return; 
   } 
 
   try 
   { 
      context = _listener.EndGetContext(ar); 
   } 
   catch 
   { 
      return; 
   } 
 
   try 
   { 
 
      string formattedImages; 
      byte[] sendBuffer; 
 
      _listener.BeginGetContext(ClientRequestReceived, null); 
 
      formattedImages = GetFormattedServerImagesString(); 
 
      sendBuffer = Encoding.ASCII.GetBytes(formattedImages); 
 
      context.Response.OutputStream.Write(sendBuffer, 0, sendBuffer.Length); 
 
      context.Response.Close(); 
   } 
   catch (Exception) 
   { 
      if (null != context) 
      { 
         context.Response.Close(); 
      } 
   } 

 
public string GetFormattedServerImagesString() 

   string serverImageFile; 
   string formattedServerImagesString = string.Empty; 
   List<string> searchImages = new List<string>(); 
   List<string> serverImages = new List<string>(); 
   foreach (string extension in _imageFileExtensions) 
   { 
      searchImages.AddRange(Directory.GetFiles(_jpipServer.Configuration.ImagesFolder, 
                                                                        extension, 
                                                                        SearchOption.AllDirectories)); 
   } 
   foreach (string file in searchImages) 
   { 
      serverImageFile = file.Replace(_jpipServer.Configuration.ImagesFolder, 
                                                  string.Empty); 
      serverImageFile = serverImageFile.TrimStart('\\'); 
      formattedServerImagesString += serverImageFile + ";"; 
   } 
   searchImages.Clear(); 
   foreach (KeyValuePair<string, string> aliasFolder in _jpipServer.Configuration.AliasFolders) 
   { 
      if (!Directory.Exists(aliasFolder.Value)) 
      { 
         continue; 
      } 
      foreach (string extension in _imageFileExtensions) 
      { 
         searchImages.AddRange(Directory.GetFiles(aliasFolder.Value, 
                                                          extension, 
                                                          SearchOption.AllDirectories)); 
      } 
      foreach (string imageFile in searchImages) 
      { 
         serverImageFile = imageFile.Replace(aliasFolder.Value, aliasFolder.Key); 
         serverImageFile = serverImageFile.TrimStart('\\'); 
         formattedServerImagesString += serverImageFile + ";"; 
      } 
      searchImages.Clear(); 
   } 
   return formattedServerImagesString.TrimEnd(';'); 

 
public void StartFileEnumerationServer() 

   try 
   { 
      _imageFileExtensions.Clear(); 
      _imageFileExtensions.AddRange(IMAGE_FILE_EXTENSIONS.Split(';')); 
 
      if (_listener != null)//if _listner is already created, then do not create again 
         return; 
      _listener = new HttpListener ( ) ; 
      _listener.Prefixes.Add ( string.Format ( "http://{0}:{1}/", LOCAL_IP_ADDRESS, ENUMERATION_SERVER_PORT ) ) ; 
 
      _listener.Start ( ) ; 
      _listener.BeginGetContext ( ClientRequestReceived, null ) ; 
   } 
   catch (Exception ex) 
   { 
      Debug.Fail("Error in server enumeration: \n" + ex.Message); 
   } 

 
public void StopFileEnumerationServer() 

   try 
   { 
      if (_listener != null) 
         _listener.Stop(); 
   } 
   catch (Exception ex) 
   { 
      Debug.Fail("Error in server enumeration: \n" + ex.Message); 
   } 

 
public void GetEnumeratedFiles(string filename) 

   HttpWebRequest request = ( HttpWebRequest ) HttpWebRequest.Create ( string.Format ( "http://{0}:{1}/", LOCAL_IP_ADDRESS, ENUMERATION_SERVER_PORT ) ) ; 
 
   if (null != request.Proxy) 
   { 
      request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials; 
   } 
 
   request.UseDefaultCredentials = true; 
 
 
   HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
 
   System.IO.Stream receivedStream = response.GetResponseStream(); 
   System.IO.StreamReader reader = new System.IO.StreamReader(receivedStream); 
 
   Char[] read = new Char[256]; 
   // Reads 256 characters at a time.     
   int count = reader.Read(read, 0, 256); 
   string imageNames = ""; 
 
   while (count > 0) 
   { 
      // Dumps the 256 characters on a string and displays the string to the console. 
      String temp = new String(read, 0, count); 
 
      imageNames += temp; 
 
      count = reader.Read(read, 0, 256); 
   } 
 
   // Releases the resources of the response. 
   response.Close(); 
   // Releases the resources of the Stream. 
   reader.Close(); 
 
   string[] imageFileNames = imageNames.Split(';'); 
   int counter = 0; 
   foreach (string image in imageFileNames) 
   { 
      counter++; 
      Debug.Assert(image.Trim().Length > 0, "There is no image to enumerate"); 
      Debug.WriteLine("Image " + counter + ": " + image); 
      _serverImagesList.Add(image); 
   } 
 
   File.WriteAllLines(filename, _serverImagesList.ToArray()); 

 
public void StartJpipServer() 

   if (!_jpipServer.IsRunning) 
   { 
      //Server Settings 
      _jpipServer.Configuration.ServerName = SERVER_NAME; 
      _jpipServer.Configuration.IPAddress = LOCAL_IP_ADDRESS; 
      _jpipServer.Configuration.Port = JPIP_SERVER_PORT; 
      _jpipServer.Configuration.ImagesFolder = SERVER_IMAGES_FOLDER; 
      _jpipServer.Configuration.CacheFolder = SERVER_CACHE_DIRECTORY; 
      _jpipServer.Configuration.MaxServerBandwidth = _jpipServer.Configuration.MaxServerBandwidth; 
      _jpipServer.Configuration.CacheSize = 200; 
      _jpipServer.Configuration.DivideSuperBoxes = true; 
      _jpipServer.Configuration.ChunkSize = 512; 
      _jpipServer.Configuration.MaxClientCount = 5; 
      _jpipServer.Configuration.ConnectionIdleTimeout = new TimeSpan(0, 0, 9100); 
      _jpipServer.Configuration.MaxSessionLifetime = new TimeSpan(0, 0, 9900); 
      _jpipServer.Configuration.MaxConnectionBandwidth = _jpipServer.Configuration.MaxConnectionBandwidth; 
      //Communication Settings 
      _jpipServer.Configuration.MaxTransportConnections = 15; 
      _jpipServer.Configuration.HandshakeTimeout = new TimeSpan(0, 0, 9600); 
      _jpipServer.Configuration.RequestTimeout = new TimeSpan(0, 0, 920); 
      _jpipServer.Configuration.ChunkSize = 512; 
      //Images Settings 
      _jpipServer.Configuration.ImageParsingTimeout = new TimeSpan(0, 0, 9180); 
      _jpipServer.Configuration.PartitionBoxSize = 40; 
      _jpipServer.Configuration.DivideSuperBoxes = true; 
      //Logging Settings 
      _jpipServer.Configuration.LogInformation = false; 
      _jpipServer.Configuration.LogWarnings = false; 
      _jpipServer.Configuration.LogDebug = false; 
      _jpipServer.Configuration.LogErrors = false; 
      //Start server and delegates 
      _jpipServer.Start(); 
      Debug.Assert(_jpipServer.IsRunning, "Server did not start."); 
   } 

 
public void StopJpipServer() 

   if (_jpipServer.IsRunning) 
      _jpipServer.Stop(); 

 
public void SetJpipViewer(JpipRasterImageViewer viewer) 

   // Initialize JPIP viewer   
   viewer.CacheDirectoryName = CLIENT_CACHE_DIRECTORY; 
   viewer.PortNumber = JPIP_SERVER_PORT; 
   viewer.IPAddress = LOCAL_IP_ADDRESS; 
   viewer.PacketSize = 16384; 
   viewer.RequestTimeout = new TimeSpan(0, 1, 0); 
   viewer.ChannelType = JpipChannelTypes.HttpChannel; 

 
public void SaveJpipViewerImageToFile(JpipRasterImageViewer viewer, string fileName) 

   RasterCodecs.Startup(); 
   RasterCodecs rc = new Leadtools.Codecs.RasterCodecs(); 
   rc.Save(viewer.Image, fileName, RasterImageFormat.Bmp, 24); 
   RasterCodecs.Shutdown(); 

 
private void OnClientError(object sender, ErrorEventArgs e) 

   Debug.WriteLine(e.GetException().Message); 

 
private void OnBytesLoaded(object sender, TotalBytesLoadedEventArgs e) 

   Debug.WriteLine(" Total Bytes: " + e.ByteCount.ToString()); 

 
 
public void ClientExample() 

   /*Server side*/ 
   StartJpipServer(); 
 
   /*Client requesting enumerated images from server*/ 
   StartFileEnumerationServer(); 
   GetEnumeratedFiles(LeadtoolsExamples.Common.ImagesPath.Path + "Client_Enumerated_Images.txt"); 
   StopFileEnumerationServer(); 
 
   JpipRasterImageViewer jpipViewer = new JpipRasterImageViewer(); 
   SetJpipViewer(jpipViewer); 
   jpipViewer.StreamingError += OnClientError; 
   jpipViewer.TotalBytesLoaded += OnBytesLoaded; 
   jpipViewer.FileOpened += new EventHandler(jpipViewer_FileOpened); 
 
   Debug.WriteLine("\n Open File:          " + _serverImagesList[0] ); 
   jpipViewer.Open(_serverImagesList[0]); 

 
void jpipViewer_FileOpened(object sender, EventArgs e) 

   JpipRasterImageViewer jpipViewer = ( JpipRasterImageViewer) sender ; 
 
   /*Client requests an image, copies to local file, then deletes cached files prior to given date from CACHE_DIRECTORY*/ 
   DateTime deleteCacheFilePriorTo = new DateTime(2008, 8, 8); 
 
   Debug.WriteLine("\n FullImageSize:          " + jpipViewer.FullImageSize.ToString()); 
   Debug.WriteLine(" NumberOfColorComponents:  " + jpipViewer.NumberOfColorComponents.ToString()); 
   Debug.WriteLine(" NumberOfResolutions:      " + jpipViewer.NumberOfResolutions.ToString()); 
   Debug.WriteLine(" InteractiveMode:          " + jpipViewer.InteractiveMode.ToString()); 
   Debug.WriteLine(" PaintProperties:          " + jpipViewer.PaintProperties.ToString()); 
   Debug.WriteLine(" Available Resolutions"); 
   for (int i = 0; i < jpipViewer.NumberOfResolutions; i++) 
   { 
      Debug.WriteLine(" Resolution (" + i.ToString() + ") Size" + jpipViewer.GetResolutionSize(i).ToString()); 
   } 
   Debug.WriteLine("\nOpen Image"); 
   Debug.WriteLine(" CurrentImageSize:         " + jpipViewer.CurrentImageSize.ToString()); 
   Debug.WriteLine(" ComponentIndex:           " + jpipViewer.ComponentIndex.ToString()); 
   Debug.WriteLine(" CurrentResolutionIndex:   " + jpipViewer.CurrentResolutionIndex.ToString()); 
 
   jpipViewer.ZoomIn(); 
   Debug.WriteLine("\n Zoomed in"); 
   Debug.WriteLine(" CurrentImageSize:         " + jpipViewer.CurrentImageSize.ToString()); 
   Debug.WriteLine(" ComponentIndex:           " + jpipViewer.ComponentIndex.ToString()); 
   Debug.WriteLine(" CurrentResolutionIndex:   " + jpipViewer.CurrentResolutionIndex.ToString()); 
 
   jpipViewer.ZoomIn(); 
   Debug.WriteLine("\n Zoomed in"); 
   Debug.WriteLine(" CurrentImageSize:         " + jpipViewer.CurrentImageSize.ToString()); 
   Debug.WriteLine(" ComponentIndex:           " + jpipViewer.ComponentIndex.ToString()); 
   Debug.WriteLine(" CurrentResolutionIndex:   " + jpipViewer.CurrentResolutionIndex.ToString()); 
 
   jpipViewer.ComponentIndex = 0; 
   Debug.WriteLine("Component Index value set to 1 "); 
   Debug.WriteLine(" CurrentImageSize:         " + jpipViewer.CurrentImageSize.ToString()); 
   Debug.WriteLine(" ComponentIndex:           " + jpipViewer.ComponentIndex.ToString()); 
   Debug.WriteLine(" CurrentResolutionIndex:   " + jpipViewer.CurrentResolutionIndex.ToString()); 
 
   jpipViewer.ZoomOut(); 
   Debug.WriteLine("\n ZoomOut "); 
   Debug.WriteLine(" CurrentImageSize:         " + jpipViewer.CurrentImageSize.ToString()); 
   Debug.WriteLine(" ComponentIndex:           " + jpipViewer.ComponentIndex.ToString()); 
   Debug.WriteLine(" CurrentResolutionIndex:   " + jpipViewer.CurrentResolutionIndex.ToString()); 
 
   jpipViewer.ComponentIndex = -1; 
   Debug.WriteLine("Component Index value set to 1 "); 
   Debug.WriteLine(" CurrentImageSize:         " + jpipViewer.CurrentImageSize.ToString()); 
   Debug.WriteLine(" ComponentIndex:           " + jpipViewer.ComponentIndex.ToString()); 
   Debug.WriteLine(" CurrentResolutionIndex:   " + jpipViewer.CurrentResolutionIndex.ToString()); 
 
   jpipViewer.Zoom(jpipViewer.GetResolutionSize(2)); 
   Debug.WriteLine(" Resolution size set to 2"); 
   Debug.WriteLine(" CurrentImageSize:         " + jpipViewer.CurrentImageSize.ToString()); 
   Debug.WriteLine(" ComponentIndex:           " + jpipViewer.ComponentIndex.ToString()); 
   Debug.WriteLine(" CurrentResolutionIndex:   " + jpipViewer.CurrentResolutionIndex.ToString()); 
   SaveJpipViewerImageToFile(jpipViewer, CLIENT_SAVED_FILE_NAME ); 
 
   /*Client side function to delete cached files of type LCCACHE File (Not LTCACHE File) prior to given date from CACHE_DIRECTORY*/ 
   int count = jpipViewer.DeleteCacheFiles(deleteCacheFilePriorTo); 
   Debug.WriteLine(count.ToString() + " Cache File Deleted...."); 
 
   if (jpipViewer.IsActive) 
   { 
      Debug.WriteLine(" JpipRasterImageViewer.IsActive Test "); 
      Debug.WriteLine(" CurrentImageSize:         " + jpipViewer.CurrentImageSize.ToString()); 
   } 
 
   jpipViewer.Close(); 
 
   if (jpipViewer.IsActive) 
   { 
      Debug.WriteLine(" JpipRasterImageViewer.IsActive Test (this should not happen becaue no image is loaded at this point"); 
      Debug.WriteLine(" CurrentImageSize:         " + jpipViewer.CurrentImageSize.ToString()); 
   } 
 
   /*Server side*/ 
   StopJpipServer(); 
}

Remarks

Use this class to make a request to a JPIP server by filling out the request parameters and calling the BeginGetJpipResponse method.

This class support asynchronous calls.

Inheritance Hierarchy

System.Object
   Leadtools.Jpip.Client.JpipClient

Requirements

Target Platforms: Microsoft .NET Framework 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family

See Also

Leadtools.Jpip.Clientrequires a JPIP Module and a server license and unlock key. For more information, refer to: Imaging Pro/Document/Medical Features