Leadtools.Jpip.Server Namespace : JpipServer Class |
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
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.
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"; }
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