@Override
  public synchronized void on(
      final String event, final IOAcknowledge arg1, final Object... jsonData) {

    final SIOTurnoutCallbackEvent serviceEvent = SIOTurnoutCallbackEvent.fromEvent(event);
    if (serviceEvent == null) {
      return;
    }

    LOGGER.info("on(message: " + event + ", args: " + jsonData.toString() + ")");
    try {
      switch (serviceEvent) {
        case TURNOUT_INIT:
          SIOTurnoutCallbackEventHandler.handleTurnoutInit((JSONArray) jsonData[0], listener);
          break;
        case TURNOUT_ADDED:
          SIOTurnoutCallbackEventHandler.handleTurnoutAdded((JSONObject) jsonData[0], listener);
          break;
        case TURNOUT_GROUP_ADDED:
          SIOTurnoutCallbackEventHandler.handleTurnoutGroupAdded(
              (JSONObject) jsonData[0], listener);
          break;
        case TURNOUT_GROUP_REMOVED:
          SIOTurnoutCallbackEventHandler.handleTurnoutGroupRemoved(
              (JSONObject) jsonData[0], listener);
          break;
        case TURNOUT_GROUP_UPDATED:
          SIOTurnoutCallbackEventHandler.handleTurnoutGroupUpdated(
              (JSONObject) jsonData[0], listener);
          break;
        case TURNOUT_REMOVED:
          SIOTurnoutCallbackEventHandler.handleTurnoutRemoved((JSONObject) jsonData[0], listener);
          break;
        case TURNOUT_UPDATED:
          SIOTurnoutCallbackEventHandler.handleTurnoutUpdated((JSONObject) jsonData[0], listener);
          break;
        default:
          listener.failure(new ManagerException("unrecognized event '" + event + "' received"));
          break;
      }
    } catch (final JSONException e) {
      listener.failure(new ManagerException("error parsing event '" + event + "'", e));
    }
  }
 @Override
 public void onError(final SocketIOException arg0) {
   listener.failure(new ManagerException("failure in communication with adhoc-server", arg0));
 }