use of com.github.dedis.popstellar.model.network.method.message.data.Data in project popstellar by dedis.
the class MessageHandler method handleMessage.
/**
* Send messages to the corresponding handler.
*
* @param laoRepository the repository to access the messages and LAOs
* @param messageSender the service used to send messages to the backend
* @param channel the channel on which the message was received
* @param message the message that was received
*/
public void handleMessage(LAORepository laoRepository, MessageSender messageSender, Channel channel, MessageGeneral message) throws DataHandlingException {
Log.d(TAG, "handle incoming message");
// Put the message in the state
laoRepository.getMessageById().put(message.getMessageId(), message);
Data data = message.getData();
Log.d(TAG, "data with class: " + data.getClass());
Objects dataObj = Objects.find(data.getObject());
Action dataAction = Action.find(data.getAction());
registry.handle(new HandlerContext(laoRepository, keyManager, messageSender, channel, message), data, dataObj, dataAction);
notifyLaoUpdate(laoRepository, data, channel);
}
use of com.github.dedis.popstellar.model.network.method.message.data.Data in project popstellar by dedis.
the class LAONetworkManagerTest method publishSendsRightMessage.
@Test
public void publishSendsRightMessage() {
TestSchedulerProvider schedulerProvider = new TestSchedulerProvider();
TestScheduler testScheduler = schedulerProvider.getTestScheduler();
LAONetworkManager networkManager = new LAONetworkManager(laoRepository, handler, connection, JsonModule.provideGson(DataRegistryModule.provideDataRegistry()), schedulerProvider);
Answer<?> answer = args -> {
// Retrieve subscribe object
Publish publish = args.getArgument(0);
// Make sure the channel is correct
assertEquals(CHANNEL, publish.getChannel());
MessageGeneral messageGeneral = publish.getMessage();
assertEquals(DATA, messageGeneral.getData());
// Return a positive result
messages.onNext(new Result(publish.getRequestId()));
return null;
};
doAnswer(answer).when(connection).sendMessage(any(Publish.class));
// Actual test
Disposable disposable = networkManager.publish(KEY_PAIR, CHANNEL, DATA).subscribe();
testScheduler.advanceTimeBy(5, TimeUnit.SECONDS);
disposable.dispose();
networkManager.dispose();
verify(connection).sendMessage(any(Publish.class));
verify(connection, atLeastOnce()).observeMessage();
verify(connection).observeConnectionEvents();
verify(connection).close();
verifyNoMoreInteractions(connection);
}
use of com.github.dedis.popstellar.model.network.method.message.data.Data in project popstellar by dedis.
the class JsonDataSerializer method deserialize.
@Override
public Data deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject obj = json.getAsJsonObject();
JsonUtils.verifyJson(JsonUtils.DATA_SCHEMA, obj.toString());
Objects object = Objects.find(obj.get(OBJECT).getAsString());
Action action = Action.find(obj.get(ACTION).getAsString());
if (object == null) {
throw new JsonParseException("Unknown object type : " + obj.get(OBJECT).getAsString());
}
if (action == null) {
throw new JsonParseException("Unknown action type : " + obj.get(ACTION).getAsString());
}
Optional<Class<? extends Data>> clazz = dataRegistry.getType(object, action);
if (!clazz.isPresent()) {
throw new JsonParseException("The pair (" + object.getObject() + ", " + action.getAction() + ") does not exists in the protocol");
}
return context.deserialize(json, clazz.get());
}
use of com.github.dedis.popstellar.model.network.method.message.data.Data in project popstellar by dedis.
the class JsonMessageGeneralSerializer method deserialize.
@Override
public MessageGeneral deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonMessageData jsonObject = context.deserialize(json, JsonMessageData.class);
JsonElement dataElement = JsonParser.parseString(new String(jsonObject.data.getData(), StandardCharsets.UTF_8));
Data data = context.deserialize(dataElement, Data.class);
return new MessageGeneral(jsonObject.sender, jsonObject.data, data, jsonObject.signature, jsonObject.messageID, jsonObject.witnessSignatures);
}
Aggregations