@Override
  public void fromData(DataInput in,
      DeserializationContext context) throws IOException, ClassNotFoundException {
    if (DataSerializer.readPrimitiveBoolean(in)) {
      // Indicates that we have a ClientUpdateMessage along with the HAEW instance in inputstream.
      eventIdentifier = context.getDeserializer().readObject(in);
      clientUpdateMessage = new ClientUpdateMessageImpl();
      InternalDataSerializer.invokeFromData(clientUpdateMessage, in);
      ((ClientUpdateMessageImpl) clientUpdateMessage).setEventIdentifier(eventIdentifier);
      if (clientUpdateMessage.hasCqs()) {
        {
          ClientCqConcurrentMap cqMap;
          int size = InternalDataSerializer.readArrayLength(in);
          if (size == -1) {
            cqMap = null;
          } else {
            cqMap = new ClientCqConcurrentMap(size, 1.0f, 1);
            for (int i = 0; i < size; i++) {
              ClientProxyMembershipID key = DataSerializer.readObject(in);
              CqNameToOp value;
              {
                byte typeByte = in.readByte();
                if (typeByte == DSCODE.HASH_MAP.toByte()) {
                  int cqNamesSize = InternalDataSerializer.readArrayLength(in);
                  if (cqNamesSize == -1) {
                    throw new IllegalStateException(
                        "The value of a ConcurrentHashMap is not allowed to be null.");
                  } else if (cqNamesSize == 1) {
                    String cqNamesKey = DataSerializer.readObject(in);
                    Integer cqNamesValue = DataSerializer.readObject(in);
                    value =
                        new CqNameToOpSingleEntry(cqNamesKey, MessageType.valueOf(cqNamesValue));
                  } else if (cqNamesSize == 0) {
                    value = new CqNameToOpSingleEntry();
                  } else {
                    value = new CqNameToOpHashMap(cqNamesSize);
                    for (int j = 0; j < cqNamesSize; j++) {
                      String cqNamesKey = DataSerializer.readObject(in);
                      Integer cqNamesValue = DataSerializer.readObject(in);
                      value.add(cqNamesKey, MessageType.valueOf(cqNamesValue));
                    }
                  }
                } else if (typeByte == DSCODE.NULL.toByte()) {
                  throw new IllegalStateException(
                      "The value of a ConcurrentHashMap is not allowed to be null.");
                } else {
                  throw new IllegalStateException(
                      "Expected DSCODE.NULL or DSCODE.HASH_MAP but read " + typeByte);
                }
              }
              cqMap.put(key, value);
            }
          }
          clientCqs = cqMap;
        }
        ((ClientUpdateMessageImpl) clientUpdateMessage).setClientCqs(clientCqs);
      }
      regionName = clientUpdateMessage.getRegionName();
      keyOfInterest = clientUpdateMessage.getKeyOfInterest();
      shouldConflate = clientUpdateMessage.shouldBeConflated();
      rcUpdater.set(this, 0);
    } else {
      // Read and ignore dummy eventIdentifier instance.
      context.getDeserializer().readObject(in);
      // Read and ignore dummy ClientUpdateMessageImpl instance.
      InternalDataSerializer.invokeFromData(new ClientUpdateMessageImpl(), in);
      // hasCq will be false here, so client CQs are not read from this input
      // stream.
      if (logger.isDebugEnabled()) {
        logger.debug(
            "HAEventWrapper.fromData(): The event has already been sent to the client by the primary server.");
      }
    }
  }
Calls fromData() on ClientUpdateMessage and sets it as its member variable. Also, sets the
referenceCount to zero.

@param in The input stream from which the object should be constructed.
geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java