Difference between revisions of "Sirit Example Client"
From RifidiWiki
| Line 1: | Line 1: | ||
| − | |||
This class shows how to create a program to talk to the Sirit INfinity 510 reader. | This class shows how to create a program to talk to the Sirit INfinity 510 reader. | ||
| − | + | <pre> | |
/* | /* | ||
* SimpleSiritClient.java | * SimpleSiritClient.java | ||
| Line 33: | Line 32: | ||
public class SimpleSiritClient { | public class SimpleSiritClient { | ||
| − | String ipAddress = | + | String ipAddress = "192.168.11.130"; |
Socket sock; | Socket sock; | ||
int port = 50007; | int port = 50007; | ||
| Line 39: | Line 38: | ||
PrintWriter writer; | PrintWriter writer; | ||
| − | Future | + | Future<String> future; |
/** | /** | ||
| Line 56: | Line 55: | ||
setUpNetworking(); | setUpNetworking(); | ||
| − | String command = | + | String command = ""; |
// Login to reader | // Login to reader | ||
| − | command = | + | command = "reader.login(login=admin,pwd=readeradmin)"; |
processCommand(command); | processCommand(command); | ||
// let the reader scan for tags for 3 seconds | // let the reader scan for tags for 3 seconds | ||
| − | command = | + | command = "tag.db.scan_tags(3000)"; |
processCommand(command); | processCommand(command); | ||
| Line 103: | Line 102: | ||
ExecutorService pool = Executors.newFixedThreadPool(2); | ExecutorService pool = Executors.newFixedThreadPool(2); | ||
// Callable for Commandchannel | // Callable for Commandchannel | ||
| − | Callable | + | Callable<String> callable = new IncomingCallable(); |
future = pool.submit(callable); | future = pool.submit(callable); | ||
| Line 110: | Line 109: | ||
// write to log window | // write to log window | ||
| − | System.out.println( | + | System.out.println(">>" + command + "\r\n"); |
// receive and write response | // receive and write response | ||
| Line 121: | Line 120: | ||
public void sendCommand(String command) { | public void sendCommand(String command) { | ||
// send command to reader | // send command to reader | ||
| − | writer.print(command + | + | writer.print(command + "\r\n"); |
writer.flush(); | writer.flush(); | ||
} | } | ||
| Line 129: | Line 128: | ||
*/ | */ | ||
public String getLastResponse() { | public String getLastResponse() { | ||
| − | String response = | + | String response = ""; |
try { | try { | ||
response = future.get(); | response = future.get(); | ||
| Line 138: | Line 137: | ||
} | } | ||
| − | public class IncomingCallable implements Callable | + | public class IncomingCallable implements Callable<String> { |
PrintWriter writer; | PrintWriter writer; | ||
String command; | String command; | ||
| Line 144: | Line 143: | ||
public String call() { | public String call() { | ||
// get response | // get response | ||
| − | String message = | + | String message = ""; |
| − | String lastResponse = | + | String lastResponse = ""; |
try { | try { | ||
| − | while (lastResponse.indexOf( | + | while (lastResponse.indexOf("\r\n\r\n") == -1) { |
message = reader.readLine(); | message = reader.readLine(); | ||
| − | message = message.replace( | + | message = message.replace("\r", "").replace("\n", "") |
| − | + | + | + "\r\n"; |
lastResponse = lastResponse.concat(message); | lastResponse = lastResponse.concat(message); | ||
} | } | ||
| Line 161: | Line 160: | ||
} | } | ||
| − | + | </pre> | |
Latest revision as of 19:43, 26 November 2010
This class shows how to create a program to talk to the Sirit INfinity 510 reader.
/*
* SimpleSiritClient.java
*
* Created: 27.05.2009
* Project: RiFidi SiritClient
* http://www.rifidi.org
* http://rifidi.sourceforge.net
* Copyright: Pramari LLC and the Rifidi Project
* License: Lesser GNU Public License (LGPL)
* http://www.opensource.org/licenses/lgpl-license.html
* Author: Stefan Fahrnbauer - stefan@pramari.com
*/
package sandbox;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* @author Stefan Fahrnbauer - stefan@pramari.com
*
*/
public class SimpleSiritClient {
String ipAddress = "192.168.11.130";
Socket sock;
int port = 50007;
BufferedReader reader;
PrintWriter writer;
Future<String> future;
/**
* @param args
*/
public static void main(String[] args) {
SimpleSiritClient client = new SimpleSiritClient();
client.go();
}
/**
* executes the application
*/
public void go() {
setUpNetworking();
String command = "";
// Login to reader
command = "reader.login(login=admin,pwd=readeradmin)";
processCommand(command);
// let the reader scan for tags for 3 seconds
command = "tag.db.scan_tags(3000)";
processCommand(command);
tearDown();
}
/**
* initializes the connection
*/
public void setUpNetworking() {
try {
// connection for submitting commands
sock = new Socket(this.ipAddress, this.port);
reader = new BufferedReader(new InputStreamReader(sock
.getInputStream()));
writer = new PrintWriter(sock.getOutputStream());
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* closes the connection
*/
public void tearDown() {
try {
sock.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* process command, get response and write to log
*/
public void processCommand(String command) {
// create callable to read response
ExecutorService pool = Executors.newFixedThreadPool(2);
// Callable for Commandchannel
Callable<String> callable = new IncomingCallable();
future = pool.submit(callable);
// send command to reader
sendCommand(command);
// write to log window
System.out.println(">>" + command + "\r\n");
// receive and write response
System.out.println(getLastResponse());
}
/**
* sends command to reader
*/
public void sendCommand(String command) {
// send command to reader
writer.print(command + "\r\n");
writer.flush();
}
/**
* waits for and returns the reader's response
*/
public String getLastResponse() {
String response = "";
try {
response = future.get();
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
public class IncomingCallable implements Callable<String> {
PrintWriter writer;
String command;
public String call() {
// get response
String message = "";
String lastResponse = "";
try {
while (lastResponse.indexOf("\r\n\r\n") == -1) {
message = reader.readLine();
message = message.replace("\r", "").replace("\n", "")
+ "\r\n";
lastResponse = lastResponse.concat(message);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return lastResponse;
}
}
}