public void lastResult(Object oneResult, DistributedMember memberID) {
    if (!functionObject.hasResult()) {
      throw new IllegalStateException(
          String.format("Cannot %s result as the Function#hasResult() is false",
              "send"));
    }
    localLastResultReceived = true;
    if (sender != null) { // Client-Server
      sender.lastResult(oneResult, memberID);
      if (rc != null) {
        rc.endResults();
      }
    } else {
      if (isLocal) {
        rc.addResult(memberID, oneResult);
        rc.endResults();
      } else {
        try {
          msg.sendReplyForOneResult(dm, oneResult, true, enableOrderedResultStreming);
        } catch (ForceReattemptException e) {
          throw new FunctionException(e);
        } catch (InterruptedException e) {
          throw new FunctionException(e);
        }
      }
      // incrementing result sent stats.
      if (dm == null) {
        FunctionStatsManager.getFunctionStats(functionObject.getId()).incResultsReceived();
      } else {
        FunctionStatsManager.getFunctionStats(functionObject.getId(), dm.getSystem())
            .incResultsReceived();
      }
    }

  }
Have to combine next two construcotr in one and make a new class which will send Results back.
geode-core/src/main/java/org/apache/geode/internal/cache/execute/DistributedRegionFunctionResultSender.java