diff --git a/CIM客户端文档.doc b/CIM客户端文档.doc index 85e3dd1..cfe5051 100644 Binary files a/CIM客户端文档.doc and b/CIM客户端文档.doc differ diff --git a/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMEnventListenerReceiver.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMEnventListenerReceiver.java index 0d5904e..b9827ab 100644 --- a/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMEnventListenerReceiver.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMEnventListenerReceiver.java @@ -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 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 diff --git a/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java index 8e149b3..9b494a9 100644 --- a/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java @@ -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); } - - /** - * 异步获取与服务端连接状态,将会在广播中收到onConnectionStatus(boolean 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); diff --git a/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java index b9cb627..5fe4bf8 100644 --- a/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java @@ -50,5 +50,11 @@ public interface OnCIMMessageListener * 连接服务端成功 */ public abstract void onConnectionSucceed(); + + + /** + * 连接断开 + */ + public abstract void onConnectionClosed(); } diff --git a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java index 59676e6..f863800 100644 --- a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java @@ -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++) { diff --git a/cim_for_mina/mchat-simple/libs/cim-core.1.4.jar b/cim_for_mina/mchat-simple/libs/cim-core.1.4.jar deleted file mode 100644 index 259c85a..0000000 Binary files a/cim_for_mina/mchat-simple/libs/cim-core.1.4.jar and /dev/null differ diff --git a/cim_for_mina/mchat-simple/libs/cim-core.1.5.jar b/cim_for_mina/mchat-simple/libs/cim-core.1.5.jar new file mode 100644 index 0000000..3bfd980 Binary files /dev/null and b/cim_for_mina/mchat-simple/libs/cim-core.1.5.jar differ diff --git a/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java index 37881e8..590e1e0 100644 --- a/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java +++ b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java @@ -56,7 +56,17 @@ public abstract class CIMMonitorActivity extends Activity implements OnCIMMess - + /** + * 与服务端断开连接时回调,不要在里面做连接服务端的操作 + */ + + @Override + public void onConnectionClosed() {} + + /** + * 连接服务端成功时回调 + */ + @Override public void onConnectionSucceed() {} @Override diff --git a/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/Constant.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/Constant.java index 4546e1e..a2f508f 100644 --- a/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/Constant.java +++ b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/app/Constant.java @@ -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; diff --git a/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java index b009a86..b4d0dba 100644 --- a/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java +++ b/cim_for_mina/mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java @@ -100,5 +100,14 @@ public final class CustomCIMMessageReceiver extends CIMEnventListenerReceiver { } } + + @Override + public void onConnectionClosed() { + // TODO Auto-generated method stub + for (int index = 0 ;index 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 diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java index 1b7ef13..9b494a9 100644 --- a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushManager.java @@ -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); } - - /** - * 异步获取与服务端连接状态,将会在广播中收到onConnectionStatus(boolean f) - * @param context - */ public void detectIsConnected(Context context){ Intent serviceIntent = new Intent(context, CIMPushService.class); serviceIntent.putExtra(SERVICE_ACTION, ACTION_CONNECTION_STATUS); diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java index b9cb627..5fe4bf8 100644 --- a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/OnCIMMessageListener.java @@ -50,5 +50,11 @@ public interface OnCIMMessageListener * 连接服务端成功 */ public abstract void onConnectionSucceed(); + + + /** + * 连接断开 + */ + public abstract void onConnectionClosed(); } diff --git a/cim_for_netty/mchat-simple/libs/cim-core.1.4.jar b/cim_for_netty/mchat-simple/libs/cim-core.1.4.jar deleted file mode 100644 index 1e5d1ae..0000000 Binary files a/cim_for_netty/mchat-simple/libs/cim-core.1.4.jar and /dev/null differ diff --git a/cim_for_netty/mchat-simple/libs/cim-core.1.5.jar b/cim_for_netty/mchat-simple/libs/cim-core.1.5.jar new file mode 100644 index 0000000..0c26919 Binary files /dev/null and b/cim_for_netty/mchat-simple/libs/cim-core.1.5.jar differ diff --git a/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java b/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java index f4cd62a..f3e4140 100644 --- a/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java +++ b/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/app/CIMMonitorActivity.java @@ -70,8 +70,15 @@ public abstract class CIMMonitorActivity extends Activity implements OnCIMMess } - - + /** + * 与服务端断开连接时回调,不要再里面做连接服务端的操作 + */ + @Override + public void onConnectionClosed(){}; + + /** + * 与服务端断开连接时成功时回调 + */ @Override public void onConnectionSucceed() {} @Override diff --git a/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/app/Constant.java b/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/app/Constant.java index d5c86e9..a2f508f 100644 --- a/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/app/Constant.java +++ b/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/app/Constant.java @@ -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; diff --git a/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java b/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java index b009a86..61dbd33 100644 --- a/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java +++ b/cim_for_netty/mchat-simple/src/com/farsunset/ichat/example/receiver/CustomCIMMessageReceiver.java @@ -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