Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(618)

Unified Diff: third_party/cacheinvalidation/src/java/com/google/ipc/invalidation/external/client/SystemResources.java

Issue 1162033004: Pull cacheinvalidations code directory into chromium repo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/cacheinvalidation/src/java/com/google/ipc/invalidation/external/client/SystemResources.java
diff --git a/third_party/cacheinvalidation/src/java/com/google/ipc/invalidation/external/client/SystemResources.java b/third_party/cacheinvalidation/src/java/com/google/ipc/invalidation/external/client/SystemResources.java
new file mode 100644
index 0000000000000000000000000000000000000000..e93b73a91e68898c23612bf2d8702e4fd640eb0e
--- /dev/null
+++ b/third_party/cacheinvalidation/src/java/com/google/ipc/invalidation/external/client/SystemResources.java
@@ -0,0 +1,211 @@
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.ipc.invalidation.external.client;
+
+import com.google.ipc.invalidation.external.client.types.Callback;
+import com.google.ipc.invalidation.external.client.types.SimplePair;
+import com.google.ipc.invalidation.external.client.types.Status;
+import com.google.ipc.invalidation.util.BaseLogger;
+
+/**
+ * Interfaces for the system resources used by the Ticl. System resources are an abstraction layer
+ * over the host operating system that provides the Ticl with the ability to schedule events, send
+ * network messages, store data, and perform logging.
+ * <p>
+ * NOTE: All the resource types and SystemResources are required to be thread-safe.
+ *
+ */
+public interface SystemResources {
+
+ /** Interface specifying the logging functionality provided by {@link SystemResources}. */
+ public interface Logger extends BaseLogger, ResourceComponent {}
+
+ /** Interface specifying the scheduling functionality provided by {@link SystemResources}. */
+ public interface Scheduler extends ResourceComponent {
+
+ /** Symbolic constant representing no scheduling delay, for readability. */
+ static final int NO_DELAY = 0;
+
+ /**
+ * Schedules {@code runnable} to be run on scheduler's thread after at least {@code delayMs}
+ * milliseconds.
+ */
+ void schedule(int delayMs, Runnable runnable);
+
+ /** Returns whether the current code is executing on the scheduler's thread. */
+ boolean isRunningOnThread();
+
+ /**
+ * Returns the current time in milliseconds since *some* epoch (NOT necessarily the UNIX epoch).
+ * The only requirement is that this time advance at the rate of real time.
+ */
+ long getCurrentTimeMs();
+ }
+
+ /** Interface specifying the network functionality provided by {@link SystemResources}. */
+ public interface NetworkChannel extends ResourceComponent {
+ /** Interface implemented by listeners for network events. */
+ public interface NetworkListener {
+ /** Upcall made when a network message has been received from the data center. */
+ // Implementation note: this is currently a serialized ServerToClientMessage protocol buffer.
+ // Implementors MAY NOT rely on this fact.
+ void onMessageReceived(byte[] message);
+
+ /**
+ * Upcall made when the network online status has changed. It will be invoked with
+ * a boolean indicating whether the network is connected.
+ * <p>
+ * This is a best-effort upcall. Note that indicating incorrectly that the network is
+ * connected can result in unnecessary calls for {@link #sendMessage}. Incorrect information
+ * that the network is disconnected can result in messages not being sent by the client
+ * library.
+ */
+ void onOnlineStatusChange(boolean isOnline);
+
+ /**
+ * Upcall made when the network address has changed. Note that the network channel
+ * implementation is responsible for determining what constitutes the network address and what
+ * it means to have it change.
+ * <p>
+ * This is a best-effort call; however, failure to invoke it may prevent the client from
+ * receiving messages and cause it to behave as though offline until its next heartbeat.
+ */
+ void onAddressChange();
+ }
+
+ /** Sends {@code outgoingMessage} to the data center. */
+ // Implementation note: this is currently a serialized ClientToServerMessage protocol buffer.
+ // Implementors MAY NOT rely on this fact.
+ void sendMessage(byte[] outgoingMessage);
+
+ /**
+ * Sets the {@link NetworkListener} to which events will be delivered.
+ * <p>
+ * REQUIRES: no listener already be registered.
+ */
+ void setListener(NetworkListener listener);
+ }
+
+ /**
+ * Interface specifying the storage functionality provided by {@link SystemResources}. Basically,
+ * the required functionality is a small subset of the method of a regular hash map.
+ */
+ public interface Storage extends ResourceComponent {
+
+ /**
+ * Attempts to persist {@code value} for the given {@code key}. Invokes {@code done} when
+ * finished, passing a value that indicates whether it was successful.
+ * <p>
+ * Note: If a wrie W1 finishes unsuccessfully and then W2 is issued for the same key and W2
+ * finishes successfully, W1 must NOT later overwrite W2.
+ * <p>
+ * REQUIRES: Neither {@code key} nor {@code value} is null.
+ */
+ void writeKey(String key, byte[] value, Callback<Status> done);
+
+ /**
+ * Reads the value corresponding to {@code key} and calls {@code done} with the result.
+ * If it finds the key, passes a success status and the value. Else passes a failure status
+ * and a null value.
+ */
+ void readKey(String key, Callback<SimplePair<Status, byte[]>> done);
+
+ /**
+ * Deletes the key, value pair corresponding to {@code key}. If the deletion succeeds, calls
+ * {@code done} with true; else calls it with false. A deletion of a key that does not exist
+ * is considered to have succeeded.
+ */
+ void deleteKey(String key, Callback<Boolean> done);
+
+ /**
+ * Reads all the keys from the underlying store and then calls {@code keyCallback} with
+ * each key that was written earlier and not deleted. When all the keys are done, calls
+ * {@code keyCallback} with {@code null}. With each key, the code can indicate a
+ * failed status, in which case the iteration stops.
+ */
+ void readAllKeys(Callback<SimplePair<Status, String>> keyCallback);
+ }
+
+ /**
+ * Interface for a component of a {@link SystemResources} implementation constructed by calls to
+ * set* methods of {@link SystemResourcesBuilder}.
+ * <p>
+ * The SystemResourcesBuilder allows applications to create a single {@link SystemResources}
+ * implementation by composing individual building blocks, each of which implements one of the
+ * four required interfaces ({@link Logger}, {@link Storage}, {@link NetworkChannel},
+ * {@link Scheduler}).
+ * <p>
+ * However, each interface implementation may require functionality from another. For example, the
+ * network implementation may need to do logging. In order to allow this, we require that the
+ * interface implementations also implement {@code ResourceComponent}, which specifies the single
+ * method {@link #setSystemResources}. It is guaranteed that this method will be invoked exactly
+ * once on each interface implementation and before any other calls are made. Implementations can
+ * then save a reference to the provided resources for later use.
+ * <p>
+ * Note: for the obvious reasons of infinite recursion, implementations should not attempt to
+ * access themselves through the provided {@link SystemResources}.
+ */
+ public interface ResourceComponent {
+
+ /** Supplies a {@link SystemResources} instance to the component. */
+ void setSystemResources(SystemResources resources);
+ }
+
+ //
+ // End of nested interfaces
+ //
+
+ /**
+ * Starts the resources.
+ * <p>
+ * REQUIRES: This method is called before the resources are used.
+ */
+ void start();
+
+ /**
+ * Stops the resources. After this point, all the resources will eventually stop doing any work
+ * (e.g., scheduling, sending/receiving messages from the network etc). They will eventually
+ * convert any further operations to no-ops.
+ * <p>
+ * REQUIRES: Start has been called.
+ */
+ void stop();
+
+ /** Returns whether the resources are started. */
+ boolean isStarted();
+
+ /**
+ * Returns information about the client operating system/platform, e.g., Windows, ChromeOS (for
+ * debugging/monitoring purposes).
+ */
+ String getPlatform();
+
+ /** Returns an object that can be used to do logging. */
+ Logger getLogger();
+
+ /** Returns an object that can be used to persist data locally. */
+ Storage getStorage();
+
+ /** Returns an object that can be used to send and receive messages. */
+ NetworkChannel getNetwork();
+
+ /** Returns an object that can be used by the client library to schedule its internal events. */
+ Scheduler getInternalScheduler();
+
+ /** Returns an object that can be used to schedule events for the application. */
+ Scheduler getListenerScheduler();
+}

Powered by Google App Engine
This is Rietveld 408576698