2014-11-16 23:14:06 -08:00
/ *
2020-08-17 16:17:20 +02:00
* SPDX - FileCopyrightText : 2014 Albert Vaca Cintora < albertvaka @gmail.com >
2014-11-16 23:14:06 -08:00
*
2020-08-17 16:17:20 +02:00
* SPDX - License - Identifier : GPL - 2 . 0 - only OR GPL - 3 . 0 - only OR LicenseRef - KDE - Accepted - GPL
2014-11-16 23:14:06 -08:00
* /
2013-09-16 15:24:21 +02:00
package org.kde.kdeconnect.Backends ;
2013-06-17 12:23:08 +02:00
2015-06-20 20:54:39 +05:30
import android.content.Context ;
2023-05-26 19:54:57 +02:00
import androidx.annotation.NonNull ;
2023-03-05 22:03:58 +01:00
import androidx.annotation.WorkerThread ;
2015-01-15 22:57:06 -08:00
import org.kde.kdeconnect.Device ;
2023-06-16 22:52:43 +02:00
import org.kde.kdeconnect.DeviceInfo ;
2018-03-04 11:31:37 +01:00
import org.kde.kdeconnect.NetworkPacket ;
2013-06-17 12:23:08 +02:00
2023-05-24 16:08:13 +02:00
import java.io.IOException ;
2013-06-17 12:23:08 +02:00
import java.util.ArrayList ;
2013-09-16 17:36:26 +02:00
public abstract class BaseLink {
2013-06-17 12:23:08 +02:00
2018-03-04 11:31:37 +01:00
public interface PacketReceiver {
2023-05-26 19:54:57 +02:00
void onPacketReceived ( @NonNull NetworkPacket np ) ;
2015-09-09 03:31:39 -07:00
}
2023-05-26 19:54:57 +02:00
protected final Context context ;
2014-03-29 01:47:15 +01:00
private final BaseLinkProvider linkProvider ;
2018-03-04 11:31:37 +01:00
private final ArrayList < PacketReceiver > receivers = new ArrayList < > ( ) ;
2013-07-23 16:11:54 +02:00
2023-06-16 22:52:43 +02:00
protected BaseLink ( @NonNull Context context , @NonNull BaseLinkProvider linkProvider ) {
2023-06-02 19:04:49 +02:00
this . context = context ;
2013-07-23 16:11:54 +02:00
this . linkProvider = linkProvider ;
}
2015-08-13 14:55:00 +05:30
/* To be implemented by each link for pairing handlers */
public abstract String getName ( ) ;
2023-06-16 22:52:43 +02:00
public abstract DeviceInfo getDeviceInfo ( ) ;
2013-07-23 16:11:54 +02:00
public String getDeviceId ( ) {
2023-06-16 22:52:43 +02:00
return getDeviceInfo ( ) . id ;
2013-07-23 16:11:54 +02:00
}
public BaseLinkProvider getLinkProvider ( ) {
return linkProvider ;
}
2023-05-26 19:54:57 +02:00
public void addPacketReceiver ( @NonNull PacketReceiver pr ) {
2013-06-17 12:23:08 +02:00
receivers . add ( pr ) ;
}
2023-05-26 19:54:57 +02:00
public void removePacketReceiver ( @NonNull PacketReceiver pr ) {
2013-06-17 12:23:08 +02:00
receivers . remove ( pr ) ;
}
2023-03-17 18:56:52 +01:00
//Should be called from a background thread listening for packets
2023-06-16 22:52:43 +02:00
public void packetReceived ( @NonNull NetworkPacket np ) {
2018-03-04 11:31:37 +01:00
for ( PacketReceiver pr : receivers ) {
pr . onPacketReceived ( np ) ;
2013-06-17 12:23:08 +02:00
}
}
2015-09-09 00:45:56 +02:00
public void disconnect ( ) {
2023-06-16 19:22:18 +02:00
linkProvider . onConnectionLost ( this ) ;
2015-09-09 00:45:56 +02:00
}
2023-05-24 19:22:17 +02:00
//TO OVERRIDE, should be sync. If sendPayloadFromSameThread is false, it should only block to send the packet but start a separate thread to send the payload.
2019-07-21 07:01:50 -04:00
@WorkerThread
2023-05-26 19:54:57 +02:00
public abstract boolean sendPacket ( @NonNull NetworkPacket np , @NonNull Device . SendPacketStatusCallback callback , boolean sendPayloadFromSameThread ) throws IOException ;
2013-06-17 12:23:08 +02:00
}