blob: c36319a897c3d8c2d6392642188de97893118c4b [file] [log] [blame]
// Copyright 2014 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.components.devtools_bridge;
import java.nio.ByteBuffer;
/**
* Represents a pair of connected AbstractDataChannel's. Sends to one channel
* come to another and vice versa.
*/
public class DataPipe {
private final SignalingThreadMock mSignalingThread = new SignalingThreadMock();
private final PairedDataChannel mDC0 = new PairedDataChannel();
private final PairedDataChannel mDC1 = new PairedDataChannel();
public void connect() {
mDC0.setPair(mDC1);
mDC1.setPair(mDC0);
mDC0.open();
mDC1.open();
}
public void disconnect() {
mDC0.setPair(null);
mDC1.setPair(null);
mDC0.close();
mDC1.close();
}
public AbstractDataChannel dataChannel(int index) {
switch (index) {
case 0:
return mDC0;
case 1:
return mDC1;
default:
throw new IllegalArgumentException("index");
}
}
public void dispose() {
mDC0.dispose();
mDC1.dispose();
mSignalingThread.dispose();
}
private class PairedDataChannel extends DataChannelMock {
private PairedDataChannel mPair;
public PairedDataChannel() {
super(mSignalingThread);
}
public void setPair(final PairedDataChannel pair) {
mSignalingThread.invoke(new Runnable() {
@Override
public void run() {
mPair = pair;
}
});
}
@Override
protected void sendOnSignalingThread(ByteBuffer message) {
assert message.remaining() > 0;
if (mPair == null) return;
mPair.notifyMessageOnSignalingThread(message);
}
@Override
protected void disposeSignalingThread() {
// Ignore. Will dispose in DataPipe.dispose.
}
}
}