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