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> | <pre> | ||
/* | /* | ||
− | * | + | * SimpleSiritClientNoGUI.java |
* | * | ||
− | * Created: | + | * Created: 27.05.2009 |
* Project: RiFidi SiritClient | * Project: RiFidi SiritClient | ||
* http://www.rifidi.org | * http://www.rifidi.org | ||
Line 12: | Line 12: | ||
* License: Lesser GNU Public License (LGPL) | * License: Lesser GNU Public License (LGPL) | ||
* http://www.opensource.org/licenses/lgpl-license.html | * http://www.opensource.org/licenses/lgpl-license.html | ||
− | * | + | * Author: Stefan Fahrnbauer - stefan@pramari.com |
*/ | */ | ||
package sandbox; | package sandbox; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
import java.io.BufferedReader; | import java.io.BufferedReader; | ||
+ | import java.io.IOException; | ||
import java.io.InputStreamReader; | import java.io.InputStreamReader; | ||
− | |||
import java.io.PrintWriter; | import java.io.PrintWriter; | ||
import java.net.Socket; | 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 SimpleSiritClientNoGUI { | ||
− | + | String ipAddress = "192.168.11.130"; | |
+ | Socket sock; | ||
+ | int port = 50007; | ||
+ | BufferedReader reader; | ||
+ | PrintWriter writer; | ||
− | + | Future<String> future; | |
− | + | ||
− | + | ||
− | + | ||
/** | /** | ||
− | * | + | * @param args |
*/ | */ | ||
− | public | + | public static void main(String[] args) { |
+ | SimpleSiritClientNoGUI client = new SimpleSiritClientNoGUI(); | ||
+ | client.go(); | ||
} | } | ||
/** | /** | ||
− | * | + | * executes the application |
− | + | ||
− | + | ||
− | + | ||
*/ | */ | ||
− | public | + | 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 | + | public void sendCommand(String command) { |
− | // | + | // send command to reader |
− | + | writer.print(command + "\r\n"); | |
− | + | writer.flush(); | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
} | } | ||
/** | /** | ||
− | * | + | * waits for the reader's response |
*/ | */ | ||
− | public | + | public String getLastResponse() { |
− | String | + | 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; | ||
+ | } | ||
} | } | ||
} | } | ||
</pre> | </pre> |
Revision as of 13:59, 27 May 2009
This class shows how to create a program to talk to the Sirit INfinity 510 reader.
/* * SimpleSiritClientNoGUI.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 SimpleSiritClientNoGUI { 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) { SimpleSiritClientNoGUI client = new SimpleSiritClientNoGUI(); 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 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; } } }