import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.os.RemoteCallbackList;
import android.text.TextUtils;
import com.enqualcomm.support.Config;
private static final String CMDHEADERSPLIT = "*";
private static final String CMDSPLIT = ",";
private static final boolean doEncryption = Util.getSystemProperties("persist.sys.encrypt_fzd", "true").equals("true");
- public static final String defaultServerIP = "api.xcloudtech.com";
+ public static final String defaultServerIP = "fzd.xcloudtech.com";
public static final int defaultServerPort = 9000;
private final SharedPreferences sharedPreferences;
static {
cmdMap = new HashMap<>();
cmdMap.put(CMD_TYPE.LK, "LK");
- cmdMap.put(CMD_TYPE.MEMBERS, "MEMBERS");
- cmdMap.put(CMD_TYPE.RTALK, "RTALK");
- cmdMap.put(CMD_TYPE.RCALLING, "RCALLING");
- cmdMap.put(CMD_TYPE.TALK, "TALK");
- cmdMap.put(CMD_TYPE.CALLING, "CALLING");
cmdMap.put(CMD_TYPE.PING, "PING");
cmdMap.put(CMD_TYPE.KA, "KA");
cmdMap.put(CMD_TYPE.UD, "UD");
cmdMap.put(CMD_TYPE.heart, "heart");
cmdMap.put(CMD_TYPE.PRACTICE, "PRACTICE");
cmdMap.put(CMD_TYPE.BRREG, "BRREG");
-
+ cmdMap.put(CMD_TYPE.MEMBERS, "MEMBERS");
+ cmdMap.put(CMD_TYPE.RTALK, "RTALK");
+ cmdMap.put(CMD_TYPE.RCALLING, "RCALLING");
+ cmdMap.put(CMD_TYPE.TALK, "TALK");
+ cmdMap.put(CMD_TYPE.CALLING, "CALLING");
}
private Connection mConnection = null;
//保存一份到sp里
//通知一callback
handleBRREG(mRuntime, data);
+ mConnection.DeliverCMDMessageToSystem(cmdMap.get(CMD_TYPE.BRREG), cmd);
break;
case MEMBERS:
ICLogger.i("收到群成员数据 ==> " + data);
//处理一下数据
handleMEMBERS(mRuntime, data);
+ mConnection.DeliverCMDMessageToSystem(cmdMap.get(CMD_TYPE.MEMBERS), cmd);
break;
case RTALK:
//拒绝通话请求,当我们通过TALK向对方发起通话请求的时候,如果对方拒绝,则会收到此指令
case TALK:
//0 表示可正常通话,-1 表示余额不足,不能通话,1 表示对方不在线或未登陆成功
ICLogger.i("收到向对方请求音视频通话的结果 ==> " + data);
- handlerTalkRequestResult(mRuntime, data);
+ handlerTalkRequestResult(mConnection, mRuntime, data);
+ mConnection.DeliverCMDMessageToSystem(cmdMap.get(CMD_TYPE.TALK), cmd);
break;
case CALLING:
//有音视频聊天请求,此指令由平台发送,也就是被动通知
break;
case RCALLING:
ICLogger.i("服务器收到了我拒绝音视频通话的消息");
+ mConnection.DeliverCMDMessageToSystem(cmdMap.get(CMD_TYPE.RCALLING), cmd);
break;
case LK: //登录包
ICLogger.i("服务器收到登录包LK");
* @param data
*/
private void handleBRREG(Runtime runtime, String data) {
- IFZDCallback fzdCallback = runtime.getFZDCallback();
+ RemoteCallbackList<IFZDCallback> fzdCallback = runtime.getFZDCallback();
if (fzdCallback == null) {
return;
}
try {
- if (TextUtils.isEmpty(data)) {
- ICLogger.i("佰锐ID为空...");
- fzdCallback.onBRIdEmpty();
- } else {
- fzdCallback.onBRIdLoaded(data);
+ int i = fzdCallback.beginBroadcast();
+ while (i > 0) {
+ i--;
+ IFZDCallback broadcastItem = fzdCallback.getBroadcastItem(i);
+ if (TextUtils.isEmpty(data)) {
+ ICLogger.i("佰锐ID为空...");
+ broadcastItem.onBRIdEmpty();
+ } else {
+ broadcastItem.onBRIdLoaded(data);
+ }
}
+ fzdCallback.finishBroadcast();
//保存到sp里面
sharedPreferences.edit().putString(BRREG_ID, data).apply();
} catch (Exception e) {
*/
private void handleRTalk(Connection mConnection, Runtime mRuntime, String data) {
try {
- IFZDCallback fzdCallback = mRuntime.getFZDCallback();
+ RemoteCallbackList<IFZDCallback> fzdCallback = mRuntime.getFZDCallback();
if (fzdCallback != null && !TextUtils.isEmpty(data)) {
+ int i = fzdCallback.beginBroadcast();
ICLogger.d("data == > " + data);
String[] split = data.split(CMDSPLIT);
- if (split.length == 3) {
- fzdCallback.onRemoteReject(split[0], Integer.parseInt(split[1]));
+ while (i > 0) {
+ i--;
+ if (split.length == 3) {
+ fzdCallback.getBroadcastItem(i).onRemoteReject(split[0], Integer.parseInt(split[1]));
+ }
}
+ fzdCallback.finishBroadcast();
}
} catch (Exception e) {
e.printStackTrace();
*/
public static StringMessage TALK(int type, String remoteAccount) {
//准备数据
- String data = type + CMDSPLIT + remoteAccount;
+ String data = type + CMDSPLIT + remoteAccount + CMDSPLIT;
ICLogger.d("request talk == > " + data);
- return genFZDCMD(cmdMap.get(CMD_TYPE.MEMBERS), data);
+ return genFZDCMD(cmdMap.get(CMD_TYPE.TALK), data);
}
* <p>
* 0 表示可正常通话,-1 表示余额不足,不能通话,1 表示对方不在线或未登陆成功
*
+ * @param mConnection
* @param mRuntime
* @param data
*/
- private void handlerTalkRequestResult(Runtime mRuntime, String data) {
+ private void handlerTalkRequestResult(Connection mConnection, Runtime mRuntime, String data) {
ICLogger.d("handlerTalkRequestResult == > " + data);
//可以正常通话,可以不处理
//如果不能正常通话,则要提示用户了
try {
-
- IFZDCallback fzdCallback = mRuntime.getFZDCallback();
- if (fzdCallback != null) {
- int result = Integer.parseInt(data);
- ICLogger.d("0 表示可正常通话,-1 表示余额不足,不能通话,1 表示对方不在线或未登陆成功 === > " + data);
- fzdCallback.onCallRequestResult(result);
+ RemoteCallbackList<IFZDCallback> fzdCallback = mRuntime.getFZDCallback();
+ int i = fzdCallback.beginBroadcast();
+ while (i > 0) {
+ i--;
+ if (fzdCallback != null) {
+ int result = Integer.parseInt(data);
+ ICLogger.d("0 表示可正常通话,-1 表示余额不足,不能通话,1 表示对方不在线或未登陆成功 === > " + data);
+ fzdCallback.getBroadcastItem(i).onCallRequestResult(result);
+ }
}
+ fzdCallback.finishBroadcast();
} catch (Exception e) {
e.printStackTrace();
}
ICLogger.d("members data == > " + data);
String s = Util.decodeUnicode2Utf8(data);
ICLogger.d("members result == > " + s);
- //TODO:
+ //对数据进行切割
+ String[] split = data.split(CMDSPLIT);
}
}