Provides a simple, programmatically controlled JPIP protocol server.
public class JpipServer
Public Class 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.
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Jpip
Imports Leadtools.Jpip.Client.WinForms
Imports Leadtools.Jpip.Client.InteractiveDecoder
Imports Leadtools.Jpip.Server
Imports Leadtools.Jpip.Logging
<TestClass()> _
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
<TestMethod()> _
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
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Jpip;
using Leadtools.Jpip.Client.WinForms;
using Leadtools.Jpip.Client.InteractiveDecoder;
using Leadtools.Jpip.Server;
using Leadtools.Jpip.Logging;
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";
}
Products |
Support |
Feedback: JpipServer Class - Leadtools.Jpip.Server |
Introduction |
Help Version 19.0.2017.3.22
|
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET
Your email has been sent to support! Someone should be in touch! If your matter is urgent please come back into chat.
Chat Hours:
Monday - Friday, 8:30am to 6pm ET
Thank you for your feedback!
Please fill out the form again to start a new chat.
All agents are currently offline.
Chat Hours:
Monday - Friday
8:30AM - 6PM EST
To contact us please fill out this form and we will contact you via email.