@Override
  public void waitForMessageState(InternalDistributedMember member,
      Map<String, Long> state) throws InterruptedException, TimeoutException {
    if (Thread.interrupted()) {
      throw new InterruptedException();
    }
    DirectChannel dc = directChannel;
    if (dc != null) {
      dc.waitForChannelState(member, state);
    }
    membership.waitForMessageState(member, state);


    if (mcastEnabled && !tcpDisabled) {
      // GEODE-2865: wait for scheduled multicast messages to be applied to the cache
      waitForSerialMessageProcessing(member);
    }
  }
Perform the grossness associated with sending a message over a DirectChannel

@param destinations the list of destinations
@param content the message
@return all recipients who did not receive the message (null if all received it)
@throws NotSerializableException if the message is not serializable
geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java