Skip to content

Commit 398d347

Browse files
committed
流量统计
1 parent df5cf14 commit 398d347

File tree

5 files changed

+100
-18
lines changed

5 files changed

+100
-18
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// IOnTrafficDataListener.aidl
2+
package cn.wildfirechat.client;
3+
4+
5+
6+
interface IOnTrafficDataListener {
7+
void onTrafficData(long send, long recv);
8+
}

client/src/main/aidl/cn/wildfirechat/client/IRemoteClient.aidl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import cn.wildfirechat.client.IGetGroupsCallback;
3434
import cn.wildfirechat.client.IOnUserInfoUpdateListener;
3535
import cn.wildfirechat.client.IOnChannelInfoUpdateListener;
3636
import cn.wildfirechat.client.IOnConferenceEventListener;
37+
import cn.wildfirechat.client.IOnTrafficDataListener;
3738

3839
import cn.wildfirechat.message.Message;
3940
import cn.wildfirechat.message.core.MessagePayload;
@@ -84,6 +85,7 @@ interface IRemoteClient {
8485
oneway void setOnChannelInfoUpdateListener(in IOnChannelInfoUpdateListener listener);
8586
oneway void setOnConferenceEventListener(in IOnConferenceEventListener listener);
8687

88+
oneway void setOnTrafficDataListener(in IOnTrafficDataListener listener);
8789

8890
oneway void registerMessageContent(in String msgContentCls);
8991

client/src/main/java/cn/wildfirechat/client/ClientService.java

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ public class ClientService extends Service implements SdtLogic.ICallBack,
144144
private RemoteCallbackList<IOnChannelInfoUpdateListener> onChannelInfoUpdateListenerRemoteCallbackList = new WfcRemoteCallbackList<>();
145145
private RemoteCallbackList<IOnGroupMembersUpdateListener> onGroupMembersUpdateListenerRemoteCallbackList = new WfcRemoteCallbackList<>();
146146
private RemoteCallbackList<IOnConferenceEventListener> onConferenceEventListenerRemoteCallbackList = new WfcRemoteCallbackList<>();
147+
private RemoteCallbackList<IOnTrafficDataListener> onTrafficDataListenerRemoteCallbackList = new WfcRemoteCallbackList<>();
147148

148149
private AppLogic.AccountInfo accountInfo = new AppLogic.AccountInfo();
149150
// public final String DEVICE_NAME = android.os.Build.MANUFACTURER + "-" + android.os.Build.MODEL;
@@ -237,6 +238,11 @@ public void setOnConferenceEventListener(IOnConferenceEventListener listener) th
237238
onConferenceEventListenerRemoteCallbackList.register(listener);
238239
}
239240

241+
@Override
242+
public void setOnTrafficDataListener(IOnTrafficDataListener listener) throws RemoteException {
243+
onTrafficDataListenerRemoteCallbackList.register(listener);
244+
}
245+
240246
@Override
241247
public void setOnGroupMembersUpdateListener(IOnGroupMembersUpdateListener listener) throws RemoteException {
242248
onGroupMembersUpdateListenerRemoteCallbackList.register(listener);
@@ -274,7 +280,7 @@ public void disconnect(boolean disablePush, boolean clearSession) throws RemoteE
274280
@Override
275281
public void setForeground(int isForeground) throws RemoteException {
276282
BaseEvent.onForeground(isForeground == 1);
277-
if(isForeground == 1 && mConnectionStatus != ConnectionStatusConnected && mConnectionStatus != ConnectionStatusReceiveing) {
283+
if (isForeground == 1 && mConnectionStatus != ConnectionStatusConnected && mConnectionStatus != ConnectionStatusReceiveing) {
278284
onNetworkChange();
279285
}
280286
}
@@ -365,11 +371,11 @@ private ProtoMessage convertMessage(cn.wildfirechat.message.Message msg) {
365371
MessagePayload payload = msg.content.encode();
366372
protoMessage.setContent(payload.toProtoContent());
367373
protoMessage.setMessageId(msg.messageId);
368-
if (msg.direction == null){
374+
if (msg.direction == null) {
369375
msg.direction = MessageDirection.Send;
370376
}
371377
protoMessage.setDirection(msg.direction.ordinal());
372-
if (msg.status == null){
378+
if (msg.status == null) {
373379
msg.status = MessageStatus.Sending;
374380
}
375381
protoMessage.setStatus(msg.status.value());
@@ -390,7 +396,7 @@ private class SendMessageCallback implements ProtoLogic.ISendMessageCallback {
390396
@Override
391397
public void onSuccess(long messageUid, long timestamp) {
392398
try {
393-
if(callback != null)
399+
if (callback != null)
394400
callback.onSuccess(messageUid, timestamp);
395401
} catch (RemoteException e) {
396402
e.printStackTrace();
@@ -400,7 +406,7 @@ public void onSuccess(long messageUid, long timestamp) {
400406
@Override
401407
public void onFailure(int errorCode) {
402408
try {
403-
if(callback != null)
409+
if (callback != null)
404410
callback.onFailure(errorCode);
405411
} catch (RemoteException e) {
406412
e.printStackTrace();
@@ -410,7 +416,7 @@ public void onFailure(int errorCode) {
410416
@Override
411417
public void onPrepared(long messageId, long savedTime) {
412418
try {
413-
if(callback != null)
419+
if (callback != null)
414420
callback.onPrepared(messageId, savedTime);
415421
} catch (RemoteException e) {
416422
e.printStackTrace();
@@ -420,7 +426,7 @@ public void onPrepared(long messageId, long savedTime) {
420426
@Override
421427
public void onProgress(long uploaded, long total) {
422428
try {
423-
if(callback != null)
429+
if (callback != null)
424430
callback.onProgress(uploaded, total);
425431
} catch (RemoteException e) {
426432
e.printStackTrace();
@@ -430,7 +436,7 @@ public void onProgress(long uploaded, long total) {
430436
@Override
431437
public void onMediaUploaded(String remoteUrl) {
432438
try {
433-
if(callback != null)
439+
if (callback != null)
434440
callback.onMediaUploaded(remoteUrl);
435441
} catch (RemoteException e) {
436442
e.printStackTrace();
@@ -611,7 +617,7 @@ public void getUserMessagesEx(String userId, int[] conversationTypes, int[] line
611617

612618
@Override
613619
public void getRemoteMessages(Conversation conversation, int[] contentTypes, long beforeMessageUid, int count, IGetRemoteMessageCallback callback) throws RemoteException {
614-
if(contentTypes == null) {
620+
if (contentTypes == null) {
615621
contentTypes = new int[0];
616622
}
617623

@@ -648,9 +654,9 @@ public void getRemoteMessage(long messageUid, IGetRemoteMessageCallback callback
648654
@Override
649655
public void onSuccess(ProtoMessage[] protoMessages) {
650656
SafeIPCMessageEntry entry = buildSafeIPCMessages(protoMessages, 0, false);
651-
if(callback != null) {
657+
if (callback != null) {
652658
try {
653-
if(entry == null || entry.messages == null || entry.messages.isEmpty()) {
659+
if (entry == null || entry.messages == null || entry.messages.isEmpty()) {
654660
callback.onFailure(245);
655661
} else {
656662
callback.onSuccess(entry.messages);
@@ -663,7 +669,7 @@ public void onSuccess(ProtoMessage[] protoMessages) {
663669

664670
@Override
665671
public void onFailure(int i) {
666-
if(callback != null) {
672+
if (callback != null) {
667673
try {
668674
callback.onFailure(i);
669675
} catch (RemoteException e) {
@@ -901,7 +907,7 @@ public void clearAllUnreadStatus() throws RemoteException {
901907
@Override
902908
public boolean markAsUnRead(int conversationType, String target, int line, boolean sync) throws RemoteException {
903909
long messageUid = ProtoLogic.setLastReceivedMessageUnRead(conversationType, target, line, 0, 0);
904-
if(messageUid > 0 && sync) {
910+
if (messageUid > 0 && sync) {
905911
MarkUnreadMessageContent content = new MarkUnreadMessageContent(messageUid, ProtoLogic.getMessageByUid(messageUid).getTimestamp());
906912
Message message = new Message();
907913
message.conversation = new Conversation(Conversation.ConversationType.type(conversationType), target, line);
@@ -953,7 +959,7 @@ public void setConversationTop(int conversationType, String target, int line, bo
953959
@Override
954960
public void setConversationDraft(int conversationType, String target, int line, String draft) throws RemoteException {
955961
ConversationInfo conversationInfo = getConversation(conversationType, target, line);
956-
if (conversationInfo == null){
962+
if (conversationInfo == null) {
957963
return;
958964
}
959965
if ((TextUtils.isEmpty(conversationInfo.draft) && TextUtils.isEmpty(draft)) || TextUtils.equals(conversationInfo.draft, draft)) {
@@ -2978,7 +2984,20 @@ public void onConnectToServer(String host, String ip, int port) {
29782984

29792985
@Override
29802986
public void onTrafficData(long send, long recv) {
2981-
Log.d("client", "on traffic data(" + send + ", " + recv + ")");
2987+
handler.post(() -> {
2988+
int i = onTrafficDataListenerRemoteCallbackList.beginBroadcast();
2989+
IOnTrafficDataListener listener;
2990+
while (i > 0) {
2991+
i--;
2992+
listener = onTrafficDataListenerRemoteCallbackList.getBroadcastItem(i);
2993+
try {
2994+
listener.onTrafficData(send, recv);
2995+
} catch (RemoteException e) {
2996+
e.printStackTrace();
2997+
}
2998+
}
2999+
onTrafficDataListenerRemoteCallbackList.finishBroadcast();
3000+
});
29823001
}
29833002

29843003
@Override
@@ -3093,16 +3112,16 @@ public void onReceiveMessage(List<ProtoMessage> messages, boolean hasMore) {
30933112
if (messages.isEmpty()) {
30943113
return;
30953114
}
3096-
for (ProtoMessage message:messages) {
3115+
for (ProtoMessage message : messages) {
30973116
filterNewMessage(message);
30983117
}
30993118
handler.post(() -> onReceiveMessageInternal(messages.toArray(new ProtoMessage[0])));
31003119
}
31013120

31023121
private void filterNewMessage(ProtoMessage protoMessage) {
3103-
if(protoMessage.getContent().getType() == ContentType_Mark_Unread_Sync && userId != null && userId.equals(protoMessage.getFrom())) {
3122+
if (protoMessage.getContent().getType() == ContentType_Mark_Unread_Sync && userId != null && userId.equals(protoMessage.getFrom())) {
31043123
Message msg = convertProtoMessage(protoMessage);
3105-
MarkUnreadMessageContent content = (MarkUnreadMessageContent)msg.content;
3124+
MarkUnreadMessageContent content = (MarkUnreadMessageContent) msg.content;
31063125
ProtoLogic.setLastReceivedMessageUnRead(msg.conversation.type.getValue(), msg.conversation.target, msg.conversation.line, content.getMessageUid(), content.getTimestamp());
31073126
}
31083127
}

client/src/main/java/cn/wildfirechat/remote/ChatManager.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
import cn.wildfirechat.client.IOnGroupMembersUpdateListener;
7373
import cn.wildfirechat.client.IOnReceiveMessageListener;
7474
import cn.wildfirechat.client.IOnSettingUpdateListener;
75+
import cn.wildfirechat.client.IOnTrafficDataListener;
7576
import cn.wildfirechat.client.IOnUserInfoUpdateListener;
7677
import cn.wildfirechat.client.IRemoteClient;
7778
import cn.wildfirechat.client.IUploadMediaCallback;
@@ -194,6 +195,7 @@ public class ChatManager {
194195
private boolean isBackground = true;
195196
private List<OnReceiveMessageListener> onReceiveMessageListeners = new ArrayList<>();
196197
private List<OnConnectionStatusChangeListener> onConnectionStatusChangeListeners = new ArrayList<>();
198+
private List<OnTrafficDataListener> onTrafficDataListeners = new ArrayList<>();
197199
private List<OnConnectToServerListener> onConnectToServerListeners = new ArrayList<>();
198200
private List<OnSendMessageListener> sendMessageListeners = new ArrayList<>();
199201
private List<OnGroupInfoUpdateListener> groupInfoUpdateListeners = new ArrayList<>();
@@ -616,6 +618,14 @@ private void onConferenceEvent(String event) {
616618
});
617619
}
618620

621+
private void onTrafficData(long send, long recv){
622+
mainHandler.post(() -> {
623+
for (OnTrafficDataListener listener : onTrafficDataListeners) {
624+
listener.onTrafficData(send, recv);
625+
}
626+
});
627+
}
628+
619629
/**
620630
* 添加新消息监听, 记得调用{@link #removeOnReceiveMessageListener(OnReceiveMessageListener)}删除监听
621631
*
@@ -817,6 +827,33 @@ public void removeSettingUpdateListener(OnSettingUpdateListener listener) {
817827
settingUpdateListeners.remove(listener);
818828
}
819829

830+
/**
831+
* 添加流量监听
832+
*
833+
* @param listener
834+
*/
835+
public void addTrafficDataListener(OnTrafficDataListener listener) {
836+
if (listener == null) {
837+
return;
838+
}
839+
if (!onTrafficDataListeners.contains(listener)) {
840+
onTrafficDataListeners.add(listener);
841+
}
842+
}
843+
844+
/**
845+
* 删除流量监听
846+
*
847+
* @param listener
848+
*/
849+
public void removeTrafficDataListener(OnTrafficDataListener listener) {
850+
if (listener == null) {
851+
return;
852+
}
853+
onTrafficDataListeners.remove(listener);
854+
}
855+
856+
820857
/**
821858
* 启用国密加密,需要在connect之前调用,需要IM服务开启国密才可以使用。
822859
*/
@@ -7147,6 +7184,13 @@ public void onConferenceEvent(String event) throws RemoteException {
71477184
ChatManager.this.onConferenceEvent(event);
71487185
}
71497186
});
7187+
mClient.setOnTrafficDataListener(new IOnTrafficDataListener.Stub() {
7188+
@Override
7189+
public void onTrafficData(long send, long recv) throws RemoteException {
7190+
ChatManager.this.onTrafficData(send, recv);
7191+
}
7192+
});
7193+
71507194

71517195
mClient.setLiteMode(isLiteMode);
71527196

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*
2+
* Copyright (c) 2022 WildFireChat. All rights reserved.
3+
*/
4+
5+
package cn.wildfirechat.remote;
6+
7+
interface OnTrafficDataListener {
8+
void onTrafficData(long send, long recv);
9+
}

0 commit comments

Comments
 (0)