API اتصال امن

پس از کشف یک دستگاه راه دور، تابع handleIntent فراخوانی می شود و زمان آن رسیده است که داده ها را بین کلاینت ها ارسال کنیم. این بخش چهار مرحله ضروری برای حفظ یک اتصال ایمن را پوشش می دهد:

  • باز کردن یک اتصال
  • پذیرش اتصال
  • ارسال و دریافت داده
  • بستن اتصال

یک اتصال را باز کنید

برای باز کردن یک اتصال برای دریافت داده از یک دستگاه راه دور، از شی شرکت کننده دریافت شده قبلی استفاده کنید و CHANNEL_NAME مشخص کنید:

participant
 
.openConnection(CHANNEL_HELLO)
 
.onFailure { /* handle failure */}
 
.getOrNull()
 
?.let { connection ->
    connection
.send("Hello, world".toByteArray(UTF_8)).onFailure { /* handle failure */}
 
}
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
);
}

پذیرش، ارسال/دریافت و بستن اتصال

اتصالات ایمن به دستگاه گیرنده نیاز دارد تا قبل از دریافت داده، اتصالات ورودی را بپذیرد. برای پذیرش اتصال از راه دور، از قطعه زیر استفاده کنید:

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
     
}
   
}
 
)
}
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
       
}
     
});
}