1修改了端开服务端后 某些情况下 又自动连上的的bug

2新增了 与服务端断开连接的事件
This commit is contained in:
xiajun@doweidu.com 2014-08-15 14:56:22 +08:00
parent ae509b3f0c
commit b21a344064
18 changed files with 138 additions and 89 deletions

Binary file not shown.

View File

@ -38,7 +38,7 @@ public abstract class CIMEnventListenerReceiver extends BroadcastReceiver impl
if(it.getAction().equals(CIMConnectorManager.ACTION_CONNECTION_CLOSED))
{
onConnectionClosed();
dispatchConnectionClosed();
}
if(it.getAction().equals(CIMConnectorManager.ACTION_CONNECTION_FAILED))
@ -48,7 +48,7 @@ public abstract class CIMEnventListenerReceiver extends BroadcastReceiver impl
if(it.getAction().equals(CIMConnectorManager.ACTION_CONNECTION_SUCCESS))
{
onDispatchConnectionSucceed();
dispatchConnectionSucceed();
}
if(it.getAction().equals(CIMConnectorManager.ACTION_MESSAGE_RECEIVED))
@ -84,6 +84,18 @@ public abstract class CIMEnventListenerReceiver extends BroadcastReceiver impl
}
private void dispatchConnectionClosed() {
if(CIMConnectorManager.netWorkAvailable(context))
{
CIMPushManager.init(context);
}
onConnectionClosed();
}
protected boolean isInBackground(Context context) {
List<RunningTaskInfo> tasksInfo = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).getRunningTasks(1);
if (tasksInfo.size() > 0) {
@ -97,27 +109,23 @@ public abstract class CIMEnventListenerReceiver extends BroadcastReceiver impl
return true;
}
private void onConnectionClosed(){
boolean isManualStop = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_MANUAL_STOP);
boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED);
if(CIMConnectorManager.netWorkAvailable(context) && !isManualStop && !isManualDestory)
{
CIMPushManager.init(context);
}
}
private void onConnectionFailed(Exception e){
if(CIMConnectorManager.netWorkAvailable(context))
{
CIMPushManager.init(context);
}
}
private void dispatchConnectionSucceed() {
CIMPushManager.setAccount(context);
onConnectionSucceed();
}
private void onUncaughtException(Throwable arg0) {}
@ -156,16 +164,6 @@ public abstract class CIMEnventListenerReceiver extends BroadcastReceiver impl
}
private void onDispatchConnectionSucceed(){
CIMPushManager.setAccount(context);
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP,false);
onConnectionSucceed();
}
private void onSentSucceed(SentBody body){}
@Override

View File

@ -39,6 +39,7 @@ public class CIMPushManager {
public static void init(Context context,String ip,int port){
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED, false);
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP, false);
Intent serviceIntent = new Intent(context, CIMPushService.class);
serviceIntent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST, ip);
@ -51,6 +52,14 @@ public class CIMPushManager {
protected static void init(Context context){
boolean isManualStop = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_MANUAL_STOP);
boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED);
if(isManualStop || isManualDestory)
{
return ;
}
String host = CIMDataConfig.getString(context, CIMDataConfig.KEY_CIM_SERVIER_HOST);
int port =CIMDataConfig.getInt(context, CIMDataConfig.KEY_CIM_SERVIER_PORT);
@ -65,8 +74,11 @@ public class CIMPushManager {
*/
public static void setAccount(Context context,String account){
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP, false);
if(account==null || account.trim().length()==0)
{
{
return ;
}
CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, account);
@ -92,15 +104,14 @@ public class CIMPushManager {
}
protected static void setAccount(Context context){
String account = CIMDataConfig.getString(context,CIMDataConfig.KEY_ACCOUNT);
setAccount(context,account);
}
protected static void clearAccount(Context context){
CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, null);
}
/**
* 发送一个CIM请求
@ -127,12 +138,12 @@ public class CIMPushManager {
*/
public static void stop(Context context){
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP, true);
boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED);
if(isManualDestory){
return ;
}
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP, true);
Intent serviceIntent = new Intent(context, CIMPushService.class);
serviceIntent.putExtra(SERVICE_ACTION, ACTION_DISCONNECTION);
@ -172,12 +183,7 @@ public class CIMPushManager {
setAccount(context);
}
/**
* 异步获取与服务端连接状态,将会在广播中收到onConnectionStatusboolean f
* @param context
*/
public static void detectIsConnected(Context context){
public void detectIsConnected(Context context){
Intent serviceIntent = new Intent(context, CIMPushService.class);
serviceIntent.putExtra(SERVICE_ACTION, ACTION_CONNECTION_STATUS);
context.startService(serviceIntent);

View File

@ -50,5 +50,11 @@ public interface OnCIMMessageListener
* 连接服务端成功
*/
public abstract void onConnectionSucceed();
/**
* 连接断开
*/
public abstract void onConnectionClosed();
}

View File

@ -1,8 +1,6 @@
package com.farsunset.cim.nio.filter;
import java.io.ByteArrayInputStream;
import java.nio.charset.Charset;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@ -23,7 +21,6 @@ import com.farsunset.cim.nio.mutual.SentBody;
*/
public class ServerMessageDecoder extends CumulativeProtocolDecoder {
private final Charset charset = Charset.forName("UTF-8");
private IoBuffer buff = IoBuffer.allocate(320).setAutoExpand(true);
@Override
public boolean doDecode(IoSession iosession, IoBuffer iobuffer, ProtocolDecoderOutput out) throws Exception {
@ -46,14 +43,14 @@ public class ServerMessageDecoder extends CumulativeProtocolDecoder {
buff.flip();
byte[] bytes = new byte[buff.limit()];
buff.get(bytes);
String message = new String(bytes, charset);
String message = new String(bytes, "UTF-8");
buff.clear();
SentBody body = new SentBody();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new ByteArrayInputStream(message.getBytes(charset)));
Document doc = builder.parse(new ByteArrayInputStream(message.getBytes("UTF-8")));
body.setKey(doc.getElementsByTagName("key").item(0).getTextContent());
NodeList items = doc.getElementsByTagName("data").item(0).getChildNodes();
for (int i = 0; i < items.getLength(); i++) {

Binary file not shown.

View File

@ -56,7 +56,17 @@ public abstract class CIMMonitorActivity extends Activity implements OnCIMMess
/**
* 与服务端断开连接时回调,不要在里面做连接服务端的操作
*/
@Override
public void onConnectionClosed() {}
/**
* 连接服务端成功时回调
*/
@Override
public void onConnectionSucceed() {}
@Override

View File

@ -12,9 +12,9 @@ package com.farsunset.ichat.example.app;
public interface Constant {
//服务端web地址
public static final String SERVER_URL = "http://192.168.0.107:8080/ichat-server";
public static final String SERVER_URL = "http://10.0.0.127:8080/ichat-server";
//服务端IP地址
public static final String CIM_SERVER_HOST = "192.168.0.107";
public static final String CIM_SERVER_HOST = "10.0.0.127";
//注意这里的端口不是tomcat的端口CIM端口在服务端spring-cim.xml中配置的没改动就使用默认的23456
public static final int CIM_SERVER_PORT = 23456;

View File

@ -100,5 +100,14 @@ public final class CustomCIMMessageReceiver extends CIMEnventListenerReceiver {
}
}
@Override
public void onConnectionClosed() {
// TODO Auto-generated method stub
for (int index = 0 ;index<CIMListenerManager.getCIMListeners().size();index++) {
CIMListenerManager.getCIMListeners().get(index).onConnectionClosed();
}
}
}

View File

@ -38,7 +38,7 @@ public abstract class CIMEnventListenerReceiver extends BroadcastReceiver impl
if(it.getAction().equals(CIMConnectorManager.ACTION_CONNECTION_CLOSED))
{
onConnectionClosed();
dispatchConnectionClosed();
}
if(it.getAction().equals(CIMConnectorManager.ACTION_CONNECTION_FAILED))
@ -48,7 +48,7 @@ public abstract class CIMEnventListenerReceiver extends BroadcastReceiver impl
if(it.getAction().equals(CIMConnectorManager.ACTION_CONNECTION_SUCCESS))
{
onDispatchConnectionSucceed();
dispatchConnectionSucceed();
}
if(it.getAction().equals(CIMConnectorManager.ACTION_MESSAGE_RECEIVED))
@ -84,6 +84,18 @@ public abstract class CIMEnventListenerReceiver extends BroadcastReceiver impl
}
private void dispatchConnectionClosed() {
if(CIMConnectorManager.netWorkAvailable(context))
{
CIMPushManager.init(context);
}
onConnectionClosed();
}
protected boolean isInBackground(Context context) {
List<RunningTaskInfo> tasksInfo = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).getRunningTasks(1);
if (tasksInfo.size() > 0) {
@ -97,27 +109,23 @@ public abstract class CIMEnventListenerReceiver extends BroadcastReceiver impl
return true;
}
private void onConnectionClosed(){
boolean isManualStop = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_MANUAL_STOP);
boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED);
if(CIMConnectorManager.netWorkAvailable(context) && !isManualStop && !isManualDestory)
{
CIMPushManager.init(context);
}
}
private void onConnectionFailed(Exception e){
if(CIMConnectorManager.netWorkAvailable(context))
{
CIMPushManager.init(context);
}
}
private void dispatchConnectionSucceed() {
CIMPushManager.setAccount(context);
onConnectionSucceed();
}
private void onUncaughtException(Throwable arg0) {}
@ -156,16 +164,6 @@ public abstract class CIMEnventListenerReceiver extends BroadcastReceiver impl
}
private void onDispatchConnectionSucceed(){
CIMPushManager.setAccount(context);
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP,false);
onConnectionSucceed();
}
private void onSentSucceed(SentBody body){}
@Override

View File

@ -2,6 +2,7 @@ package com.farsunset.cim.client.android;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import com.farsunset.cim.nio.constant.CIMConstant;
import com.farsunset.cim.nio.mutual.SentBody;
@ -38,6 +39,7 @@ public class CIMPushManager {
public static void init(Context context,String ip,int port){
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED, false);
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP, false);
Intent serviceIntent = new Intent(context, CIMPushService.class);
serviceIntent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST, ip);
@ -50,6 +52,14 @@ public class CIMPushManager {
protected static void init(Context context){
boolean isManualStop = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_MANUAL_STOP);
boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED);
if(isManualStop || isManualDestory)
{
return ;
}
String host = CIMDataConfig.getString(context, CIMDataConfig.KEY_CIM_SERVIER_HOST);
int port =CIMDataConfig.getInt(context, CIMDataConfig.KEY_CIM_SERVIER_PORT);
@ -64,6 +74,9 @@ public class CIMPushManager {
*/
public static void setAccount(Context context,String account){
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP, false);
if(account==null || account.trim().length()==0)
{
return ;
@ -91,15 +104,14 @@ public class CIMPushManager {
}
protected static void setAccount(Context context){
String account = CIMDataConfig.getString(context,CIMDataConfig.KEY_ACCOUNT);
setAccount(context,account);
}
protected static void clearAccount(Context context){
CIMDataConfig.putString(context,CIMDataConfig.KEY_ACCOUNT, null);
}
/**
* 发送一个CIM请求
@ -126,12 +138,12 @@ public class CIMPushManager {
*/
public static void stop(Context context){
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP, true);
boolean isManualDestory = CIMDataConfig.getBoolean(context,CIMDataConfig.KEY_CIM_DESTORYED);
if(isManualDestory){
return ;
}
CIMDataConfig.putBoolean(context,CIMDataConfig.KEY_MANUAL_STOP, true);
Intent serviceIntent = new Intent(context, CIMPushService.class);
serviceIntent.putExtra(SERVICE_ACTION, ACTION_DISCONNECTION);
@ -171,11 +183,6 @@ public class CIMPushManager {
setAccount(context);
}
/**
* 异步获取与服务端连接状态,将会在广播中收到onConnectionStatusboolean f
* @param context
*/
public void detectIsConnected(Context context){
Intent serviceIntent = new Intent(context, CIMPushService.class);
serviceIntent.putExtra(SERVICE_ACTION, ACTION_CONNECTION_STATUS);

View File

@ -50,5 +50,11 @@ public interface OnCIMMessageListener
* 连接服务端成功
*/
public abstract void onConnectionSucceed();
/**
* 连接断开
*/
public abstract void onConnectionClosed();
}

Binary file not shown.

View File

@ -70,8 +70,15 @@ public abstract class CIMMonitorActivity extends Activity implements OnCIMMess
}
/**
* 与服务端断开连接时回调不要再里面做连接服务端的操作
*/
@Override
public void onConnectionClosed(){};
/**
* 与服务端断开连接时成功时回调
*/
@Override
public void onConnectionSucceed() {}
@Override

View File

@ -12,9 +12,9 @@ package com.farsunset.ichat.example.app;
public interface Constant {
//服务端web地址
public static final String SERVER_URL = "http://10.0.0.102:8080/ichat-server";
public static final String SERVER_URL = "http://10.0.0.127:8080/ichat-server";
//服务端IP地址
public static final String CIM_SERVER_HOST = "10.0.0.102";
public static final String CIM_SERVER_HOST = "10.0.0.127";
//注意这里的端口不是tomcat的端口CIM端口在服务端spring-cim.xml中配置的没改动就使用默认的23456
public static final int CIM_SERVER_PORT = 23456;

View File

@ -99,6 +99,11 @@ public final class CustomCIMMessageReceiver extends CIMEnventListenerReceiver {
CIMListenerManager.getCIMListeners().get(index).onConnectionStatus(arg0);
}
}
@Override
public void onConnectionClosed() {
for (int index = 0 ;index<CIMListenerManager.getCIMListeners().size();index++) {
CIMListenerManager.getCIMListeners().get(index).onConnectionClosed();
}
}
}