LEADTOOLS JPEG 2000 (Leadtools.Jpip.Server assembly)
LEAD Technologies, Inc

JpipServer Class

Example 





Members 
Provides a simple, programmatically controlled JPIP protocol server.
Object Model
JpipServer ClassJpipServerConfiguration Class
Syntax
public class JpipServer 
'Declaration
 
Public Class JpipServer 
'Usage
 
Dim instance As JpipServer
public sealed class JpipServer 
function Leadtools.Jpip.Server.JpipServer()
public ref class JpipServer 
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.

Example
 
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 = Path.Combine(LEAD_VARS.ImagesDir, "jpeg2000")
         Private IMAGES_DIRECTORY As String = Path.Combine(LEAD_VARS.ImagesDir, "jpeg2000")
         Private IMAGE_NAME As String = Path.Combine(LEAD_VARS.ImagesDir, "Earth8000_Precint_4_.j2k")


         Public Sub New()
#If LEADTOOLS_V175_OR_LATER Then
            Leadtools.Examples.Support.SetLicense()
#Else
         Leadtools.Examples.Support.Unlock()
#End If ' #If LEADTOOLS_V175_OR_LATER Then
            _server = New JpipServer()
            _logWriter = New WindowsLogWriter()

            _responseCount = 0
            _loggingFileEnabled = True
            _loggingFileName = Path.Combine(LEAD_VARS.ImagesDir, "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 = Path.Combine(LEAD_VARS.ImagesDir, "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 = LEAD_VARS.ImagesDir

            '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

   Public NotInheritable Class LEAD_VARS
      Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
   End Class
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 = Path.Combine(LEAD_VARS.ImagesDir, "jpeg2000");
         private string IMAGES_DIRECTORY = Path.Combine(LEAD_VARS.ImagesDir, "jpeg2000");
         private string IMAGE_NAME = Path.Combine(LEAD_VARS.ImagesDir, "Earth8000_Precint_4_.j2k");
         private string LOG_DIRECTORY = Path.Combine(LEAD_VARS.ImagesDir, "Server Logs");
         private string LOG_FILE_NAME = Path.Combine(LEAD_VARS.ImagesDir, "log.txt");
         public RunServerExamples ()
         {
#if LEADTOOLS_V175_OR_LATER
            Leadtools.Examples.Support.SetLicense();
#else
            Leadtools.Examples.Support.Unlock();
#endif // #if LEADTOOLS_V175_OR_LATER
            _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_FILE_NAME, " ");
            }
            _loggingFileName = 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 = Path.Combine(LEAD_VARS.ImagesDir, "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 = LEAD_VARS.ImagesDir;
            //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");
         }

   static class LEAD_VARS
   {
      public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
   }
Requirements

Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

See Also

Reference

JpipServer Members
Leadtools.Jpip.Server Namespace

 

 


Products | Support | Contact Us | Copyright Notices

© 2006-2012 All Rights Reserved. LEAD Technologies, Inc.

Leadtools.Jpip.Server requires a Document or Medical license and unlock key as well as a server license and unlock key. For more information, refer to: LEADTOOLS Toolkit Features