Explorar el Código

changed bluetooth synchronization to use our new protocol

Alexander Brakowski hace 9 años
padre
commit
18407e60f6

+ 4 - 4
src/de/tudarmstadt/informatik/hostage/sync/SyncMessage.java

@@ -12,10 +12,10 @@ public class SyncMessage implements Serializable{
 	private static final long serialVersionUID = -7597101233186914926L;
 	
 	//REQUEST CODES
-	public static final int SYNC_REQUEST = 0x00;
-	public static final int SYNC_RESPONSE_NET_INFO = 0x01;
-	public static final int SYNC_RESPONSE_SYNC_INFO = 0x02;
-	
+    public static final int SYNC_REQUEST = 0x00;
+    public static final int SYNC_RESPONSE_INFO = 0x01;
+    public static final int SYNC_RESPONSE_DATA = 0x02;
+
 	private int message_code;
 	private Object payload;
 	

+ 11 - 4
src/de/tudarmstadt/informatik/hostage/sync/bluetooth/BluetoothSyncActivity.java

@@ -20,6 +20,8 @@ import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.AdapterView.OnItemClickListener;
 import de.tudarmstadt.informatik.hostage.R;
+import de.tudarmstadt.informatik.hostage.persistence.HostageDBOpenHelper;
+import de.tudarmstadt.informatik.hostage.sync.Synchronizer;
 
 /**
  * Activity that allows the user to choose a bluetooth device to 
@@ -47,13 +49,18 @@ public class BluetoothSyncActivity extends Activity{
 	
 	private TextView mInfoText;
 	private ListView listView;
-	
-	
+
+    private HostageDBOpenHelper mDbHelper;
+    private Synchronizer synchronizer;
+
 	@Override
 	public void onCreate(Bundle savedInstanceState){
 		super.onCreate(savedInstanceState);
-		setContentView(R.layout.activity_bluetooth);		
-		
+		setContentView(R.layout.activity_bluetooth);
+
+        mDbHelper = new HostageDBOpenHelper(getApplicationContext());
+        synchronizer = new Synchronizer(mDbHelper);
+
 		serviceUUID = UUID.fromString(getResources().getString(R.string.UUID));
 		mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();	
 		arrayAdapter = new ArrayAdapter<String>(this, R.layout.list_view_bluetooth_devices);	

+ 20 - 36
src/de/tudarmstadt/informatik/hostage/sync/bluetooth/CommunicationThread.java

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