Package freenet.client.connection

Source Code of freenet.client.connection.KeepaliveManager

package freenet.client.connection;

import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.Timer;

import freenet.client.FreenetJs;
import freenet.client.UpdaterConstants;
import freenet.client.l10n.L10n;
import freenet.client.messages.Message;
import freenet.client.messages.MessageManager;
import freenet.client.messages.Priority;
import freenet.client.tools.FreenetRequest;
import freenet.client.tools.QueryParameter;

/**
* This ConnectionManager sends a keepalive message periodically to notify the server that the page is still open. If a keepalive fails, it tells the client that the server already
* cleaned up this request.
*/
public class KeepaliveManager implements IConnectionManager {

  /** The timer that schedules the periodic message */
  private KeepaliveTimer  timer      = new KeepaliveTimer();

  /** Is it cancelled already? */
  private boolean      cancelled    = false;

  /** Does the first keepalive succeded? */
  private boolean      firstSuccess  = false;

  @Override
  public void closeConnection() {
    timer.cancel();
    // If it wasn't cancelled, then we show a message about pushing cancelled. It makes sure that this message shows only once
    if (cancelled == false) {
      if (FreenetJs.isPushingCancelledExpected == false) {
        MessageManager.get().addMessage(new Message(L10n.get("pushingCancelled"), Priority.ERROR, null, true));
      }
      cancelled = true;
    }
  }

  @Override
  public void openConnection() {
    timer.run();
    timer.scheduleRepeating(UpdaterConstants.KEEPALIVE_INTERVAL_SECONDS * 1000);
  }

  /** This class is a Timer that sends a keepalive message periodically */
  private class KeepaliveTimer extends Timer {
    @Override
    public void run() {
      FreenetRequest.sendRequest(UpdaterConstants.keepalivePath, new QueryParameter("requestId", FreenetJs.requestId), new RequestCallback() {
        @Override
        public void onResponseReceived(Request request, Response response) {
          // If not success, then close the connection
          if (response.getText().compareTo(UpdaterConstants.SUCCESS) != 0) {
            if (firstSuccess == false) {
              FreenetJs.isPushingCancelledExpected = true;
            }
            closeConnection();
          } else {
            firstSuccess = true;
          }
        }

        @Override
        public void onError(Request request, Throwable exception) {
          // If the server responded with error, close the connection
          closeConnection();
        }
      });
    }
  }
}
TOP

Related Classes of freenet.client.connection.KeepaliveManager$KeepaliveTimer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.