Package com.zebra.sdk.remote.comm
Class MultichannelRemoteConnection
Object
com.zebra.sdk.comm.MultichannelConnection
com.zebra.sdk.remote.comm.MultichannelRemoteConnection
- All Implemented Interfaces:
Connection,ConnectionWithWriteLogging
Establishes a Multichannel Remote connection to a device
package test.zebra.sdk.comm.examples;
import com.zebra.sdk.comm.Connection;
import com.zebra.sdk.comm.ConnectionException;
import com.zebra.sdk.printer.PrinterStatus;
import com.zebra.sdk.printer.ZebraPrinterFactory;
import com.zebra.sdk.printer.ZebraPrinterLinkOs;
import com.zebra.sdk.remote.comm.MultichannelRemoteConnection;
public class MultichannelRemoteConnectionExample {
// This example assumes Link-OS printers are connected via Web Sockets to a server which is running a Zebra servlet
// instance.
public static void main(String[] args) throws Exception {
new MultichannelRemoteConnectionExample().simpleExample("myPrinterUUID");
new MultichannelRemoteConnectionExample().nonBlockingStatusReporting("myPrinterUUID");
}
private void simpleExample(String theUniqueId) throws ConnectionException {
// Instantiate Multichannel Remote connection for simultaneous printing and status reporting with a given
// unique ID, using the default Zebra Web services port (11995).
// Note: The printer must be connected to a server which is running a Zebra servlet instance.
Connection thePrinterConn = new MultichannelRemoteConnection(theUniqueId);
try {
// Opens the connection - physical connection is established here.
thePrinterConn.open();
// Creates a Link-OS printing with the given connection
ZebraPrinterLinkOs linkOsPrinter = ZebraPrinterFactory.getLinkOsPrinter(thePrinterConn);
// This is sent over the printing channel
linkOsPrinter.printConfigurationLabel();
// This is sent over the status channel
PrinterStatus status = linkOsPrinter.getCurrentStatus();
System.out.println("The printer PAUSED state is : " + status.isPaused);
} catch (ConnectionException e) {
// Handle communications error here.
e.printStackTrace();
} finally {
// Close the connection to release resources.
thePrinterConn.close();
}
}
private void nonBlockingStatusReporting(String theUniqueId) throws ConnectionException {
// Instantiate Multichannel Remote connection for simultaneous printing and status reporting with a given
// unique ID, using the default Zebra Web services port (11995).
// Note: The printer must be connected to a server which is running a Zebra servlet instance.
Connection thePrinterConn = new MultichannelRemoteConnection(theUniqueId);
try {
// Opens the connection - physical connection is established here.
thePrinterConn.open();
// Creates a Link-OS printing with the given connection
ZebraPrinterLinkOs linkOsPrinter = ZebraPrinterFactory.getLinkOsPrinter(thePrinterConn);
// This is sent over the printing channel and will block the printing channel until the
// label format is completely sent.
String labelFormatStartCommand = "^XA";
linkOsPrinter.sendCommand(labelFormatStartCommand);
String labelBody = "^FO20,20^A0N,25,25^FDThis is a ZPL test.^FS";
linkOsPrinter.sendCommand(labelBody);
// This is sent over the status channel and will return immediately even though the
// printing channel is in use.
// If a RemoteConnection were used instead of a MultichannelRemoteConnection, this would not be possible.
PrinterStatus status = linkOsPrinter.getCurrentStatus();
System.out.println("The printer PAUSED state is : " + status.isPaused);
// Send the end of label command to finish and print the label.
String labelFormatEndCommand = "^XZ";
linkOsPrinter.sendCommand(labelFormatEndCommand);
} catch (ConnectionException e) {
// Handle communications error here.
e.printStackTrace();
} finally {
// Close the connection to release resources.
thePrinterConn.close();
}
}
}
-
Constructor Summary
ConstructorsConstructorDescriptionMultichannelRemoteConnection(String uniqueId) Initializes a new instance of theMultichannelRemoteConnectionclass using the default Zebra Web services port (11995).
This constructor will use the default timeouts forConnection.read().MultichannelRemoteConnection(String uniqueId, int rmiServerPort) Initializes a new instance of theMultichannelRemoteConnectionclass using the specifiedrmiServerPort.
This constructor will use the default timeouts forConnection.read().MultichannelRemoteConnection(String uniqueId, int maxTimeoutForRead, int timeToWaitForMoreData) Initializes a new instance of theMultichannelRemoteConnectionclass using the default Zebra Web services port (11995).
This constructor will use the specified timeouts forConnection.read()for both channels.MultichannelRemoteConnection(String uniqueId, int rmiServerPort, int maxTimeoutForRead, int timeToWaitForMoreData) Initializes a new instance of theMultichannelRemoteConnectionclass using the specifiedrmiServerPort.
This constructor will use the specified timeouts forConnection.read()for both channels.MultichannelRemoteConnection(String uniqueId, int printingChannelMaxTimeoutForRead, int printingChannelTimeToWaitForMoreData, int statusChannelMaxTimeoutForRead, int statusChannelTimeToWaitForMoreData) Initializes a new instance of theMultichannelRemoteConnectionclass using the default Zebra Web services port (11995).
This constructor will use the specified timeouts forConnection.read()for the channels.MultichannelRemoteConnection(String uniqueId, int rmiServerPort, int printingChannelMaxTimeoutForRead, int printingChannelTimeToWaitForMoreData, int statusChannelMaxTimeoutForRead, int statusChannelTimeToWaitForMoreData) Initializes a new instance of theMultichannelRemoteConnectionclass using the specifiedrmiServerPort.
This constructor will use the specified timeouts forConnection.read()for the channels. -
Method Summary
Modifier and TypeMethodDescriptiongetConnectionReestablisher(long thresholdTime) Returns aConnectionReestablisherwhich allows for easy recreation of a connection which may have been closed.Return the remote connection unique id of the printer port as the description.toString()ReturnsREMOTE_MULTI:[uniqueId]:[rmiServerPort].
TheuniqueIdandrmiServerPortare the parameters which were passed into the constructor.Methods inherited from class com.zebra.sdk.comm.MultichannelConnection
addWriteLogStream, bytesAvailable, close, closePrintingChannel, closeStatusChannel, getMaxTimeoutForRead, getPrintingChannel, getStatusChannel, getTimeToWaitForMoreData, isConnected, open, openPrintingChannel, openStatusChannel, read, read, readChar, sendAndWaitForResponse, sendAndWaitForResponse, sendAndWaitForValidResponse, sendAndWaitForValidResponse, setMaxTimeoutForRead, setTimeToWaitForMoreData, waitForData, write, write, write
-
Constructor Details
-
MultichannelRemoteConnection
Initializes a new instance of theMultichannelRemoteConnectionclass using the default Zebra Web services port (11995).
This constructor will use the default timeouts forConnection.read(). The default timeout is a maximum of 1 seconds for any data to be received. If no more data is available after 1 second the read operation is assumed to be complete.
To specify timeouts other than the defaults, use:
MultichannelRemoteConnection(String, int, int, int)- Parameters:
uniqueId- the UUID of the device.
-
MultichannelRemoteConnection
Initializes a new instance of theMultichannelRemoteConnectionclass using the specifiedrmiServerPort.
This constructor will use the default timeouts forConnection.read(). The default timeout is a maximum of 1 seconds for any data to be received. If no more data is available after 1 second the read operation is assumed to be complete.
To specify timeouts other than the defaults, use:
MultichannelRemoteConnection(String, int, int, int)- Parameters:
uniqueId- the UUID of the device.rmiServerPort- the port the RMI server is running on.
-
MultichannelRemoteConnection
public MultichannelRemoteConnection(String uniqueId, int maxTimeoutForRead, int timeToWaitForMoreData) Initializes a new instance of theMultichannelRemoteConnectionclass using the default Zebra Web services port (11995).
This constructor will use the specified timeouts forConnection.read()for both channels. The timeout is a maximum ofmaxTimeoutForReadmilliseconds for any data to be received. If no more data is available aftertimeToWaitForMoreDatamilliseconds the read operation is assumed to be complete. If you wish to specify different timeouts for each channel, useMultichannelRemoteConnection(String, int, int, int, int, int).- Parameters:
uniqueId- the UUID of the device.maxTimeoutForRead- the maximum time, in milliseconds, to wait for any data to be received.timeToWaitForMoreData- the maximum time, in milliseconds, to wait in-between reads after the initial read.
-
MultichannelRemoteConnection
public MultichannelRemoteConnection(String uniqueId, int rmiServerPort, int maxTimeoutForRead, int timeToWaitForMoreData) Initializes a new instance of theMultichannelRemoteConnectionclass using the specifiedrmiServerPort.
This constructor will use the specified timeouts forConnection.read()for both channels. The timeout is a maximum ofmaxTimeoutForReadmilliseconds for any data to be received. If no more data is available aftertimeToWaitForMoreDatamilliseconds the read operation is assumed to be complete. If you wish to specify different timeouts for each channel, useMultichannelRemoteConnection(String, int, int, int, int, int).- Parameters:
uniqueId- the UUID of the device.rmiServerPort- the port the RMI server is running on.maxTimeoutForRead- the maximum time, in milliseconds, to wait for any data to be received.timeToWaitForMoreData- the maximum time, in milliseconds, to wait in-between reads after the initial read.
-
MultichannelRemoteConnection
public MultichannelRemoteConnection(String uniqueId, int printingChannelMaxTimeoutForRead, int printingChannelTimeToWaitForMoreData, int statusChannelMaxTimeoutForRead, int statusChannelTimeToWaitForMoreData) Initializes a new instance of theMultichannelRemoteConnectionclass using the default Zebra Web services port (11995).
This constructor will use the specified timeouts forConnection.read()for the channels. The timeout is a maximum ofprintingChannelMaxTimeoutForRead/statusChannelMaxTimeoutForReadmilliseconds for any data to be received on the printing/status channels respectively. If no more data is available afterprintingChannelTimeToWaitForMoreData/statusChannelTimeToWaitForMoreDatamilliseconds on the printing/status channels respectively the read operation is assumed to be complete.- Parameters:
uniqueId- the UUID of the device.printingChannelMaxTimeoutForRead- the maximum time, in milliseconds, to wait for any data to be received on the printing channel.printingChannelTimeToWaitForMoreData- the maximum time, in milliseconds, to wait in-between reads after the initial read on the printing channel.statusChannelMaxTimeoutForRead- the maximum time, in milliseconds, to wait for any data to be received on the status channel.statusChannelTimeToWaitForMoreData- the maximum time, in milliseconds, to wait in-between reads after the initial read on the status channel.
-
MultichannelRemoteConnection
public MultichannelRemoteConnection(String uniqueId, int rmiServerPort, int printingChannelMaxTimeoutForRead, int printingChannelTimeToWaitForMoreData, int statusChannelMaxTimeoutForRead, int statusChannelTimeToWaitForMoreData) Initializes a new instance of theMultichannelRemoteConnectionclass using the specifiedrmiServerPort.
This constructor will use the specified timeouts forConnection.read()for the channels. The timeout is a maximum ofprintingChannelMaxTimeoutForRead/statusChannelMaxTimeoutForReadmilliseconds for any data to be received on the printing/status channels respectively. If no more data is available afterprintingChannelTimeToWaitForMoreData/statusChannelTimeToWaitForMoreDatamilliseconds on the printing/status channels respectively the read operation is assumed to be complete.- Parameters:
uniqueId- the UUID of the device.rmiServerPort- the port the RMI server is running on.printingChannelMaxTimeoutForRead- the maximum time, in milliseconds, to wait for any data to be received on the printing channel.printingChannelTimeToWaitForMoreData- the maximum time, in milliseconds, to wait in-between reads after the initial read on the printing channel.statusChannelMaxTimeoutForRead- the maximum time, in milliseconds, to wait for any data to be received on the status channel.statusChannelTimeToWaitForMoreData- the maximum time, in milliseconds, to wait in-between reads after the initial read on the status channel.
-
-
Method Details
-
getConnectionReestablisher
public ConnectionReestablisher getConnectionReestablisher(long thresholdTime) throws ConnectionException Description copied from interface:ConnectionReturns aConnectionReestablisherwhich allows for easy recreation of a connection which may have been closed.- This call should be made while there is still an active connection to the printer (prior to issuing a command which will make the printer non-responsive).
- Specified by:
getConnectionReestablisherin interfaceConnection- Overrides:
getConnectionReestablisherin classMultichannelConnection- Parameters:
thresholdTime- how long the Connection reestablisher will wait before attempting to reconnection to the printer- Returns:
- ConnectionReestablisher
- Throws:
ConnectionException- if the ConnectionReestablisher could not be created.- See Also:
-
toString
ReturnsREMOTE_MULTI:[uniqueId]:[rmiServerPort].
TheuniqueIdandrmiServerPortare the parameters which were passed into the constructor.- Specified by:
toStringin interfaceConnection- Overrides:
toStringin classObject- Returns:
- the connection description string.
- See Also:
-
getSimpleConnectionName
Return the remote connection unique id of the printer port as the description.- Returns:
- a human-readable description of the connection.
- See Also:
-