This is an example that can be used to send print jobs/print previews (return jpgs/images via raw text) to the BarTender labeling system or using this example as a foundation to talk to your own servers via tcp sockets
/// <summary>
/// Send print job btxml string to bartender and get a response back
/// </summary>
/// <param name="defaultXML">
/// the BTXML to send to bartender
/// </param>
/// <returns>
///BarTenderStaus if it was successfull or not
/// </returns>
public BarTenderStaus sendPrintJobTCP(str defaultXML)
{
str response;
XmlTextReader xmlTextReader;
boolean msgFound;
System.Text.Encoding encoding;
str errorId;
boolean errorsFound;
str message;
SysOperationProgress previewProgress;
System.Net.Sockets.TcpClient barTenderClient;
System.Net.Sockets.NetworkStream stream;
System.IO.StreamReader reader;
System.Byte[] send_bytes;
#avifiles
try
{
//setup progress bar so we can let the user know what we are doing
previewProgress = SysOperationProgress::newGeneral(#AviPublish2Web, 'Sending Print Job To BarTender', 7);
if(serverSettings.BarTenderServerName == "" || serverSettings.BarTenderServerPortNumber == 0)
{
throw error("No valid BarTender server has been defined. Please contact IT.");
}
//update progress bar
previewProgress.incCount();
previewProgress.setText("Task: Reading XML...");
message = defaultXML;
//check to see if we have something available to send to the server
if(message == "")
{
throw error("No items are available to print");
}
//update progress bar
previewProgress.incCount();
previewProgress.setText("Task: Connecting to BarTender Server...");
//make connection to bartender and open stream with UTF8 encoding
barTenderClient = new System.Net.Sockets.TcpClient(serverSettings.BarTenderServerName, serverSettings.BarTenderServerPortNumber);
stream = barTenderClient.GetStream();
reader = new System.IO.StreamReader(stream, System.Text.Encoding::get_UTF8());
//update progress bar
previewProgress.incCount();
previewProgress.setText("Task: Sending Label to BarTender...");
//define the stream encoding as UTF8
encoding = System.Text.Encoding::get_UTF8();
//convert the xml to bytes to send to bartender
send_bytes = encoding.GetBytes(message);
//send the xml bytes to bartender
stream.Write(send_bytes, 0, send_bytes.get_Length());
//update progress bar
previewProgress.incCount();
previewProgress.setText("Task: Reading Response From BarTender...");
//get the response bartender sends back
response = reader.ReadToEnd();
//close the bartender stream
stream.Close();
//update progress bar
previewProgress.incCount();
previewProgress.setText("Task: Analyzing XML Response from BarTender...");
//we need to parse the xml response string into xml nodes
xmlTextReader = XmlTextReader::newXml(response, true);
//loop through all of the xml nodes
while(xmlTextReader.read())
{
//check to see what type of xml node we are currently on
switch (xmlTextReader.NodeType())
{
case XmlNodeType::Element:
//check to see if we are on the message node
if(xmlTextReader.Name() == "Message")
{
//read the message attributes
while (xmlTextReader.MoveToNextAttribute())
{
//check to see if the attributes node is severity
if(xmlTextReader.Name() == "Severity")
{
//check to see if we are looking at an error
if(xmlTextReader.Value() == "Error")
{
//error has been found
msgFound = true;
errorsFound = true;
}
}
else if(xmlTextReader.Name() == "Id")
{
//define what the id attribute is incase it is an error
errorId = xmlTextReader.Value();
}
}
}
break;
case XmlNodeType::Text:
//check to see if the last node we were on was a message and if it was an error
if(msgFound)
{
//display error message to user in a friendly manner
setPrefix("BarTender Error " + errorId);
error(xmlTextReader.Value());
//reset message found flag
msgFound = false;
}
break;
case XmlNodeType::EndElement: //Display the end of the element.
break;
default:
break;
}
}
//update progress bar
previewProgress.setText("Task: Finished");
previewProgress.setTotal(7);
previewProgress.hide();
//check to see if any errors occured
if(!errorsFound)
{
return BarTenderStaus::Success;
}
else
{
return BarTenderStaus::Failure;
}
}
catch
{
error("There was an unknown error communicating with the BarTender server. Please restart your computer and try again. If the issue continues please alert IT of this issue.");
//update progress bar
previewProgress.setText("Task: Finished");
previewProgress.setTotal(7);
previewProgress.hide();
return BarTenderStaus::Failure;
}
}
No comments:
Post a Comment