Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.apache.helix.messaging;
  
  /*
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
  *
  *   http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
  */
 
 import java.util.Date;
 import java.util.List;
 
 
 public abstract class AsyncCallback {
 
   private static Logger _logger = Logger.getLogger(AsyncCallback.class);
   long _startTimeStamp = 0;
   protected long _timeout = -1;
   Timer _timer = null;
   protected final List<Message_messageReplied = new ArrayList<Message>();
   boolean _timedOut = false;
   boolean _isInterrupted = false;

  
Enforcing timeout to be set

Parameters:
timeout
 
   public AsyncCallback(long timeout) {
     .info("Setting time out to " + timeout + " ms");
      = timeout;
   }
 
   public AsyncCallback() {
     this(-1);
   }
 
   public final void setTimeout(long timeout) {
     .info("Setting time out to " + timeout + " ms");
      = timeout;
 
   }
 
   public List<MessagegetMessageReplied() {
     return ;
   }
 
   public boolean isInterrupted() {
     return ;
   }
 
   public void setInterrupted(boolean b) {
      = true;
   }
 
   public synchronized final void onReply(Message message) {
     .info("OnReply msg " + message.getMessageId());
     if (!isDone()) {
       .add(message);
       try {
         onReplyMessage(message);
       } catch (Exception e) {
         .error(e);
       }
     }
     if (isDone()) {
       if ( != null) {
         .cancel();
       }
       notifyAll();
     }
   }

  
Default implementation will wait until every message sent gets a response

Returns:
 
   public boolean isDone() {
     return .size() == .size();
   }
 
   public boolean isTimedOut() {
    return ;
  }
  final void setMessagesSent(List<MessagegeneratedMessage) {
     = generatedMessage;
  }
  final void startTimer() {
    if ( == null &&  > 0) {
      if ( == 0) {
         = new Date().getTime();
      }
       = new Timer(true);
      .schedule(new TimeoutTask(this), );
    }
  }
  public abstract void onTimeOut();
  public abstract void onReplyMessage(Message message);
  class TimeoutTask extends TimerTask {
    public TimeoutTask(AsyncCallback asyncCallback) {
       = asyncCallback;
    }
    @Override
    public void run() {
      try {
        synchronized () {
          . = true;
          .notifyAll();
          .onTimeOut();
        }
      } catch (Exception e) {
        .error(e);
      } finally {
        if ( != null) {
          .cancel();
        }
      }
    }
  }
New to GrepCode? Check out our FAQ X