// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.sdk.internal.transport; import java.io.IOException; /** * An interface to be implemented by an agent performing the communications with * the debugged browser instance. */ public interface Connection { /** * An interface to be used for notification of messages coming in from the * browser. */ public interface NetListener { /** * Gets invoked whenever a message from the browser arrives. * Invoked from DispatchThread. * @param message from the browser instance the connection is associated * with */ void messageReceived(Message message); /** * Gets invoked from DispatchThread whenever EOS message arrives. This method * must not be called more than once. Method {@link #messageReceived} must * not be called after it. */ void eosReceived(); /** * Gets invoked when the physical connection has been terminated. * Called from whatever thread that connection is terminated from. */ void connectionClosed(); } /** * Sets a listener that will be notified of network events. The listener must * be set before calling {@link #start()} and cannot be changed over the * connection lifetime. * * @param netListener to set */ void setNetListener(NetListener netListener); /** * Sends the specified message to the associated browser instance. * * @param message to send */ void send(Message message); /** * Asynchronously runs the callback in Connection's Dispatch thread. */ void runInDispatchThread(Runnable callback); /** * Starts up the transport and acquire all needed resources. Does nothing if * the connection has already been started. * * @throws IOException */ void start() throws IOException; /** * Shuts down the transport freeing all acquired resources. Does nothing if * the connection has already been shut down. */ void close(); /** * Determines the connection state. * * @return whether start() has been successfully invoked and close() has not * been invoked yet */ boolean isConnected(); }