main that starts threads added
parent
29f6b244d7
commit
cc3e151a26
|
@ -18,6 +18,7 @@ public class PollingStationClientToyRun {
|
||||||
|
|
||||||
public static void main(String [] args) {
|
public static void main(String [] args) {
|
||||||
int channel = 10;
|
int channel = 10;
|
||||||
|
System.out.println("Message to send: "+channel);
|
||||||
byte[] data = ByteBuffer.allocate(4).putInt(channel).array();
|
byte[] data = ByteBuffer.allocate(4).putInt(channel).array();
|
||||||
// byte[] data = {(byte) 1, (byte) 2};
|
// byte[] data = {(byte) 1, (byte) 2};
|
||||||
|
|
||||||
|
@ -31,6 +32,8 @@ public class PollingStationClientToyRun {
|
||||||
// System.out.println("Channel int retrieved:"+retrieved);
|
// System.out.println("Channel int retrieved:"+retrieved);
|
||||||
|
|
||||||
ScannerClientAPI scannerClient = new ScannerClientAPI(ADDRESS, SUB_ADDRESS, PORT, POLLING_STATION_WEB_SCANNER_SCAN_PATH);
|
ScannerClientAPI scannerClient = new ScannerClientAPI(ADDRESS, SUB_ADDRESS, PORT, POLLING_STATION_WEB_SCANNER_SCAN_PATH);
|
||||||
scannerClient.sendScan(scannedData);
|
boolean sent = scannerClient.sendScan(scannedData);
|
||||||
|
|
||||||
|
System.out.println("Message sent successfully: "+sent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
package meerkat.pollingstation;
|
package meerkat.pollingstation;
|
||||||
|
|
||||||
import com.google.common.util.concurrent.FutureCallback;
|
import meerkat.pollingstation.controller.PollingStationControllerInterface;
|
||||||
import meerkat.pollingstation.controller.commands.PollingStationCommand;
|
import meerkat.pollingstation.controller.commands.PollingStationCommand;
|
||||||
import meerkat.pollingstation.controller.commands.ReceivedScanCommand;
|
import meerkat.pollingstation.controller.commands.ReceivedScanCommand;
|
||||||
import meerkat.protobuf.PollingStation;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -12,7 +11,7 @@ import java.util.concurrent.LinkedBlockingQueue;
|
||||||
/**
|
/**
|
||||||
* Created by Laura on 3/20/2017.
|
* Created by Laura on 3/20/2017.
|
||||||
*/
|
*/
|
||||||
public class PollingStationMainController {
|
public class PollingStationMainController implements PollingStationControllerInterface {
|
||||||
private final Logger logger = LoggerFactory.getLogger(PollingStationMainController.class);
|
private final Logger logger = LoggerFactory.getLogger(PollingStationMainController.class);
|
||||||
|
|
||||||
private LinkedBlockingQueue<PollingStationCommand> queue;
|
private LinkedBlockingQueue<PollingStationCommand> queue;
|
||||||
|
@ -28,11 +27,13 @@ public class PollingStationMainController {
|
||||||
shutDownHasBeenCalled = false;
|
shutDownHasBeenCalled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start() throws Exception {
|
@Override
|
||||||
server = new ReceiverScanHandler(PORT, SUB_ADDRESS);
|
public void init(ReceiverScanHandler server) {
|
||||||
server.setControllerQueue(queue);
|
server.setControllerQueue(queue);
|
||||||
try {
|
}
|
||||||
server.start();
|
|
||||||
|
public void run() {
|
||||||
|
logger.info("Started controller");
|
||||||
while (! wasShutDownCalled()) {
|
while (! wasShutDownCalled()) {
|
||||||
try {
|
try {
|
||||||
PollingStationCommand command = queue.take();
|
PollingStationCommand command = queue.take();
|
||||||
|
@ -42,9 +43,6 @@ public class PollingStationMainController {
|
||||||
System.err.println("Interrupted while reading from command queue " + e);
|
System.err.println("Interrupted while reading from command queue " + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
System.err.println("Could not start server: " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean wasShutDownCalled () {
|
private boolean wasShutDownCalled () {
|
||||||
|
@ -68,7 +66,7 @@ public class PollingStationMainController {
|
||||||
|
|
||||||
// decide which method to run according to the command type
|
// decide which method to run according to the command type
|
||||||
if (command instanceof ReceivedScanCommand) {
|
if (command instanceof ReceivedScanCommand) {
|
||||||
doProcessScan ();
|
doProcessScan((ReceivedScanCommand) command);
|
||||||
}
|
}
|
||||||
// else if (command instanceof ChannelChoiceCommand) {
|
// else if (command instanceof ChannelChoiceCommand) {
|
||||||
// doChooseChannel();
|
// doChooseChannel();
|
||||||
|
@ -80,8 +78,9 @@ public class PollingStationMainController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doProcessScan() {
|
private void doProcessScan(ReceivedScanCommand command) {
|
||||||
|
logger.info("The Polling Station starts processing the data...");
|
||||||
|
logger.info("BallotID = "+command.getBallotSerialNumber());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -91,4 +90,10 @@ public class PollingStationMainController {
|
||||||
private void doReportErrorAndForceRestart(String errorMessage) {
|
private void doReportErrorAndForceRestart(String errorMessage) {
|
||||||
queue.clear();
|
queue.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
// TODO: 4/16/2017 Implemet the shutdown behavior
|
||||||
|
public void callShutDown() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,15 +13,26 @@ public class PollingStationToyRun {
|
||||||
public static void main(String [] args) {
|
public static void main(String [] args) {
|
||||||
System.err.println("Setting up Scanner WebApp!");
|
System.err.println("Setting up Scanner WebApp!");
|
||||||
|
|
||||||
scanner = new ReceiverScanHandler(PORT, SUB_ADDRESS);
|
// scanner = new ReceiverScanHandler(PORT, SUB_ADDRESS);
|
||||||
|
//
|
||||||
|
// try {
|
||||||
|
// scanner.start();
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// System.err.println("Could not start server: " + e.getMessage());
|
||||||
|
// }
|
||||||
|
|
||||||
try {
|
ReceiverScanHandler serverController = new ReceiverScanHandler(PORT, SUB_ADDRESS);
|
||||||
scanner.start();
|
PollingStationMainController controller = new PollingStationMainController();
|
||||||
} catch (Exception e) {
|
controller.init(serverController);
|
||||||
e.printStackTrace();
|
|
||||||
System.err.println("Could not start server: " + e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
Thread controllerThread = new Thread(controller);
|
||||||
|
controllerThread.setName("Meerkat PS-Controller Thread");
|
||||||
|
Thread serverThread = new Thread(serverController);
|
||||||
|
serverThread.setName("Meerkat PS-ServerScanner Thread");
|
||||||
|
|
||||||
|
controllerThread.start();
|
||||||
|
serverThread.start();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ import java.util.concurrent.LinkedBlockingQueue;
|
||||||
/**
|
/**
|
||||||
* Created by Laura on 3/20/2017.
|
* Created by Laura on 3/20/2017.
|
||||||
*/
|
*/
|
||||||
public class ReceiverScanHandler implements PollingStationScanner.Consumer{
|
public class ReceiverScanHandler implements PollingStationScanner.Consumer, Runnable{
|
||||||
|
|
||||||
public final static String CALLBACKS_ATTRIBUTE_NAME = "controller";
|
public final static String CALLBACKS_ATTRIBUTE_NAME = "controller";
|
||||||
|
|
||||||
|
@ -66,12 +66,19 @@ public class ReceiverScanHandler implements PollingStationScanner.Consumer{
|
||||||
return shutDownHasBeenCalled;
|
return shutDownHasBeenCalled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
start();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
System.err.println("Could not start server: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() throws Exception {
|
public void start() throws Exception {
|
||||||
server.start();
|
server.start();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
while (! wasShutDownCalled()) {
|
while (! wasShutDownCalled()) {
|
||||||
try {
|
try {
|
||||||
handleSingleCallback(queue.take());
|
handleSingleCallback(queue.take());
|
||||||
|
@ -94,7 +101,6 @@ public class ReceiverScanHandler implements PollingStationScanner.Consumer{
|
||||||
|
|
||||||
|
|
||||||
private void handleSingleCallback(ScanCallback callback) {
|
private void handleSingleCallback(ScanCallback callback) {
|
||||||
System.out.println(callback.toString());
|
|
||||||
if (callback instanceof ScanDataCallback) {
|
if (callback instanceof ScanDataCallback) {
|
||||||
doScannedData((ScanDataCallback) callback);
|
doScannedData((ScanDataCallback) callback);
|
||||||
}
|
}
|
||||||
|
@ -109,13 +115,11 @@ public class ReceiverScanHandler implements PollingStationScanner.Consumer{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: parse fields of protobuf properly
|
// TODO: 4/16/2017 Parse protobuf fields properly
|
||||||
private void doScannedData(ScanDataCallback cb) {
|
private void doScannedData(ScanDataCallback cb) {
|
||||||
PollingStation.ScannedData scan = cb.getScannedData();
|
PollingStation.ScannedData scan = cb.getScannedData();
|
||||||
int channel = ByteBuffer.wrap(scan.getChannel().toByteArray()).getInt();
|
int channel = ByteBuffer.wrap(scan.getChannel().toByteArray()).getInt();
|
||||||
long channelLong = 12345678910L;
|
long channelLong = 12345678910L;
|
||||||
System.out.println("Channel int:"+channel);
|
|
||||||
System.out.println("Channel int:"+channelLong);
|
|
||||||
controllerQueue.add(new ReceivedScanCommand(channel, channelLong));
|
controllerQueue.add(new ReceivedScanCommand(channel, channelLong));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class ReceiverWebAPI implements PollingStationScanner.Producer {
|
||||||
@Override
|
@Override
|
||||||
public BoolValue newScan(PollingStation.ScannedData scannedData) {
|
public BoolValue newScan(PollingStation.ScannedData scannedData) {
|
||||||
|
|
||||||
boolean handled = false;
|
boolean sent = false;
|
||||||
|
|
||||||
// for (FutureCallback<PollingStation.ScannedData> callback : callbacks){
|
// for (FutureCallback<PollingStation.ScannedData> callback : callbacks){
|
||||||
//
|
//
|
||||||
|
@ -63,14 +63,17 @@ public class ReceiverWebAPI implements PollingStationScanner.Producer {
|
||||||
// handled = true;
|
// handled = true;
|
||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
|
try {
|
||||||
ScanDataCallback callback = new ScanDataCallback(scannedData);
|
ScanDataCallback callback = new ScanDataCallback(scannedData);
|
||||||
// scanner.subscribe(callback);
|
// scanner.subscribe(callback);
|
||||||
callbacks.add(callback);
|
callbacks.add(callback);
|
||||||
|
sent = true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
return BoolValue.newBuilder()
|
return BoolValue.newBuilder()
|
||||||
.setValue(handled)
|
.setValue(sent)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,15 +31,27 @@ public class ScannerClientAPI {
|
||||||
.path(sub_address).path(path);
|
.path(sub_address).path(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendScan(PollingStation.ScannedData scannedData) {
|
/**
|
||||||
|
* Sends the scanned data to the polling station server
|
||||||
|
* @param scannedData
|
||||||
|
* @return boolean value: true if the data was sent successfully, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean sendScan(PollingStation.ScannedData scannedData) {
|
||||||
Response response = webTarget.request(Constants.MEDIATYPE_PROTOBUF).post(Entity.entity(scannedData, Constants.MEDIATYPE_PROTOBUF));
|
Response response = webTarget.request(Constants.MEDIATYPE_PROTOBUF).post(Entity.entity(scannedData, Constants.MEDIATYPE_PROTOBUF));
|
||||||
BoolValue res = response.readEntity(BoolValue.class);
|
BoolValue res = response.readEntity(BoolValue.class);
|
||||||
System.out.println(res.toString());
|
|
||||||
response.close();
|
response.close();
|
||||||
|
return res.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendError(PollingStation.ErrorMsg errorMsg) {
|
/**
|
||||||
|
* Sends the error message to the polling station server
|
||||||
|
* @param errorMsg
|
||||||
|
* @return boolean value: true if the error message was sent successfully, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean sendError(PollingStation.ErrorMsg errorMsg) {
|
||||||
Response response = webTarget.request(Constants.MEDIATYPE_PROTOBUF).post(Entity.entity(errorMsg, Constants.MEDIATYPE_PROTOBUF));
|
Response response = webTarget.request(Constants.MEDIATYPE_PROTOBUF).post(Entity.entity(errorMsg, Constants.MEDIATYPE_PROTOBUF));
|
||||||
|
BoolValue res = response.readEntity(BoolValue.class);
|
||||||
response.close();
|
response.close();
|
||||||
|
return res.getValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package meerkat.pollingstation.controller;
|
||||||
|
|
||||||
|
import meerkat.pollingstation.ReceiverScanHandler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An interface for the controller component of the polling station
|
||||||
|
*/
|
||||||
|
public interface PollingStationControllerInterface extends Runnable {
|
||||||
|
/**
|
||||||
|
* initialize by setting all the different components of the Polling Station to be recognized by this controller
|
||||||
|
* (see VotingBoothController)
|
||||||
|
*/
|
||||||
|
// TODO: 4/16/2017 complete with proper arguments and exceptions
|
||||||
|
public void init(ReceiverScanHandler server);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* an asynchronous call from Admin Console (If there is such one implemented) to shut down the system
|
||||||
|
*/
|
||||||
|
public void callShutDown();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -34,7 +34,6 @@ public class ProtobufMessageBodyWriter implements MessageBodyWriter<Message> {
|
||||||
public void writeTo(Message message, Class<?> type, Type genericType, Annotation[] annotations,
|
public void writeTo(Message message, Class<?> type, Type genericType, Annotation[] annotations,
|
||||||
MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream)
|
MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream)
|
||||||
throws IOException, WebApplicationException {
|
throws IOException, WebApplicationException {
|
||||||
System.out.println("protobufmessagebodywriter");
|
|
||||||
message.writeTo(entityStream);
|
message.writeTo(entityStream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue