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 c89b933..bc3ab1f 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 @@ -13,7 +13,8 @@ import com.farsunset.cim.nio.mutual.SentBody; */ public class CIMPushManager { - + static String ACTION_CONNECTION_KEEPALIVE ="ACTION_CONNECTION_KEEPALIVE"; + static String ACTION_CONNECTION ="ACTION_CONNECTION"; static String ACTION_CONNECTION_STATUS ="ACTION_CONNECTION_STATUS"; diff --git a/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java index 39c841e..c496539 100644 --- a/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java @@ -1,10 +1,13 @@ package com.farsunset.cim.client.android; +import android.app.AlarmManager; +import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; +import android.util.Log; import com.farsunset.cim.nio.mutual.SentBody; @@ -18,25 +21,33 @@ import com.farsunset.cim.nio.mutual.SentBody; CIMConnectorManager manager; - + AlarmManager localAlarmManager; private IBinder binder=new CIMPushService.LocalBinder(); - + PendingIntent localPendingIntent; @Override public void onCreate() { manager = CIMConnectorManager.getManager(this.getApplicationContext()); + localPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(this, KeepAliveReceiver.class), PendingIntent.FLAG_CANCEL_CURRENT); + localAlarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); + localAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 300000L + System.currentTimeMillis(),300000L, localPendingIntent); } + @Override public int onStartCommand(Intent intent,int flags, int startId) { - + String action; if(intent==null) { - return super.onStartCommand(intent, flags, startId); - } + intent = new Intent(CIMPushManager.ACTION_CONNECTION); + String host = CIMDataConfig.getString(this, CIMDataConfig.KEY_CIM_SERVIER_HOST); + int port =CIMDataConfig.getInt(this, CIMDataConfig.KEY_CIM_SERVIER_PORT); + intent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST, host); + intent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, port); + } - String action = intent.getStringExtra(CIMPushManager.SERVICE_ACTION); + action = intent.getStringExtra(CIMPushManager.SERVICE_ACTION); if(CIMPushManager.ACTION_CONNECTION.equals(action)) { @@ -57,8 +68,11 @@ import com.farsunset.cim.nio.mutual.SentBody; if(CIMPushManager.ACTION_DESTORY.equals(action)) { + localAlarmManager.cancel(localPendingIntent); + localPendingIntent.cancel(); manager.destroy(); this.stopSelf(); + android.os.Process.killProcess(android.os.Process.myPid()); } if(CIMPushManager.ACTION_CONNECTION_STATUS.equals(action)) @@ -66,6 +80,22 @@ import com.farsunset.cim.nio.mutual.SentBody; manager.deliverIsConnected(); } + if(CIMPushManager.ACTION_CONNECTION_KEEPALIVE.equals(action)) + { + + if(!manager.isConnected()) + { + Log.d(CIMPushService.class.getSimpleName(), "isConnected() = false "); + String host = intent.getStringExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST); + int port = intent.getIntExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, 28888); + manager.connect(host,port); + }else + { + Log.d(CIMPushService.class.getSimpleName(), "isConnected() = true "); + } + } + + return Service.START_REDELIVER_INTENT; } diff --git a/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/KeepAliveReceiver.java b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/KeepAliveReceiver.java new file mode 100644 index 0000000..d75efc1 --- /dev/null +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/client/android/KeepAliveReceiver.java @@ -0,0 +1,24 @@ +package com.farsunset.cim.client.android; + + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; +/** + * @author 3979434 + * + */ +public class KeepAliveReceiver extends BroadcastReceiver { + + + @Override + public void onReceive(Context context, Intent it) { + Log.d(KeepAliveReceiver.class.getSimpleName(), "onReceive()"); + + Intent intent = new Intent(context, CIMPushService.class); + intent.putExtra(CIMPushManager.SERVICE_ACTION, CIMPushManager.ACTION_CONNECTION_KEEPALIVE); + context.startService(intent); + } + +} diff --git a/cim_for_mina/mchat-simple/AndroidManifest.xml b/cim_for_mina/mchat-simple/AndroidManifest.xml index 0720545..6372521 100644 --- a/cim_for_mina/mchat-simple/AndroidManifest.xml +++ b/cim_for_mina/mchat-simple/AndroidManifest.xml @@ -51,8 +51,10 @@ android:launchMode="singleTop" android:screenOrientation="portrait" /> + - + + diff --git a/cim_for_mina/mchat-simple/libs/cim-core-1.6.jar b/cim_for_mina/mchat-simple/libs/cim-core-1.6.jar new file mode 100644 index 0000000..72401cc Binary files /dev/null and b/cim_for_mina/mchat-simple/libs/cim-core-1.6.jar 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 deleted file mode 100644 index 3bfd980..0000000 Binary files a/cim_for_mina/mchat-simple/libs/cim-core.1.5.jar and /dev/null differ 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 b0d6f8f..fd23002 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 @@ -13,7 +13,8 @@ import com.farsunset.cim.nio.mutual.SentBody; */ public class CIMPushManager { - + static String ACTION_CONNECTION_KEEPALIVE ="ACTION_CONNECTION_KEEPALIVE"; + static String ACTION_CONNECTION ="ACTION_CONNECTION"; static String ACTION_CONNECTION_STATUS ="ACTION_CONNECTION_STATUS"; diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java index 39c841e..c496539 100644 --- a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/CIMPushService.java @@ -1,10 +1,13 @@ package com.farsunset.cim.client.android; +import android.app.AlarmManager; +import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; +import android.util.Log; import com.farsunset.cim.nio.mutual.SentBody; @@ -18,25 +21,33 @@ import com.farsunset.cim.nio.mutual.SentBody; CIMConnectorManager manager; - + AlarmManager localAlarmManager; private IBinder binder=new CIMPushService.LocalBinder(); - + PendingIntent localPendingIntent; @Override public void onCreate() { manager = CIMConnectorManager.getManager(this.getApplicationContext()); + localPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(this, KeepAliveReceiver.class), PendingIntent.FLAG_CANCEL_CURRENT); + localAlarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); + localAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 300000L + System.currentTimeMillis(),300000L, localPendingIntent); } + @Override public int onStartCommand(Intent intent,int flags, int startId) { - + String action; if(intent==null) { - return super.onStartCommand(intent, flags, startId); - } + intent = new Intent(CIMPushManager.ACTION_CONNECTION); + String host = CIMDataConfig.getString(this, CIMDataConfig.KEY_CIM_SERVIER_HOST); + int port =CIMDataConfig.getInt(this, CIMDataConfig.KEY_CIM_SERVIER_PORT); + intent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST, host); + intent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, port); + } - String action = intent.getStringExtra(CIMPushManager.SERVICE_ACTION); + action = intent.getStringExtra(CIMPushManager.SERVICE_ACTION); if(CIMPushManager.ACTION_CONNECTION.equals(action)) { @@ -57,8 +68,11 @@ import com.farsunset.cim.nio.mutual.SentBody; if(CIMPushManager.ACTION_DESTORY.equals(action)) { + localAlarmManager.cancel(localPendingIntent); + localPendingIntent.cancel(); manager.destroy(); this.stopSelf(); + android.os.Process.killProcess(android.os.Process.myPid()); } if(CIMPushManager.ACTION_CONNECTION_STATUS.equals(action)) @@ -66,6 +80,22 @@ import com.farsunset.cim.nio.mutual.SentBody; manager.deliverIsConnected(); } + if(CIMPushManager.ACTION_CONNECTION_KEEPALIVE.equals(action)) + { + + if(!manager.isConnected()) + { + Log.d(CIMPushService.class.getSimpleName(), "isConnected() = false "); + String host = intent.getStringExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST); + int port = intent.getIntExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, 28888); + manager.connect(host,port); + }else + { + Log.d(CIMPushService.class.getSimpleName(), "isConnected() = true "); + } + } + + return Service.START_REDELIVER_INTENT; } diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/KeepAliveReceiver.java b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/KeepAliveReceiver.java new file mode 100644 index 0000000..d75efc1 --- /dev/null +++ b/cim_for_netty/cim-core/src/com/farsunset/cim/client/android/KeepAliveReceiver.java @@ -0,0 +1,24 @@ +package com.farsunset.cim.client.android; + + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; +/** + * @author 3979434 + * + */ +public class KeepAliveReceiver extends BroadcastReceiver { + + + @Override + public void onReceive(Context context, Intent it) { + Log.d(KeepAliveReceiver.class.getSimpleName(), "onReceive()"); + + Intent intent = new Intent(context, CIMPushService.class); + intent.putExtra(CIMPushManager.SERVICE_ACTION, CIMPushManager.ACTION_CONNECTION_KEEPALIVE); + context.startService(intent); + } + +} diff --git a/cim_for_netty/mchat-simple/AndroidManifest.xml b/cim_for_netty/mchat-simple/AndroidManifest.xml index 77a7eeb..84e521d 100644 --- a/cim_for_netty/mchat-simple/AndroidManifest.xml +++ b/cim_for_netty/mchat-simple/AndroidManifest.xml @@ -51,7 +51,10 @@ android:launchMode="singleTop" android:screenOrientation="portrait" /> - + + + + diff --git a/cim_for_netty/mchat-simple/libs/cim-core-1.6.jar b/cim_for_netty/mchat-simple/libs/cim-core-1.6.jar new file mode 100644 index 0000000..b157d3f Binary files /dev/null and b/cim_for_netty/mchat-simple/libs/cim-core-1.6.jar 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 deleted file mode 100644 index 0c26919..0000000 Binary files a/cim_for_netty/mchat-simple/libs/cim-core.1.5.jar and /dev/null differ