2013-07-23 16:11:54 +02:00
|
|
|
package org.kde.connect;
|
|
|
|
|
|
|
|
import android.os.AsyncTask;
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
|
|
import org.kde.connect.ComputerLinks.BaseComputerLink;
|
2013-07-23 17:50:09 +02:00
|
|
|
import org.kde.connect.PackageInterfaces.BasePackageInterface;
|
2013-07-23 16:11:54 +02:00
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.Comparator;
|
|
|
|
|
|
|
|
public class Device {
|
|
|
|
|
|
|
|
private ArrayList<BaseComputerLink> links = new ArrayList<BaseComputerLink>();
|
2013-07-23 17:50:09 +02:00
|
|
|
private ArrayList<BasePackageInterface> receivers = new ArrayList<BasePackageInterface>();
|
2013-07-23 16:11:54 +02:00
|
|
|
|
|
|
|
private String deviceId;
|
|
|
|
private String name;
|
|
|
|
|
|
|
|
|
|
|
|
Device(String deviceId, String name, BaseComputerLink dl) {
|
|
|
|
this.deviceId = deviceId;
|
|
|
|
this.name = name;
|
|
|
|
addLink(dl);
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getName() {
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getDeviceId() {
|
|
|
|
return deviceId;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void addLink(BaseComputerLink link) {
|
|
|
|
Log.e("Device","addLink "+link.getLinkProvider().getName()+" -> "+getName());
|
|
|
|
links.add(link);
|
|
|
|
Collections.sort(links, new Comparator<BaseComputerLink>() {
|
|
|
|
@Override
|
|
|
|
public int compare(BaseComputerLink o, BaseComputerLink o2) {
|
|
|
|
return o2.getLinkProvider().getPriority() - o.getLinkProvider().getPriority();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2013-07-23 17:50:09 +02:00
|
|
|
link.addPackageReceiver(new BaseComputerLink.PackageReceiver() {
|
2013-07-23 16:11:54 +02:00
|
|
|
@Override
|
2013-07-23 17:50:09 +02:00
|
|
|
public void onPackageReceived(NetworkPackage np) {
|
|
|
|
for (BasePackageInterface receiver : receivers) {
|
2013-07-23 16:11:54 +02:00
|
|
|
receiver.onPackageReceived(Device.this, np);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void removeLink(BaseComputerLink link) {
|
|
|
|
links.remove(link);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Send and receive interfaces
|
|
|
|
|
2013-07-23 17:50:09 +02:00
|
|
|
public void addPackageReceiver(BasePackageInterface receiver) {
|
2013-07-23 16:11:54 +02:00
|
|
|
receivers.add(receiver);
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean sendPackage(final NetworkPackage np) {
|
2013-07-23 17:50:09 +02:00
|
|
|
Log.e("Device", "sendPackage");
|
2013-07-23 16:11:54 +02:00
|
|
|
|
|
|
|
new AsyncTask<Void,Void,Void>() {
|
|
|
|
@Override
|
|
|
|
protected Void doInBackground(Void... voids) {
|
|
|
|
Log.e("sendPackage","Do in background");
|
|
|
|
for(BaseComputerLink link : links) {
|
|
|
|
Log.e("sendPackage","Trying "+link.getLinkProvider().getName());
|
|
|
|
if (link.sendPackage(np)) {
|
|
|
|
Log.e("sent using", link.getLinkProvider().getName());
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Log.e("sendPackage","Error: Package could not be sent");
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}.execute();
|
|
|
|
Log.e("Device","/sendPackage");
|
|
|
|
return true; //FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|