use of com.github.dedis.popstellar.repository.LAORepository in project popstellar by dedis.
the class HomeViewModel method onQRCodeDetected.
@Override
public void onQRCodeDetected(Barcode barcode) {
Log.d(TAG, "Detected barcode with value: " + barcode.rawValue);
ConnectToLao data;
try {
data = ConnectToLao.extractFrom(gson, barcode.rawValue);
} catch (JsonParseException e) {
Log.e(TAG, "Invalid QRCode data", e);
Toast.makeText(getApplication().getApplicationContext(), "Invalid QRCode data", Toast.LENGTH_LONG).show();
return;
}
networkManager.connect(data.server);
Lao lao = new Lao(data.lao);
disposables.add(networkManager.getMessageSender().subscribe(lao.getChannel()).doFinally(this::openHome).subscribe(() -> {
Log.d(TAG, "subscribing to LAO with id " + lao.getId());
// Create the new LAO and add it to the LAORepository LAO lists
laoRepository.getLaoById().put(lao.getId(), new LAOState(lao));
laoRepository.setAllLaoSubject();
Log.d(TAG, "got success result for subscribe to lao");
}, error -> ErrorUtils.logAndShow(getApplication(), TAG, error, R.string.error_subscribe_lao)));
setConnectingLao(lao.getId());
openConnecting();
}
use of com.github.dedis.popstellar.repository.LAORepository in project popstellar by dedis.
the class ElectionHandler method handleElectionSetup.
/**
* Process an ElectionSetup message.
*
* @param context the HandlerContext of the message
* @param electionSetup the message that was received
*/
public static void handleElectionSetup(HandlerContext context, ElectionSetup electionSetup) {
LAORepository laoRepository = context.getLaoRepository();
Channel channel = context.getChannel();
MessageID messageId = context.getMessageId();
if (channel.isLaoChannel()) {
Lao lao = laoRepository.getLaoByChannel(channel);
Log.d(TAG, "handleElectionSetup: channel " + channel + " name " + electionSetup.getName());
Election election = new Election(lao.getId(), electionSetup.getCreation(), electionSetup.getName());
election.setChannel(channel.subChannel(election.getId()));
election.setElectionQuestions(electionSetup.getQuestions());
election.setStart(electionSetup.getStartTime());
election.setEnd(electionSetup.getEndTime());
election.setEventState(OPENED);
// Once the election is created, we subscribe to the election channel
context.getMessageSender().subscribe(election.getChannel()).subscribe();
Log.d(TAG, "election id " + election.getId());
lao.updateElection(election.getId(), election);
lao.updateWitnessMessage(messageId, electionSetupWitnessMessage(messageId, election));
}
}
use of com.github.dedis.popstellar.repository.LAORepository in project popstellar by dedis.
the class ElectionHandler method handleCastVote.
/**
* Process a CastVote message.
*
* @param context the HandlerContext of the message
* @param castVote the message that was received
*/
public static void handleCastVote(HandlerContext context, CastVote castVote) {
LAORepository laoRepository = context.getLaoRepository();
Channel channel = context.getChannel();
MessageID messageId = context.getMessageId();
PublicKey senderPk = context.getSenderPk();
Log.d(TAG, "handleCastVote: channel " + channel);
Lao lao = laoRepository.getLaoByChannel(channel);
Election election = laoRepository.getElectionByChannel(channel);
// Verify the vote was created before the end of the election or the election is not closed yet
if (election.getEndTimestamp() >= castVote.getCreation() || election.getState() != CLOSED) {
// Retrieve previous cast vote message stored for the given sender
Optional<MessageID> previousMessageIdOption = election.getMessageMap().entrySet().stream().filter(entry -> senderPk.equals(entry.getValue())).map(Map.Entry::getKey).findFirst();
// Retrieve the creation time of the previous cast vote, if doesn't exist replace with min
// value
long previousMessageCreation = previousMessageIdOption.map(s -> laoRepository.getMessageById().get(s)).map(MessageGeneral::getData).map(CastVote.class::cast).map(CastVote::getCreation).orElse(Long.MIN_VALUE);
// Verify the current cast vote message is the last one received
if (previousMessageCreation <= castVote.getCreation()) {
election.putVotesBySender(senderPk, castVote.getVotes());
election.putSenderByMessageId(senderPk, messageId);
lao.updateElection(election.getId(), election);
}
}
}
use of com.github.dedis.popstellar.repository.LAORepository in project popstellar by dedis.
the class ElectionHandler method handleElectionEnd.
/**
* Process an ElectionEnd message.
*
* @param context the HandlerContext of the message
* @param electionEnd the message that was received
*/
@SuppressWarnings("unused")
public static void handleElectionEnd(HandlerContext context, ElectionEnd electionEnd) {
LAORepository laoRepository = context.getLaoRepository();
Channel channel = context.getChannel();
Log.d(TAG, "handleElectionEnd: channel " + channel);
Lao lao = laoRepository.getLaoByChannel(channel);
Election election = laoRepository.getElectionByChannel(channel);
election.setEventState(CLOSED);
lao.updateElection(election.getId(), election);
}
use of com.github.dedis.popstellar.repository.LAORepository in project popstellar by dedis.
the class ElectionHandler method handleElectionResult.
/**
* Process an ElectionResult message.
*
* @param context the HandlerContext of the message
* @param electionResult the message that was received
*/
public static void handleElectionResult(HandlerContext context, ElectionResult electionResult) throws DataHandlingException {
LAORepository laoRepository = context.getLaoRepository();
Channel channel = context.getChannel();
Log.d(TAG, "handling election result");
Lao lao = laoRepository.getLaoByChannel(channel);
Election election = laoRepository.getElectionByChannel(channel);
List<ElectionResultQuestion> resultsQuestions = electionResult.getElectionQuestionResults();
Log.d(TAG, "size of resultsQuestions is " + resultsQuestions.size());
if (resultsQuestions.isEmpty())
throw new DataHandlingException(electionResult, "the questions results is empty");
election.setResults(resultsQuestions);
election.setEventState(RESULTS_READY);
lao.updateElection(election.getId(), election);
}
Aggregations