mirror of
https://gitee.com/farsunset/cim.git
synced 2025-08-02 20:45:46 +08:00
1修改了端开服务端后 某些情况下 又自动连上的的bug
2新增了 与服务端断开连接的事件
This commit is contained in:
parent
ae509b3f0c
commit
b21a344064
BIN
CIM客户端文档.doc
BIN
CIM客户端文档.doc
Binary file not shown.
@ -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
|
||||
|
@ -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);
|
||||
|
@ -50,5 +50,11 @@ public interface OnCIMMessageListener
|
||||
* 连接服务端成功
|
||||
*/
|
||||
public abstract void onConnectionSucceed();
|
||||
|
||||
|
||||
/**
|
||||
* 连接断开
|
||||
*/
|
||||
public abstract void onConnectionClosed();
|
||||
}
|
||||
|
||||
|
@ -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.
BIN
cim_for_mina/mchat-simple/libs/cim-core.1.5.jar
Normal file
BIN
cim_for_mina/mchat-simple/libs/cim-core.1.5.jar
Normal file
Binary file not shown.
@ -56,7 +56,17 @@ public abstract class CIMMonitorActivity extends Activity implements OnCIMMess
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 与服务端断开连接时回调,不要在里面做连接服务端的操作
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void onConnectionClosed() {}
|
||||
|
||||
/**
|
||||
* 连接服务端成功时回调
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void onConnectionSucceed() {}
|
||||
@Override
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -50,5 +50,11 @@ public interface OnCIMMessageListener
|
||||
* 连接服务端成功
|
||||
*/
|
||||
public abstract void onConnectionSucceed();
|
||||
|
||||
|
||||
/**
|
||||
* 连接断开
|
||||
*/
|
||||
public abstract void onConnectionClosed();
|
||||
}
|
||||
|
||||
|
Binary file not shown.
BIN
cim_for_netty/mchat-simple/libs/cim-core.1.5.jar
Normal file
BIN
cim_for_netty/mchat-simple/libs/cim-core.1.5.jar
Normal file
Binary file not shown.
@ -70,8 +70,15 @@ public abstract class CIMMonitorActivity extends Activity implements OnCIMMess
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 与服务端断开连接时回调,不要再里面做连接服务端的操作
|
||||
*/
|
||||
@Override
|
||||
public void onConnectionClosed(){};
|
||||
|
||||
/**
|
||||
* 与服务端断开连接时成功时回调
|
||||
*/
|
||||
@Override
|
||||
public void onConnectionSucceed() {}
|
||||
@Override
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user