@Override public void incomingDataFromServer(TransportMessage transportMessage) { if (!mix.isLastMix()) throw new RuntimeException( "ERROR: BasicSynchronousBatch only supports NoneMixMessages as reply from distant proxy!"); clientReplyWaitingQueues .get(transportMessage.getOwner().getIdentifier()) .add(transportMessage); }
private void createReplyBatchFromUserData() { Vector<MixMessage> batch = new Vector<MixMessage>(simulator.getClients().size()); for (AbstractClient client : simulator.getClients().values()) { Vector<TransportMessage> replyWaitingQueue = clientReplyWaitingQueues.get(client.getIdentifier()); boolean isDummy = replyWaitingQueue.size() == 0 ? true : false; MixMessage mixMessage = createDummyMessage(client); if (isDummy) { batch.add(mixMessage); } else { for (int i = 0; i < replyWaitingQueue.size(); i++) { TransportMessage noneMixMessage = replyWaitingQueue.get(i); if (mixMessage.getFreeSpace() >= noneMixMessage.getLength() && !noneMixMessage.isFragmented()) { // noneMixMessage fits in mixMessage completely replyWaitingQueue.remove(noneMixMessage); i--; mixMessage.addPayloadObject(noneMixMessage); } else { // add Fragment if (noneMixMessage.hasNextFragment()) { MessageFragment messageFragment = noneMixMessage.getFragment(mixMessage.getFreeSpace()); mixMessage.addPayloadObject(messageFragment); } if (!noneMixMessage.hasNextFragment()) { replyWaitingQueue.remove(i); i--; } } if (mixMessage.getFreeSpace() == 0) break; } batch.add(mixMessage); } } Collections.shuffle(batch); for (MixMessage mixMessage : batch) mix.putOutRequest(mixMessage); }