注册

移动客服android SDK里面的KefuPolling.startPolling方法是干嘛的,10s一次轮询,请问这个轮询是起什么作用?

public static void startPolling(final String toUsername) {
if(!TextUtils.isEmpty(toUsername)) {
EMLog.d("kefu service", "startPolling");
isCancel = false;
singleThreadPool.execute(new Runnable() {
public void run() {
while(!KefuPolling.isCancel) {
try {
KefuHttpClient.receiveMessages(toUsername, new EMValueCallBack() {
public void onSuccess(String value) {
EMLog.d("kefu receive", "message:" + value);

try {
JSONObject e = new JSONObject(value);
String status = e.optString("status", "");
if(!status.equalsIgnoreCase("OK")) {
return;
}

JSONArray jsonEntities = e.getJSONArray("entities");
if(jsonEntities == null || jsonEntities.length() == 0) {
return;
}

ArrayList msgList = new ArrayList();

for(int k = 0; k < jsonEntities.length(); ++k) {
JSONObject jsonEntityOne = jsonEntities.getJSONObject(k);
JSONArray jsonMsgBodys = jsonEntityOne.getJSONArray("bodies");
JSONObject jsonExt = jsonEntityOne.getJSONObject("ext");
String fromParam = jsonEntityOne.getString("from");
String toParam = jsonEntityOne.getString("to");
JSONObject jsonMsgBody = jsonMsgBodys.getJSONObject(0);
String type = jsonMsgBody.getString("type");
if(type.equalsIgnoreCase("txt")) {
String txtMsg = jsonMsgBody.getString("msg");
if(toParam.equals(ChatClient.getInstance().getCurrentUserName())) {
Message message = Message.createReceiveMessage(Type.TXT);
message.setFrom(fromParam);
message.addBody(new EMTextMessageBody(txtMsg));
message.attributes = KefuPolling.json2Map(jsonExt);
String extMsgId = KefuPolling.getEMMessageExtMsgId(message);
message.setMsgId(extMsgId);
message.setStatus(Status.SUCCESS);
Log.d("kefu service", "extMsgId:" + extMsgId);
if(extMsgId != null) {
boolean isExist = true;
if(KefuDBManager.getInstance() != null) {
isExist = KefuDBManager.getInstance().isMessageExistedByExtMsgId(extMsgId);
}

Log.d("kefu service", "isExist:" + isExist);
if(!isExist) {
if(!message.isNotificationMessage()) {
KefuConversationManager.getInstance().saveMessage(message);
}

msgList.add(message);
}
}
}
}
}

if(msgList.size() > 0) {
ChatClient.getInstance().getChat().publishNewMessage(msgList);
}
} catch (JSONException var18) {
var18.printStackTrace();
}

}

public void onError(int error, String errorMsg) {
EMLog.e("kefu service", "" + errorMsg);
}
});
} catch (Exception var3) {
var3.printStackTrace();
EMLog.e("kefu service", "" + var3.getMessage());
}

try {
Thread.sleep(10000L);
EMLog.v("kefu service", "kefu ping...");
} catch (InterruptedException var2) {
var2.printStackTrace();
}
}

}
});
}
}
已邀请:
这个是第二通道中的http://docs.easemob.com/cs/300visitoraccess/2ndmessagechannel#访客端双通道功能

要回复问题请先登录注册