Skip to content

Commit e738821

Browse files
committed
A better ASAPMessageReceivedListener introduced. Barely tested yet.
1 parent bd01887 commit e738821

File tree

9 files changed

+101
-12
lines changed

9 files changed

+101
-12
lines changed

app/libs/ASAP_Engine_0.5.0.jar

26.9 KB
Binary file not shown.

app/src/main/java/net/sharksystem/asap/android/ASAPChunkReceivedBroadcastIntent.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,24 @@ public class ASAPChunkReceivedBroadcastIntent extends Intent {
1010
private CharSequence uri;
1111
private int era;
1212
private CharSequence user;
13+
private CharSequence format;
1314

14-
public ASAPChunkReceivedBroadcastIntent(CharSequence user, CharSequence folderName,
15+
public ASAPChunkReceivedBroadcastIntent(CharSequence format, CharSequence user, CharSequence folderName,
1516
CharSequence uri, int eraInt) throws ASAPException {
1617
super();
1718

18-
if(folderName == null || uri == null || user == null)
19+
if(format == null || folderName == null || uri == null || user == null)
1920
throw new ASAPException("parameters must no be null");
2021

2122
this.setAction(ASAP.ASAP_CHUNK_RECEIVED_ACTION);
2223

2324
this.putExtra(ASAP.ERA, eraInt);
25+
this.putExtra(ASAP.FORMAT, format);
2426
this.putExtra(ASAP.FOLDER, folderName);
2527
this.putExtra(ASAP.URI, uri);
2628
this.putExtra(ASAP.USER, user);
2729

30+
this.format = format;
2831
this.folder = folderName;
2932
this.uri = uri;
3033
this.era = era;
@@ -35,6 +38,7 @@ public ASAPChunkReceivedBroadcastIntent(Intent intent) throws ASAPException {
3538
super();
3639

3740
// just parse extras
41+
this.format = intent.getStringExtra(ASAP.FORMAT);
3842
this.folder = intent.getStringExtra(ASAP.FOLDER);
3943
this.uri = intent.getStringExtra(ASAP.URI);
4044
this.era = intent.getIntExtra(ASAP.ERA, 0);
@@ -56,4 +60,6 @@ public CharSequence getUser() {
5660
public int getEra() {
5761
return this.era;
5862
}
63+
64+
public CharSequence getFormat() { return this.format; }
5965
}

app/src/main/java/net/sharksystem/asap/android/apps/ASAPActivity.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import android.util.Log;
1616
import android.widget.Toast;
1717

18+
import net.sharksystem.asap.ASAPException;
1819
import net.sharksystem.asap.android.ASAP;
1920
import net.sharksystem.asap.android.ASAPServiceMethods;
2021
import net.sharksystem.asap.android.service.ASAPService;
@@ -24,6 +25,7 @@
2425
import net.sharksystem.asap.android.service2AppMessaging.ASAPServiceRequestNotifyIntent;
2526

2627
import java.util.ArrayList;
28+
import java.util.Collection;
2729
import java.util.List;
2830

2931
public class ASAPActivity extends AppCompatActivity implements
@@ -45,6 +47,28 @@ protected ASAPApplication getASAPApplication() {
4547
return this.asapApplication;
4648
}
4749

50+
public void sendASAPMessage(CharSequence appName, CharSequence uri,
51+
Collection<CharSequence> recipients, byte[] message) throws ASAPException {
52+
53+
if(appName == null || appName.length() == 0
54+
|| uri == null || uri.length() == 0
55+
|| recipients == null || recipients.size() == 0
56+
|| message == null || message.length == 0
57+
) throw new ASAPException("parameter must not be null");
58+
59+
for(CharSequence recipient : recipients) {
60+
Message msg = Message.obtain(null, ASAPServiceMethods.SEND_MESSAGE, 0, 0);
61+
Bundle bundle = new Bundle();
62+
bundle.putString(ASAP.FORMAT, appName.toString());
63+
bundle.putString(ASAP.URI, uri.toString());
64+
bundle.putString(ASAP.RECIPIENT, recipient.toString());
65+
bundle.putByteArray(ASAP.MESSAGE_CONTENT, message); // important
66+
// bundle.putInt(ASAP.ERA, 0); // optional
67+
68+
this.sendMessage2Service(msg);
69+
}
70+
}
71+
4872
///////////////////////////////////////////////////////////////////////////////////////
4973
// asap service requests //
5074
///////////////////////////////////////////////////////////////////////////////////////

app/src/main/java/net/sharksystem/asap/android/apps/ASAPApplication.java

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,20 @@
1212
import android.widget.Toast;
1313

1414
import net.sharksystem.asap.ASAPChunkReceivedListener;
15+
import net.sharksystem.asap.ASAPEngine;
16+
import net.sharksystem.asap.ASAPEngineFS;
1517
import net.sharksystem.asap.ASAPException;
1618
import net.sharksystem.asap.android.ASAP;
1719
import net.sharksystem.asap.android.ASAPChunkReceivedBroadcastIntent;
1820
import net.sharksystem.asap.android.ASAPServiceCreationIntent;
1921
import net.sharksystem.asap.android.Util;
22+
import net.sharksystem.asap.apps.ASAPMessages;
2023

24+
import java.io.IOException;
2125
import java.util.ArrayList;
26+
import java.util.Collection;
2227
import java.util.HashMap;
28+
import java.util.HashSet;
2329
import java.util.List;
2430
import java.util.Map;
2531

@@ -275,6 +281,7 @@ public void onReceive(Context context, Intent intent) {
275281

276282
// call listener - that's me in that case
277283
this.chunkReceived(
284+
asapReceivedIntent.getFormat().toString(),
278285
asapReceivedIntent.getUser().toString(),
279286
asapReceivedIntent.getUri().toString(),
280287
asapReceivedIntent.getFoldername().toString(),
@@ -287,21 +294,63 @@ public void onReceive(Context context, Intent intent) {
287294
}
288295

289296
private Map<CharSequence, ASAPChunkReceivedListener> chunkReceivedListener = new HashMap<>();
290-
public void chunkReceived(String sender, String uri, String foldername, int era) {
297+
298+
private Map<CharSequence, Collection<ASAPMessageReceivedListener>> messageReceivedListener
299+
= new HashMap<>();
300+
301+
public void chunkReceived(String format, String sender, String uri, String foldername, int era) {
291302
Log.d(this.getLogStart(), "got chunk received message: "
292-
+ sender + " | " + uri + " | " + foldername + " | " + era);
303+
+ format + " | "+ sender + " | " + uri + " | " + foldername + " | " + era);
293304

294305
Log.d(this.getLogStart(), "going to inform listener about it");
295306
ASAPChunkReceivedListener listener = this.chunkReceivedListener.get(uri);
296307
if(listener != null) {
297-
listener.chunkReceived(sender, uri, era);
308+
listener.chunkReceived(format, sender, uri, era);
309+
}
310+
311+
try {
312+
ASAPEngine existingASAPEngineFS = ASAPEngineFS.getExistingASAPEngineFS(foldername);
313+
ASAPMessages messages = existingASAPEngineFS.getChannel(uri).getMessages();
314+
315+
Collection<ASAPMessageReceivedListener> messageListeners =
316+
this.messageReceivedListener.get(uri);
317+
318+
Log.d(this.getLogStart(), "going to inform message listener about it");
319+
if(messageListeners != null) {
320+
for(ASAPMessageReceivedListener messageListener : messageListeners) {
321+
messageListener.asapMessagesReceived(messages);
322+
}
323+
}
324+
325+
} catch (IOException e) {
326+
e.printStackTrace();
327+
} catch (ASAPException e) {
328+
e.printStackTrace();
298329
}
299330
}
300331

332+
/**
333+
* @deprecated
334+
* @param uri
335+
* @param listener
336+
*/
301337
public void addChunkReceivedListener(CharSequence uri, ASAPChunkReceivedListener listener) {
302338
this.chunkReceivedListener.put(uri, listener);
303339
}
304340

341+
public void addASAPMessageReceivedListener(CharSequence uri,
342+
ASAPMessageReceivedListener listener) {
343+
Collection<ASAPMessageReceivedListener> messageListeners =
344+
this.messageReceivedListener.get(uri);
345+
346+
if(messageListeners == null) {
347+
this.messageReceivedListener.put(uri, new HashSet());
348+
this.addASAPMessageReceivedListener(uri, listener);
349+
} else {
350+
messageListeners.add(listener);
351+
}
352+
}
353+
305354
public void removeChunkReceivedListener(CharSequence uri) {
306355
this.chunkReceivedListener.remove(uri);
307356
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package net.sharksystem.asap.android.apps;
2+
3+
import net.sharksystem.asap.apps.ASAPMessages;
4+
5+
public interface ASAPMessageReceivedListener {
6+
void asapMessagesReceived(ASAPMessages messages);
7+
}

app/src/main/java/net/sharksystem/asap/android/apps/ASAPOnlineMessageSenderAndroidUserSide.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import java.io.IOException;
1414
import java.util.List;
15+
import java.util.Set;
1516

1617
public class ASAPOnlineMessageSenderAndroidUserSide extends ASAPAbstractOnlineMessageSender {
1718

@@ -23,7 +24,7 @@ public ASAPOnlineMessageSenderAndroidUserSide(ASAPApplication asapApplication) {
2324

2425
@Override
2526
public void sendASAPAssimilate(CharSequence format, CharSequence uri,
26-
List<CharSequence> recipients, byte[] messageAsBytes,
27+
Set<CharSequence> recipients, byte[] messageAsBytes,
2728
int era) throws ASAPException {
2829

2930
Message msg;
@@ -57,6 +58,7 @@ private boolean isOnline(CharSequence peer) {
5758
return this.asapApplication.getOnlinePeerList().contains(peer);
5859
}
5960

61+
6062
@Override
6163
public void sendASAPAssimilate(CharSequence format, CharSequence uri, byte[] messageAsBytes, int era)
6264
throws IOException, ASAPException {

app/src/main/java/net/sharksystem/asap/android/bluetooth/BluetoothEngine.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ void doServerAcceptSocketKilled() {
187187
address = remoteDevice.getAddress();
188188
}
189189

190-
Log.d(this.getLogStart(), "kill zombie socket "
190+
Log.d(this.getLogStart(), "remove connection from list. "
191191
+ "name: " + name
192192
+ " | address: " + address
193193
+ " | isConnected: " + socket.isConnected());

app/src/main/java/net/sharksystem/asap/android/service/ASAPService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,14 +256,14 @@ public void propagateProtocolStatus() throws ASAPException {
256256
private List<ASAPChunkReceivedBroadcastIntent> chunkReceivedBroadcasts = new ArrayList<>();
257257

258258
@Override
259-
public void chunkReceived(String sender, String uri, int era) {
259+
public void chunkReceived(String format, String sender, String uri, int era) {
260260
Log.d(LOGSTART, "was notified by asap engine that chunk received - broadcast. Uri: "
261261
+ uri);
262262
// issue broadcast
263263
ASAPChunkReceivedBroadcastIntent intent = null;
264264
try {
265265
intent = new ASAPChunkReceivedBroadcastIntent(
266-
sender, this.getASAPRootFolderName(), uri, era);
266+
format, sender, this.getASAPRootFolderName(), uri, era);
267267
} catch (ASAPException e) {
268268
e.printStackTrace();
269269
return;
@@ -284,7 +284,7 @@ public void resumeBroadcasts() {
284284
this.broadcastOn = true;
285285

286286
int index = 0;
287-
// flag can change while in that methode due to calls from other threads
287+
// flag can change while in that method due to calls from other threads
288288
while(this.broadcastOn && this.chunkReceivedBroadcasts.size() > 0) {
289289
Log.d(LOGSTART, "send stored broadcast");
290290
this.sendBroadcast(chunkReceivedBroadcasts.remove(0));

app/src/main/java/net/sharksystem/asap/android/service/MacLayerEngine.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public abstract class MacLayerEngine {
2323
private final ASAPService asapService;
2424
private final Context context;
2525

26-
public static final long DEFAULT_WAIT_BEFORE_RECONNECT_TIME = 1000*60; // a minute
26+
// public static final long DEFAULT_WAIT_BEFORE_RECONNECT_TIME = 1000*60; // a minute
27+
public static final long DEFAULT_WAIT_BEFORE_RECONNECT_TIME = 1000; // a second - debugging
2728
private final long waitBeforeReconnect;
2829

2930
public MacLayerEngine(ASAPService asapService, Context context) {
@@ -111,7 +112,7 @@ private String getLogStart() {
111112
* @param address
112113
*/
113114
protected void kill(String address) {
114-
ASAPConnection asapConnection = this.asapConnections.get(address);
115+
ASAPConnection asapConnection = this.asapConnections.remove(address);
115116
if(asapConnection != null) {
116117
Log.d(this.getLogStart(), "going kill connection to: " + address);
117118
asapConnection.kill();

0 commit comments

Comments
 (0)