@Override public void onDataChannel(DataChannel dataChannel) { Log.d(TAG, "onDataChannel: is local: " + isLocal + " , state: " + dataChannel.state()); dataChannel.registerObserver(new DataChannel.Observer() { @Override public void onBufferedAmountChange(long l) { } @Override public void onStateChange() { Log.d(TAG, "onStateChange: remote data channel state: " + dataChannel.state().toString()); } @Override public void onMessage(DataChannel.Buffer buffer) { Log.d(TAG, "onMessage: got message"); readIncomingMessage(buffer.data); } }); }
/** * Return the number of bytes of application data (UTF-8 text and binary data) * that have been queued using SendBuffer but have not yet been transmitted * to the network. */ public long bufferedAmount() { return nativeBufferedAmount(); }
@Override public void onDataChannel(final DataChannel dc) { Log.d(TAG, "New Data channel " + dc.label()); if (!dataChannelEnabled) return; dc.registerObserver(new DataChannel.Observer() { public void onBufferedAmountChange(long previousAmount) { Log.d(TAG, "Data channel buffered amount changed: " + dc.label() + ": " + dc.state()); } @Override public void onStateChange() { Log.d(TAG, "Data channel state changed: " + dc.label() + ": " + dc.state()); } @Override public void onMessage(final DataChannel.Buffer buffer) { if (buffer.binary) { Log.d(TAG, "Received binary msg over " + dc); return; } ByteBuffer data = buffer.data; final byte[] bytes = new byte[data.capacity()]; data.get(bytes); String strData = new String(bytes); Log.d(TAG, "Got msg: " + strData + " over " + dc); } }); }
private void initializePeerConnections() { localPeerConnection = createPeerConnection(factory, true); remotePeerConnection = createPeerConnection(factory, false); localDataChannel = localPeerConnection.createDataChannel("sendDataChannel", new DataChannel.Init()); localDataChannel.registerObserver(new DataChannel.Observer() { @Override public void onBufferedAmountChange(long l) { } @Override public void onStateChange() { Log.d(TAG, "onStateChange: " + localDataChannel.state().toString()); runOnUiThread(() -> { if (localDataChannel.state() == DataChannel.State.OPEN) { binding.sendButton.setEnabled(true); } else { binding.sendButton.setEnabled(false); } }); } @Override public void onMessage(DataChannel.Buffer buffer) { } }); }
public void sendMessage(View view) { String message = binding.textInput.getText().toString(); if (message.isEmpty()) { return; } binding.textInput.setText(""); ByteBuffer data = stringToByteBuffer("-s" + message, Charset.defaultCharset()); localDataChannel.send(new DataChannel.Buffer(data, false)); }
statsTimer.cancel(); if (dataChannel != null) { dataChannel.dispose(); dataChannel = null;
/** Close the channel. */ public void close() { nativeClose(); }
public int id() { return nativeId(); }
public String label() { return nativeLabel(); }
@Override public void onDataChannel(final DataChannel dc) { Log.d(TAG, "New Data channel " + dc.label()); if (!dataChannelEnabled) return; dc.registerObserver(new DataChannel.Observer() { public void onBufferedAmountChange(long previousAmount) { Log.d(TAG, "Data channel buffered amount changed: " + dc.label() + ": " + dc.state()); } @Override public void onStateChange() { Log.d(TAG, "Data channel state changed: " + dc.label() + ": " + dc.state()); } @Override public void onMessage(final DataChannel.Buffer buffer) { if (buffer.binary) { Log.d(TAG, "Received binary msg over " + dc); return; } ByteBuffer data = buffer.data; final byte[] bytes = new byte[data.capacity()]; data.get(bytes); String strData = new String(bytes); Log.d(TAG, "Got msg: " + strData + " over " + dc); } }); }
connection.addStream(createStream()); this.dataChannel = connection.createDataChannel("data", new DataChannel.Init()); this.dataChannel.registerObserver(this); connection.createOffer(new DefaultSdpObserver() { @Override
private void sendImage(int size, byte[] bytes) { int numberOfChunks = size / CHUNK_SIZE; ByteBuffer meta = stringToByteBuffer("-i" + size, Charset.defaultCharset()); localDataChannel.send(new DataChannel.Buffer(meta, false)); for (int i = 0; i < numberOfChunks; i++) { ByteBuffer wrap = ByteBuffer.wrap(bytes, i * CHUNK_SIZE, CHUNK_SIZE); localDataChannel.send(new DataChannel.Buffer(wrap, false)); } int remainder = size % CHUNK_SIZE; if (remainder > 0) { ByteBuffer wrap = ByteBuffer.wrap(bytes, numberOfChunks * CHUNK_SIZE, remainder); localDataChannel.send(new DataChannel.Buffer(wrap, false)); } }
statsTimer.cancel(); if (dataChannel != null) { dataChannel.dispose(); dataChannel = null;
public void setVideoEnabled(boolean enabled) { this.videoEnabled = enabled; try { if (enabled) { this.capturer.startCapture(500, 500, 30); } else { this.capturer.stopCapture(); } JSONObject object = new JSONObject(); object.put(StateChangeMessage, enabled ? CameraEnabledMessage : CameraDisabledMessage); dataChannel.send(new DataChannel.Buffer(ByteBuffer.wrap(object.toString().getBytes()), false)); } catch (JSONException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } }