Nachdem ein Remote-Gerät erkannt wurde, wird die Funktion handleIntent
aufgerufen und
ist es an der Zeit, Daten zwischen Clients zu übertragen. In diesem Abschnitt werden die
vier wesentliche Schritte zur Aufrechterhaltung einer sicheren Verbindung:
- Verbindung öffnen
- Verbindung wird akzeptiert
- Daten senden und empfangen
- Verbindung wird getrennt
Verbindung herstellen
Wenn Sie eine Verbindung zum Empfangen von Daten von einem Remote-Gerät herstellen möchten, verwenden Sie die
zuvor empfangenes "Teilnehmer"-Objekt und geben Sie CHANNEL_NAME
an:
Kotlin
participant .openConnection(CHANNEL_HELLO) .onFailure { /* handle failure */} .getOrNull() ?.let { connection -> connection.send("Hello, world".toByteArray(UTF_8)).onFailure { /* handle failure */} }
Java
public void openConnection(Participant participant) { Futures.addCallback( participant.openConnectionFuture(CHANNEL_HELLO), new FutureCallback<RemoteConnection>() { @Override public void onSuccess(RemoteConnection remoteConnection) { // use remoteConnection object to pass data, e.g.: sendDataToRemoteConnection(remoteConnection); } @Override public void onFailure(Throwable t) { // handle error opening a remote connection } }, mainExecutor); } private void sendDataToRemoteConnection(RemoteConnection remoteConnection) { Futures.addCallback( remoteConnection.sendFuture("Hello, world".getBytes()), new FutureCallback<Void>() { @Override public void onSuccess(Void result) { // data sent successfully } @Override public void onFailure(Throwable t) { // handle error } }, mainExecutor); }
Akzeptieren, senden/empfangen und Verbindung trennen
Für sichere Verbindungen muss das empfangende Gerät eingehende Verbindungen annehmen bevor sie die Daten erhalten. So akzeptieren Sie eine Remote-Verbindung: Snippet:
Kotlin
suspend fun acceptIncomingConnection(participant: Participant) { val connection = participant.acceptConnection(CHANNEL_HELLO).getOrThrow() connection.registerReceiver( object : ConnectionReceiver { override fun onMessageReceived(remoteConnection: RemoteConnection, payload: ByteArray) { displayMessage(payload.toString(UTF_8)) } override fun onConnectionClosed( remoteConnection: RemoteConnection, error: Throwable?, reason: String? ) { // handle connection closure } } ) }
Java
public void acceptIncomingConnection(Participant participant) { // Registers call back to accept incoming remote connection Futures.addCallback( participant.acceptConnectionFuture(CHANNEL_HELLO), new FutureCallback<>() { @Override public void onSuccess(RemoteConnection result) { receiveData(result); } @Override public void onFailure(Throwable t) { // handle connection error } }, mainExecutor); } private void receiveData(RemoteConnection remoteConnection) { remoteConnection.registerReceiver( new ConnectionReceiver() { @Override public void onMessageReceived(RemoteConnection remoteConnection, byte[] payload) { displayMessage(new String(payload, UTF_8)); } @Override public void onConnectionClosed( RemoteConnection remoteConnection, @Nullable Throwable error, @Nullable String reason) { // handle connection closure } }); }