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



Provides a simple, programmatically controlled JPIP protocol server.

Object Model


Syntax

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

Example

Visual BasicCopy Code
Public Class RunServerExample
    Private _server As JpipServer
    Private _logWriter As WindowsLogWriter

    Private _responseCount As Integer
    Private _loggingFileName As String
    Private _loggingFileEnabled As Boolean

    Private Const LOCAL_IP_ADDRESS As String = "127.0.0.1"
    Private Const SERVER_NAME As String = "LEAD JPIP Server - Test Server"
    Private Const PORT_107 As Integer = 107
    Private CACHE_DIRECTORY As String = LeadtoolsExamples.Common.ImagesPath.Path + "jpeg2000"
    Private IMAGES_DIRECTORY As String = LeadtoolsExamples.Common.ImagesPath.Path + "jpeg2000"
    Private IMAGE_NAME As String = LeadtoolsExamples.Common.ImagesPath.Path + "Earth8000_Precint_4_.j2k"


    Public Sub New()
        Leadtools.Examples.Support.Unlock()
        _server = New JpipServer()
        _logWriter = New WindowsLogWriter()

        _responseCount = 0
        _loggingFileEnabled = True
        _loggingFileName = LeadtoolsExamples.Common.ImagesPath.Path + "Server Logs\log.txt"

    End Sub


    Public Sub StartServer()
        ResetServerConfiguration()

        'Interactive handling
        AddHandler _server.RequestReceived, AddressOf _server_RequestReceived
        AddHandler _server.ResponseSending, AddressOf _server_ResponseSending

        'Handle event logs
        AddHandler EventLogger.EventLog, AddressOf EventLogger_EventLog

        'clear the server cache
        _server.ClearCacheContents()

        'Add custom logging channel
        If (Not EventLogger.ContainsLoggingChannel(_logWriter)) Then
            EventLogger.AddLoggingChannel(_logWriter)
        End If

        EventLogger.LogEvent(SERVER_NAME, LOCAL_IP_ADDRESS, PORT_107.ToString(), "", "", DateTime.Now, Leadtools.Jpip.Logging.EventLogEntryEventType.Information, "", "LEAD Example Started")
        'start the server
        _server.Start()

        Debug.Assert(_server.IsRunning, "Server did not start.")

        ' client side
        Dim jpipViewer As JpipRasterImageViewer = New JpipRasterImageViewer()
        SetViewer(jpipViewer)
        AddHandler jpipViewer.FileOpened, AddressOf jpipViewer_FileOpened
        jpipViewer.Open(IMAGE_NAME)

    End Sub

    Private Sub jpipViewer_FileOpened(ByVal sender As Object, ByVal e As EventArgs)
        Dim jpipViewer As JpipRasterImageViewer = DirectCast(sender, JpipRasterImageViewer)

        jpipViewer.ZoomIn()
        jpipViewer.Close()

        'Server side
        If _server.IsRunning Then
            _server.Stop()
        End If

        EventLogger.LogEvent(SERVER_NAME, LOCAL_IP_ADDRESS, PORT_107.ToString(), "", "", DateTime.Now, Leadtools.Jpip.Logging.EventLogEntryEventType.Information, "", "LEAD Example Ended")


    End Sub

    Private Sub EventLogger_EventLog(ByVal sender As Object, ByVal e As Leadtools.Jpip.Logging.EventLogEntry)
        Console.WriteLine("Server Name: {0}; Server IP: {1}; Server Port: {2}; Client IP: {3}; Client Port: {4}; Channel ID: {5}; Event Type: {6}; Description: {7}", e.ServerName, e.ServerIPAddress, e.ServerPort, e.ClientIPAddress, e.ClientPort, e.ChannelID, e.Type.ToString(), e.Description)
    End Sub

    Private Sub _server_ResponseSending(ByVal sender As Object, ByVal e As ResponseSendingEventArgs)
        Dim dataFolder As String
        Dim dumpClientIP As String
        Dim dumpClientPort As Integer


        dataFolder = LeadtoolsExamples.Common.ImagesPath.Path + "ServerResponses"
        dumpClientIP = "127.0.0.1"
        dumpClientPort = 121

        If (Not Directory.Exists(dataFolder)) Then
            Directory.CreateDirectory(dataFolder)
        End If

        If (e.ClientIpAddress = dumpClientIP) AndAlso (e.ClientPort = dumpClientPort) Then
            Dim subDirectoryPath As String
            Dim responseDataFile As String

            _responseCount += 1

            subDirectoryPath = String.Concat(dataFolder, "\", dumpClientIP)
            responseDataFile = String.Concat(subDirectoryPath, "\response_", _responseCount)

            If (Not Directory.Exists(subDirectoryPath)) Then
                Directory.CreateDirectory(subDirectoryPath)
            End If

            File.WriteAllBytes(responseDataFile, e.Data)
        End If
    End Sub

    Private Sub _server_RequestReceived(ByVal sender As Object, ByVal e As RequestReceivedEventArgs)
        Dim denyClientIpAddress As String = "127.0.0.1"
        Dim denyClientPort As Integer = 120


        If (e.ClientIpAddress = denyClientIpAddress) AndAlso (e.ClientPort = denyClientPort) Then
            e.Deny = True

            e.StatusCode = CInt(HttpStatusCode.Forbidden)
            e.Description = "Server refused to process request."
        End If
    End Sub

    Public Sub ResetServerConfiguration()
        If (Not _server.IsRunning) Then
            Dim appConfigSettings As JpipConfiguration


            'for reading from configuration file settings
            appConfigSettings = New JpipConfiguration()

            'Server Settings
            _server.Configuration.ServerName = SERVER_NAME
            _server.Configuration.IPAddress = LOCAL_IP_ADDRESS
            _server.Configuration.Port = PORT_107
            _server.Configuration.ImagesFolder = IMAGES_DIRECTORY
            _server.Configuration.CacheFolder = CACHE_DIRECTORY
            _server.Configuration.MaxServerBandwidth = ConfigurationDefaults.MaxServerBandwidth
            _server.Configuration.CacheSize = appConfigSettings.CacheSize
            _server.Configuration.DivideSuperBoxes = True
            _server.Configuration.ChunkSize = 512
            _server.Configuration.MaxClientCount = 5
            _server.Configuration.ConnectionIdleTimeout = TimeSpan.FromSeconds(ConfigurationDefaults.ConnectionIdleTimeout)
            _server.Configuration.MaxSessionLifetime = TimeSpan.FromSeconds(ConfigurationDefaults.MaxSessionLifetime)
            _server.Configuration.MaxConnectionBandwidth = ConfigurationDefaults.MaxConnectionBandwidth

            'Communication Settings
            _server.Configuration.MaxTransportConnections = 15
            _server.Configuration.HandshakeTimeout = TimeSpan.FromSeconds(ConfigurationDefaults.HandshakeTimeout)
            _server.Configuration.RequestTimeout = TimeSpan.FromSeconds(ConfigurationDefaults.RequestTimeout)
            _server.Configuration.ChunkSize = ConfigurationDefaults.ChunkSize
            'Images Settings
            _server.Configuration.ImageParsingTimeout = TimeSpan.FromSeconds(ConfigurationDefaults.ImageParsingTimeout)
            _server.Configuration.PartitionBoxSize = 30
            _server.Configuration.DivideSuperBoxes = appConfigSettings.DivideSuperBoxes
            'Logging Settings
            _server.Configuration.LoggingFile = _loggingFileName
            _server.Configuration.EnableLogging = _loggingFileEnabled
            _server.Configuration.LogInformation = True
            _server.Configuration.LogWarnings = True
            _server.Configuration.LogDebug = True
            _server.Configuration.LogErrors = True

            AddAliasFolders()
        End If
    End Sub

    Private Sub AddAliasFolders()
        Dim alias_Renamed As String = "LeadImages"
        Dim physicalPath As String = LeadtoolsExamples.Common.ImagesPath.Path

        'Set server aliases folder
        If _server.Configuration.IsAliasExists(alias_Renamed) Then
            If _server.Configuration.GetAliasPath(alias_Renamed) <> physicalPath Then
                _server.Configuration.RemoveAliasFolder(alias_Renamed)
            Else
                Return
            End If
        End If

        _server.Configuration.AddAliasFolder(alias_Renamed, physicalPath)
    End Sub

    Public Sub SetViewer(ByVal viewer As JpipRasterImageViewer)
        viewer.CacheDirectoryName = CACHE_DIRECTORY
        viewer.PortNumber = PORT_107
        viewer.IPAddress = LOCAL_IP_ADDRESS
        viewer.PacketSize = 16384
        viewer.ChannelType = JpipChannelTypes.HttpChannel
    End Sub

    Private Class WindowsLogWriter : Implements ILogginChannel

        Public Sub WriteLog(ByVal logEntry As Leadtools.Jpip.Logging.EventLogEntry) Implements ILogginChannel.WriteLog
            Dim message As String


            message = String.Format("Server Name: {0}; Server IP: {1}; Server Port: {2}; Client IP: {3}; Client Port: {4}; Channel ID: {5}; Event Type: {6}; Description: {7}", logEntry.ServerName, logEntry.ServerIPAddress, logEntry.ServerPort, logEntry.ClientIPAddress, logEntry.ClientPort, logEntry.ChannelID, logEntry.Type.ToString(), logEntry.Description)

            System.Diagnostics.EventLog.WriteEntry("JPIP LEAD Server", message)
        End Sub
    End Class
End Class
C#Copy Code
private JpipServer _server; 
private WindowsLogWriter _logWriter; 
private int _responseCount; 
private string _loggingFileName; 
private bool _loggingFileEnabled; 
private const string LOCAL_IP_ADDRESS = "127.0.0.1"; 
private const string SERVER_NAME = "LEAD JPIP Server - Test Server"; 
private const int PORT_107 = 107; 
private string CACHE_DIRECTORY = LeadtoolsExamples.Common.ImagesPath.Path + "jpeg2000"; 
private string IMAGES_DIRECTORY = LeadtoolsExamples.Common.ImagesPath.Path + "jpeg2000"; 
private string IMAGE_NAME = LeadtoolsExamples.Common.ImagesPath.Path + "Earth8000_Precint_4_.j2k"; 
private string LOG_DIRECTORY = LeadtoolsExamples.Common.ImagesPath.Path + "Server Logs"; 
private string LOG_FILE_NAME = LeadtoolsExamples.Common.ImagesPath.Path + "log.txt"; 
public RunServerExamples () 

    Leadtools.Examples.Support.Unlock(); 
   _server = new JpipServer ( ) ; 
   _logWriter = new WindowsLogWriter ( ) ; 
   _responseCount = 0 ; 
   _loggingFileEnabled = true; 
 
   if(!File.Exists(LOG_DIRECTORY + LOG_FILE_NAME)) 
   { 
       Directory.CreateDirectory(LOG_DIRECTORY); 
       File.WriteAllText(LOG_DIRECTORY + LOG_FILE_NAME, " "); 
   } 
   _loggingFileName = LOG_DIRECTORY + LOG_FILE_NAME; 

 
void EventLogger_EventLog(object sender, Leadtools.Jpip.Logging.EventLogEntry e) 

   Console.WriteLine ( "Server Name: {0}; Server IP: {1}; Server Port: {2}; Client IP: {3}; Client Port: {4}; Channel ID: {5}; Event Type: {6}; Description: {7}", 
                        e.ServerName, e.ServerIPAddress, e.ServerPort,  
                        e.ClientIPAddress, e.ClientPort, e.ChannelID,  
                        e.Type.ToString ( ), e.Description ) ; 

 
void _server_ResponseSending(object sender, ResponseSendingEventArgs e) 

   string dataFolder; 
   string dumpClientIP ; 
   int dumpClientPort ; 
   dataFolder = LeadtoolsExamples.Common.ImagesPath.Path + "ServerResponses"; 
   dumpClientIP = "127.0.0.1" ; 
   dumpClientPort = 1207 ; 
 
   if (!Directory.Exists(dataFolder)) 
   { 
      Directory.CreateDirectory( dataFolder); 
   } 
 
   if ( (e.ClientIpAddress == dumpClientIP) && ( e.ClientPort == dumpClientPort ) ) 
   { 
      string subDirectoryPath; 
      string responseDataFile; 
      _responseCount++; 
 
      subDirectoryPath = string.Concat(dataFolder, "\\", dumpClientIP); 
      responseDataFile = string.Concat(subDirectoryPath, "\\response_", _responseCount); 
 
      if (!Directory.Exists(subDirectoryPath)) 
      { 
         Directory.CreateDirectory(subDirectoryPath); 
      } 
      File.WriteAllBytes(responseDataFile, e.Data); 
   } 

 
void _server_RequestReceived(object sender, RequestReceivedEventArgs e) 

   string denyClientIpAddress = "127.0.0.1" ; 
   int denyClientPort = 120 ; 
   if ( ( e.ClientIpAddress == denyClientIpAddress ) && ( e.ClientPort == denyClientPort ) ) 
   { 
      e.Deny = true ; 
 
      e.StatusCode = (int) HttpStatusCode.Forbidden; 
      e.Description = "Server refused to process request."; 
   } 

 
public void ResetServerConfiguration ( ) 

   if ( !_server.IsRunning ) 
   { 
      JpipConfiguration appConfigSettings ; 
 
      //for reading from configuration file settings 
      appConfigSettings = new JpipConfiguration ( ) ; 
 
      //Server Settings 
      _server.Configuration.ServerName = SERVER_NAME; 
      _server.Configuration.IPAddress = LOCAL_IP_ADDRESS; 
      _server.Configuration.Port = PORT_107; 
      _server.Configuration.ImagesFolder = IMAGES_DIRECTORY; 
      _server.Configuration.CacheFolder = CACHE_DIRECTORY; 
      _server.Configuration.MaxServerBandwidth = ConfigurationDefaults.MaxServerBandwidth; 
      _server.Configuration.CacheSize = appConfigSettings.CacheSize; 
      _server.Configuration.DivideSuperBoxes = true; 
      _server.Configuration.ChunkSize = 512; 
      _server.Configuration.MaxClientCount = 5; 
      _server.Configuration.ConnectionIdleTimeout = TimeSpan.FromSeconds ( ConfigurationDefaults.ConnectionIdleTimeout ) ; 
      _server.Configuration.MaxSessionLifetime = TimeSpan.FromSeconds ( ConfigurationDefaults.MaxSessionLifetime ) ; 
      _server.Configuration.MaxConnectionBandwidth = ConfigurationDefaults.MaxConnectionBandwidth; 
 
      //Communication Settings 
      _server.Configuration.MaxTransportConnections = 15; 
      _server.Configuration.HandshakeTimeout = TimeSpan.FromSeconds ( ConfigurationDefaults.HandshakeTimeout ) ; 
      _server.Configuration.RequestTimeout = TimeSpan.FromSeconds ( ConfigurationDefaults.RequestTimeout ) ; 
      _server.Configuration.ChunkSize = ConfigurationDefaults.ChunkSize; 
      //Images Settings 
      _server.Configuration.ImageParsingTimeout = TimeSpan.FromSeconds ( ConfigurationDefaults.ImageParsingTimeout ) ; 
      _server.Configuration.PartitionBoxSize = 30; 
      _server.Configuration.DivideSuperBoxes = appConfigSettings.DivideSuperBoxes; 
      //Logging Settings 
      _server.Configuration.LoggingFile = _loggingFileName; 
      _server.Configuration.EnableLogging = _loggingFileEnabled; 
      _server.Configuration.LogInformation = true; 
      _server.Configuration.LogWarnings = true; 
      _server.Configuration.LogDebug = true; 
      _server.Configuration.LogErrors = true; 
 
      AddAliasFolders(); 
   } 

 
private void AddAliasFolders() 

   string alias = "LeadImages"; 
   string physicalPath = LeadtoolsExamples.Common.ImagesPath.Path; 
   //Set server aliases folder 
   if (_server.Configuration.IsAliasExists(alias)) 
   { 
      if (_server.Configuration.GetAliasPath(alias) != physicalPath) 
      { 
         _server.Configuration.RemoveAliasFolder(alias); 
      } 
      else 
      { 
         return ; 
      } 
   } 
   _server.Configuration.AddAliasFolder(alias, physicalPath); 

 
public void SetViewer(JpipRasterImageViewer viewer) 

   viewer.CacheDirectoryName = CACHE_DIRECTORY; 
   viewer.PortNumber = PORT_107; 
   viewer.IPAddress = LOCAL_IP_ADDRESS; 
   viewer.PacketSize = 16384; 
   viewer.ChannelType = JpipChannelTypes.HttpChannel; 

 
private class WindowsLogWriter : ILogginChannel 

   public void WriteLog(Leadtools.Jpip.Logging.EventLogEntry logEntry) 
   { 
      string message; 
      message = string.Format("Server Name: {0}; Server IP: {1}; Server Port: {2}; Client IP: {3}; Client Port: {4}; Channel ID: {5}; Event Type: {6}; Description: {7}", 
                                logEntry.ServerName, logEntry.ServerIPAddress, logEntry.ServerPort, 
                                logEntry.ClientIPAddress, logEntry.ClientPort, logEntry.ChannelID, 
                                logEntry.Type.ToString(), logEntry.Description); 
      System.Diagnostics.EventLog.WriteEntry("JPIP LEAD Server", message); 
   } 

 
 
 public void StartServer() 
 { 
     ResetServerConfiguration(); 
 
     //Interactive handling 
     _server.RequestReceived += new EventHandler<RequestReceivedEventArgs>(_server_RequestReceived); 
     _server.ResponseSending += new EventHandler<ResponseSendingEventArgs>(_server_ResponseSending); 
 
     //Handle event logs 
     EventLogger.EventLog += new EventHandler<Leadtools.Jpip.Logging.EventLogEntry>(EventLogger_EventLog); 
 
     //clear the server cache 
     _server.ClearCacheContents(); 
 
     //Add custom logging channel 
     if (!EventLogger.ContainsLoggingChannel(_logWriter)) 
     { 
         EventLogger.AddLoggingChannel(_logWriter); 
     } 
     EventLogger.LogEvent(SERVER_NAME, LOCAL_IP_ADDRESS, PORT_107.ToString(), "", "", 
                            DateTime.Now, Leadtools.Jpip.Logging.EventLogEntryEventType.Information, 
                            "", "LEAD Example Started"); 
     //start the server 
     _server.Start(); 
 
     Debug.Assert(_server.IsRunning, "Server did not start."); 
 
     /* client side */ 
     JpipRasterImageViewer jpipViewer = new JpipRasterImageViewer(); 
 
     jpipViewer.FileOpened += new EventHandler(jpipViewer_FileOpened); 
     SetViewer(jpipViewer); 
     jpipViewer.Open(IMAGE_NAME); 
 } 
 
void jpipViewer_FileOpened(object sender, EventArgs e) 

   JpipRasterImageViewer jpipViewer = ( JpipRasterImageViewer ) sender ; 
   jpipViewer.ZoomIn(); 
   jpipViewer.Close(); 
 
   /*Server side*/ 
   if (_server.IsRunning) 
   { 
       _server.Stop(); 
   } 
   EventLogger.LogEvent(SERVER_NAME, LOCAL_IP_ADDRESS, PORT_107.ToString(), "", "", 
                          DateTime.Now, Leadtools.Jpip.Logging.EventLogEntryEventType.Information, 
                          "", "LEAD Example Ended"); 
}

Remarks

Using the JpipServer class, you can create a JPIP protocol server that responds to JPIP requests from any JPIP compliant client.

To start the server, create a JpipServer object then set the Configuration values and call the Start method, the JpipServer will listen to requests in a background threads causing the application main thread not to block.

When you are done with the JpipServer object call the Stop method.

Inheritance Hierarchy

System.Object
   Leadtools.Jpip.Server.JpipServer

Requirements

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

See Also

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