@@ -273,33 +273,47 @@ void syncRecordToAll(DataItemRecord record) {
273273 }
274274
275275 private boolean syncRecordToPeer (String nodeId , DataItemRecord record ) {
276+ WearableConnection connection ;
277+ synchronized (activeConnections ) {
278+ connection = activeConnections .get (nodeId );
279+ }
280+ if (connection == null ) return false ;
281+
276282 for (Asset asset : record .dataItem .getAssets ().values ()) {
277283 try {
278- syncAssetToPeer (nodeId , record , asset );
284+ syncAssetToPeer (connection , record , asset );
279285 } catch (Exception e ) {
280286 Log .w (TAG , "Could not sync asset " + asset + " for " + nodeId + " and " + record , e );
281- closeConnection (nodeId );
287+ try {
288+ connection .close ();
289+ } catch (IOException ioException ) {
290+ // Ignore
291+ }
282292 return false ;
283293 }
284294 }
285295
286296 try {
287297 SetDataItem item = record .toSetDataItem ();
288- activeConnections . get ( nodeId ) .writeMessage (new RootMessage .Builder ().setDataItem (item ).build ());
298+ connection .writeMessage (new RootMessage .Builder ().setDataItem (item ).build ());
289299 } catch (Exception e ) {
290300 Log .w (TAG , e );
291- closeConnection (nodeId );
301+ try {
302+ connection .close ();
303+ } catch (IOException ioException ) {
304+ // Ignore
305+ }
292306 return false ;
293307 }
294308 return true ;
295309 }
296310
297- private void syncAssetToPeer (String nodeId , DataItemRecord record , Asset asset ) throws IOException {
311+ private void syncAssetToPeer (WearableConnection connection , DataItemRecord record , Asset asset ) throws IOException {
298312 RootMessage announceMessage = new RootMessage .Builder ().setAsset (new SetAsset .Builder ()
299313 .digest (asset .getDigest ())
300314 .appkeys (new AppKeys (Collections .singletonList (new AppKey (record .packageName , record .signatureDigest ))))
301315 .build ()).hasAsset (true ).build ();
302- activeConnections . get ( nodeId ) .writeMessage (announceMessage );
316+ connection .writeMessage (announceMessage );
303317 File assetFile = createAssetFile (asset .getDigest ());
304318 String fileName = calculateDigest (announceMessage .encode ());
305319 FileInputStream fis = new FileInputStream (assetFile );
@@ -308,11 +322,11 @@ private void syncAssetToPeer(String nodeId, DataItemRecord record, Asset asset)
308322 int c = 0 ;
309323 while ((c = fis .read (arr )) > 0 ) {
310324 if (lastPiece != null ) {
311- activeConnections . get ( nodeId ) .writeMessage (new RootMessage .Builder ().filePiece (new FilePiece (fileName , false , lastPiece , null )).build ());
325+ connection .writeMessage (new RootMessage .Builder ().filePiece (new FilePiece (fileName , false , lastPiece , null )).build ());
312326 }
313327 lastPiece = ByteString .of (arr , 0 , c );
314328 }
315- activeConnections . get ( nodeId ) .writeMessage (new RootMessage .Builder ().filePiece (new FilePiece (fileName , true , lastPiece , asset .getDigest ())).build ());
329+ connection .writeMessage (new RootMessage .Builder ().filePiece (new FilePiece (fileName , true , lastPiece , asset .getDigest ())).build ());
316330 }
317331
318332 public void addAssetToDatabase (Asset asset , List <AppKey > appKeys ) {
0 commit comments