@Override public void onSuccess(Boolean result) { log.debug("Completed 'message' event: {}", messageEventType.name()); }
@Override public void run() { while (!(monitorHidExecutorService.isShutdown() || monitorHidExecutorService.isTerminated())) { // Wait for 10 seconds for a response (this is so that the monitorExecutorService can shut down cleanly) Optional<MessageEvent> messageEvent = readMessage(10, TimeUnit.SECONDS); if (messageEvent.isPresent()) { if (MessageEventType.DEVICE_FAILED.equals(messageEvent.get().getEventType())) { // Stop reading messages on this thread for a short while to allow recovery time Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); } else { // Fire the event MessageEvents.fireMessageEvent(messageEvent.get()); } } } } });
@Override public void run() { while (!(monitorHidExecutorService.isShutdown() || monitorHidExecutorService.isTerminated())) { // Wait for 10 seconds for a response (this is so that the monitorExecutorService can shut down cleanly) Optional<MessageEvent> messageEvent = readMessage(10, TimeUnit.SECONDS); if (messageEvent.isPresent()) { if (MessageEventType.DEVICE_FAILED.equals(messageEvent.get().getEventType())) { // Stop reading messages on this thread for a short while to allow recovery time Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); } else { // Fire the event MessageEvents.fireMessageEvent(messageEvent.get()); } } } } });
@Override public void onFailure(Throwable t) { log.error("Failed to complete 'message' event: {}", messageEventType.name(), t); } });
@Override public void run() { while (true) { log.debug("Waiting for hardware wallet message..."); Optional<MessageEvent> messageEvent = hardwareWallet.readMessage(1, TimeUnit.MINUTES); if (messageEvent.isPresent()) { if (MessageEventType.DEVICE_FAILED.equals(messageEvent.get().getEventType())) { // Stop reading messages on this thread for a short while to allow recovery time Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); } else { // Send the Message back to the client log.debug("Sending raw message to client"); writeMessage(messageEvent.get().getRawMessage().get(), outputToClient); } } } }
@Override public void onFailure(Throwable t) { log.error("Failed to complete 'message' event: {}", event.getEventType().name(), t); } });
@Override public void run() { while (true) { log.debug("Waiting for hardware wallet message..."); Optional<MessageEvent> messageEvent = hardwareWallet.readMessage(1, TimeUnit.MINUTES); if (messageEvent.isPresent()) { if (MessageEventType.DEVICE_FAILED.equals(messageEvent.get().getEventType())) { // Stop reading messages on this thread for a short while to allow recovery time Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); } else { // Send the Message back to the client log.debug("Sending raw message to client"); writeMessage(messageEvent.get().getRawMessage().get(), outputToClient); } } } }
@Override public void onSuccess(Boolean result) { log.debug("Completed 'message' event: {}", event.getEventType().name()); }
@Override public Boolean call() { log.debug("Firing 'message' event type: {} for {}", messageEventType.name(), source); messageEventBus.post( new MessageEvent( messageEventType, Optional.<HardwareWalletMessage>absent(), Optional.<Message>absent(), source)); // Must be OK to be here return true; } });
@Override public Boolean call() { log.debug("Firing 'message' event: {} for {}", event.getEventType().name(), event.getSource()); messageEventBus.post(event); // Must be OK to be here return true; } });
@Subscribe public void onHardwareWalletProtocolEvent(MessageEvent event) { // Decode into a message type for use with a switch MessageEventType eventType = event.getEventType(); // Protocol message log.debug("Received event: {}", eventType.name()); log.debug("{}", event.getMessage().toString()); // Add the event to the queue for blocking purposes messageEvents.add(event); }
@Subscribe public void onHardwareWalletProtocolEvent(MessageEvent event) { // Decode into a message type for use with a switch MessageEventType eventType = event.getEventType(); // Protocol message log.debug("Received event: {}", eventType.name()); log.debug("{}", event.getMessage().toString()); // Add the event to the queue for blocking purposes messageEvents.add(event); }
/** * @param event The low level message event */ @Subscribe public void onMessageEvent(MessageEvent event) { // Filter messages not associated with this context if (!getClient().name().equalsIgnoreCase(event.getSource())) { log.debug("Discarded message event: '{}' (different device)", event.getEventType().name()); return; } log.debug("Received message event: '{}'", event.getEventType().name()); // Perform a state transition as a result of this event try { currentState.transition(client, this, event); } catch (Exception e) { e.printStackTrace(); } }
/** * <p>Provide standard handling for an unexpected message so the downstream consumer can react appropriately</p> * * @param context The current context providing parameters for decisions * @param event The event driving the transition */ protected void handleUnexpectedMessageEvent(HardwareWalletContext context, MessageEvent event) { log.warn("Unexpected message event '{}'", event.getEventType().name()); if (event.getMessage().isPresent()) { HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_OPERATION_FAILED, event.getMessage().get(), context.getClient().name()); } else { HardwareWalletEvents.fireHardwareWalletEvent(HardwareWalletEventType.SHOW_OPERATION_FAILED, context.getClient().name()); } context.resetToConnected(); } }