|
@@ -8,9 +8,12 @@ import java.util.HashMap;
|
|
|
import java.util.Iterator;
|
|
|
|
|
|
import de.tudarmstadt.informatik.hostage.logging.NetworkRecord;
|
|
|
+import de.tudarmstadt.informatik.hostage.logging.SyncData;
|
|
|
+import de.tudarmstadt.informatik.hostage.logging.SyncInfo;
|
|
|
import de.tudarmstadt.informatik.hostage.logging.SyncInfoRecord;
|
|
|
import de.tudarmstadt.informatik.hostage.persistence.HostageDBOpenHelper;
|
|
|
import de.tudarmstadt.informatik.hostage.sync.SyncMessage;
|
|
|
+import de.tudarmstadt.informatik.hostage.sync.Synchronizer;
|
|
|
import de.tudarmstadt.informatik.hostage.sync.tracing.TracingSyncService;
|
|
|
|
|
|
|
|
@@ -30,13 +33,15 @@ public class CommunicationThread extends Thread {
|
|
|
private final ObjectOutputStream objectOuput;
|
|
|
private final Handler mHandler;
|
|
|
private final HostageDBOpenHelper mdbh;
|
|
|
-
|
|
|
+ private Synchronizer synchronizer;
|
|
|
|
|
|
public CommunicationThread(Context con, BluetoothSocket socket, Handler handler) {
|
|
|
mmSocket = socket;
|
|
|
mHandler = handler;
|
|
|
context = con;
|
|
|
- mdbh = new HostageDBOpenHelper(context);
|
|
|
+ mdbh = new HostageDBOpenHelper(context);
|
|
|
+ synchronizer = new Synchronizer(mdbh);
|
|
|
+
|
|
|
ObjectInputStream tmpIn = null;
|
|
|
ObjectOutputStream tmpOut = null;
|
|
|
|
|
@@ -94,42 +99,21 @@ public class CommunicationThread extends Thread {
|
|
|
Log.i("CommunicationThread", "Recieved: " + message.getMessage_code());
|
|
|
switch(message.getMessage_code()){
|
|
|
case SyncMessage.SYNC_REQUEST:
|
|
|
- HashMap<String, Long> devices_remote = (HashMap<String, Long>) message.getPayload();
|
|
|
- HashMap<String, Long> devices_local = mdbh.getSyncDeviceHashMap();
|
|
|
- ArrayList<SyncInfoRecord> syncInfo = mdbh.getSyncInfo();
|
|
|
-
|
|
|
- long tracing_timestamp = 0;
|
|
|
- if(devices_local.containsKey(TracingSyncService.REMOTE_DEVICE))
|
|
|
- tracing_timestamp = devices_local.get(TracingSyncService.REMOTE_DEVICE);
|
|
|
-
|
|
|
- for(Iterator<String> i = devices_remote.keySet().iterator(); i.hasNext(); ){
|
|
|
- String key = i.next();
|
|
|
- if((devices_local.containsKey(key) && devices_local.get(key) >= devices_remote.get(key))
|
|
|
- || (tracing_timestamp > devices_remote.get(key))){
|
|
|
- i.remove();
|
|
|
- }
|
|
|
- }
|
|
|
- mdbh.updateSyncDevices(devices_remote);
|
|
|
-
|
|
|
- for ( Iterator<SyncInfoRecord> i = syncInfo.iterator(); i.hasNext(); ){
|
|
|
- SyncInfoRecord info = i.next();
|
|
|
- if(devices_remote.containsKey(info.getDeviceID())){
|
|
|
- i.remove();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- write(new SyncMessage(SyncMessage.SYNC_RESPONSE_SYNC_INFO, syncInfo));
|
|
|
- write(new SyncMessage(SyncMessage.SYNC_RESPONSE_NET_INFO, mdbh.getNetworkInformation()));
|
|
|
+ SyncInfo thisSyncInfo = synchronizer.getSyncInfo();
|
|
|
+ write(new SyncMessage(SyncMessage.SYNC_RESPONSE_INFO, thisSyncInfo));
|
|
|
break;
|
|
|
- case SyncMessage.SYNC_RESPONSE_NET_INFO:
|
|
|
- ArrayList<NetworkRecord> netInfo = (ArrayList<NetworkRecord>) message.getPayload();
|
|
|
- mdbh.updateNetworkInformation(netInfo);
|
|
|
- mHandler.obtainMessage(BluetoothSyncActivity.SYNC_SUCCESSFUL).sendToTarget();
|
|
|
- break;
|
|
|
- case SyncMessage.SYNC_RESPONSE_SYNC_INFO:
|
|
|
- ArrayList<SyncInfoRecord> syncInfo_new = (ArrayList<SyncInfoRecord>) message.getPayload();
|
|
|
- mdbh.updateSyncInfo(syncInfo_new);
|
|
|
+ case SyncMessage.SYNC_RESPONSE_INFO:
|
|
|
+ SyncInfo otherSyncInfo = (SyncInfo) message.getPayload();
|
|
|
+ SyncData thisSyncData = synchronizer.getSyncData(otherSyncInfo);
|
|
|
+ write(new SyncMessage(SyncMessage.SYNC_RESPONSE_DATA, thisSyncData));
|
|
|
+
|
|
|
break;
|
|
|
+ case SyncMessage.SYNC_RESPONSE_DATA:
|
|
|
+ SyncData otherData = (SyncData) message.getPayload();
|
|
|
+ synchronizer.updateFromSyncData(otherData);
|
|
|
+
|
|
|
+ mHandler.obtainMessage(BluetoothSyncActivity.SYNC_SUCCESSFUL).sendToTarget();
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|