diff --git a/.gitignore b/.gitignore index 3024000..c683139 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,7 @@ *.apk +.fatjar +bin/ -bin/ \ No newline at end of file +classes/ \ No newline at end of file diff --git a/cim_for_mina/2.0.0.VERSION b/cim_for_mina/2.1.0.VERSION similarity index 100% rename from cim_for_mina/2.0.0.VERSION rename to cim_for_mina/2.1.0.VERSION diff --git a/cim_for_mina/cim-android-sdk/.classpath b/cim_for_mina/cim-android-sdk/.classpath index 709fbc8..9375b42 100644 --- a/cim_for_mina/cim-android-sdk/.classpath +++ b/cim_for_mina/cim-android-sdk/.classpath @@ -2,8 +2,7 @@ - - + diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheToolkit.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheToolkit.java index 0fe4db9..290f014 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheToolkit.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheToolkit.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java index 82ed38c..800cf7e 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ @@ -40,7 +40,7 @@ import com.farsunset.cim.sdk.android.model.SentBody; * * @author 3979434@qq.com */ -class CIMConnectorManager { +class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFactory{ final static String TAG = CIMConnectorManager.class.getSimpleName(); private NioSocketConnector connector; @@ -82,9 +82,9 @@ class CIMConnectorManager { public final static String ACTION_CONNECTION_RECOVERY = "com.farsunset.cim.CONNECTION_RECOVERY"; private ExecutorService executor; - private CIMConnectorManager(Context ctx) { + private CIMConnectorManager(Context ctx) { context = ctx; - executor = Executors.newFixedThreadPool(1); + executor = Executors.newCachedThreadPool(); connector = new NioSocketConnector(); connector.setConnectTimeoutMillis(10 * 1000); @@ -93,10 +93,10 @@ class CIMConnectorManager { connector.getSessionConfig().setReadBufferSize(2048); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ClientMessageCodecFactory())); - KeepAliveFilter keepAliveaHandler = new KeepAliveFilter(new ClientKeepAliveFactoryImpl(), IdleStatus.BOTH_IDLE); + KeepAliveFilter keepAliveaHandler = new KeepAliveFilter(this, IdleStatus.BOTH_IDLE); keepAliveaHandler.setForwardEvent(true); connector.getFilterChain().addLast("heartbeat", keepAliveaHandler); - connector.setHandler(iohandler); + connector.setHandler(this); @@ -252,98 +252,94 @@ class CIMConnectorManager { return null; } - IoHandlerAdapter iohandler = new IoHandlerAdapter() { + @Override + public void sessionCreated(IoSession session) throws Exception { - @Override - public void sessionCreated(IoSession session) throws Exception { + + Log.i(TAG, "******************CIM连接服务器成功:"+session.getLocalAddress()); + + setLastHeartbeatTime(session); + + Intent intent = new Intent(); + intent.setAction(ACTION_CONNECTION_SUCCESSED); + context.sendBroadcast(intent); - - Log.i(TAG, "******************CIM连接服务器成功:"+session.getLocalAddress()); - - setLastHeartbeatTime(session); - - Intent intent = new Intent(); - intent.setAction(ACTION_CONNECTION_SUCCESSED); - context.sendBroadcast(intent); + } + @Override + public void sessionOpened(IoSession session) throws Exception { + session.getConfig().setBothIdleTime(180); + } + + @Override + public void sessionClosed(IoSession session) throws Exception { + + Log.e(TAG, "******************CIM与服务器断开连接:"+session.getLocalAddress()); + + Intent intent = new Intent(); + intent.setAction(ACTION_CONNECTION_CLOSED); + context.sendBroadcast(intent); + + } + + @Override + public void sessionIdle(IoSession session, IdleStatus status)throws Exception { + Log.d(TAG, "******************CIM与服务器连接空闲:"+session.getLocalAddress() + " isActive:" + session.isActive()+ " isConnected:" + session.isConnected()); + + /** + * 用于解决,wifi情况下。偶而路由器与服务器断开连接时,客户端并没及时收到关闭事件 + * 导致这样的情况下当前连接无效也不会重连的问题 + * + */ + long lastHeartbeatTime = getLastHeartbeatTime(session); + if(System.currentTimeMillis() - lastHeartbeatTime >= HEARBEAT_TIME_OUT) + { + session.closeNow(); } + } - @Override - public void sessionOpened(IoSession session) throws Exception { - session.getConfig().setBothIdleTime(180); - } + @Override + public void exceptionCaught(IoSession session, Throwable cause) + throws Exception { - @Override - public void sessionClosed(IoSession session) throws Exception { + Intent intent = new Intent(); + intent.setAction(ACTION_UNCAUGHT_EXCEPTION); + intent.putExtra("exception", cause); + context.sendBroadcast(intent); + } - Log.e(TAG, "******************CIM与服务器断开连接:"+session.getLocalAddress()); - - Intent intent = new Intent(); - intent.setAction(ACTION_CONNECTION_CLOSED); - context.sendBroadcast(intent); + @Override + public void messageReceived(IoSession session, Object obj) + throws Exception { - } - - @Override - public void sessionIdle(IoSession session, IdleStatus status)throws Exception { - Log.d(TAG, "******************CIM与服务器连接空闲:"+session.getLocalAddress() + " isActive:" + session.isActive()+ " isConnected:" + session.isConnected()); - - /** - * 用于解决,wifi情况下。偶而路由器与服务器断开连接时,客户端并没及时收到关闭事件 - * 导致这样的情况下当前连接无效也不会重连的问题 - * - */ - long lastHeartbeatTime = getLastHeartbeatTime(session); - if(System.currentTimeMillis() - lastHeartbeatTime >= HEARBEAT_TIME_OUT) - { - session.closeNow(); - } - } - - @Override - public void exceptionCaught(IoSession session, Throwable cause) - throws Exception { + if (obj instanceof Message) { Intent intent = new Intent(); - intent.setAction(ACTION_UNCAUGHT_EXCEPTION); - intent.putExtra("exception", cause); + intent.setAction(ACTION_MESSAGE_RECEIVED); + intent.putExtra("message", (Message) obj); + context.sendBroadcast(intent); + + } + if (obj instanceof ReplyBody) { + + + Intent intent = new Intent(); + intent.setAction(ACTION_REPLY_RECEIVED); + intent.putExtra("replyBody", (ReplyBody) obj); context.sendBroadcast(intent); } + } - @Override - public void messageReceived(IoSession session, Object obj) - throws Exception { - - if (obj instanceof Message) { - - Intent intent = new Intent(); - intent.setAction(ACTION_MESSAGE_RECEIVED); - intent.putExtra("message", (Message) obj); - context.sendBroadcast(intent); - - } - if (obj instanceof ReplyBody) { - - - Intent intent = new Intent(); - intent.setAction(ACTION_REPLY_RECEIVED); - intent.putExtra("replyBody", (ReplyBody) obj); - context.sendBroadcast(intent); - } + @Override + public void messageSent(IoSession session, Object message) throws Exception { + if(message instanceof SentBody) + { + Intent intent = new Intent(); + intent.setAction(ACTION_SENT_SUCCESSED); + intent.putExtra("sentBody", (SentBody) message); + context.sendBroadcast(intent); } - - @Override - public void messageSent(IoSession session, Object message) throws Exception { - if(message instanceof SentBody) - { - Intent intent = new Intent(); - intent.setAction(ACTION_SENT_SUCCESSED); - intent.putExtra("sentBody", (SentBody) message); - context.sendBroadcast(intent); - } - } - }; - + } private void setLastHeartbeatTime(IoSession session) { @@ -370,30 +366,27 @@ class CIMConnectorManager { return false; } - public class ClientKeepAliveFactoryImpl implements KeepAliveMessageFactory { - - @Override - public Object getRequest(IoSession arg0) { - return null; - } - - @Override - public Object getResponse(IoSession arg0, Object arg1) { - return CIMConstant.CMD_HEARTBEAT_RESPONSE; - } - - @Override - public boolean isRequest(IoSession session, Object data) { - - setLastHeartbeatTime(session); - - return CIMConstant.CMD_HEARTBEAT_REQUEST.equalsIgnoreCase(data.toString()); - } - - @Override - public boolean isResponse(IoSession arg0, Object arg1) { - return false; - } - + @Override + public Object getRequest(IoSession arg0) { + return null; } + + @Override + public Object getResponse(IoSession arg0, Object arg1) { + return CIMConstant.CMD_HEARTBEAT_RESPONSE; + } + + @Override + public boolean isRequest(IoSession session, Object data) { + + setLastHeartbeatTime(session); + + return CIMConstant.CMD_HEARTBEAT_REQUEST.equalsIgnoreCase(data.toString()); + } + + @Override + public boolean isResponse(IoSession arg0, Object arg1) { + return false; + } + } \ No newline at end of file diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventBroadcastReceiver.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventBroadcastReceiver.java index 6c02e5b..d95d0de 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventBroadcastReceiver.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventBroadcastReceiver.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventListener.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventListener.java index 01f769e..18928e3 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventListener.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventListener.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMListenerManager.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMListenerManager.java index 27eced5..1c9c845 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMListenerManager.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMListenerManager.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushManager.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushManager.java index 295ecb0..c98c48f 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushManager.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushManager.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushService.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushService.java index 1c80b3b..d52317d 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushService.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushService.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ @@ -11,6 +11,7 @@ import android.content.Intent; import android.os.IBinder; import android.os.PowerManager; import android.os.PowerManager.WakeLock; +import android.util.Log; import com.farsunset.cim.sdk.android.model.SentBody; @@ -20,7 +21,7 @@ import com.farsunset.cim.sdk.android.model.SentBody; * */ public class CIMPushService extends Service { - + final static String TAG = CIMPushService.class.getSimpleName(); protected final static int DEF_CIM_PORT = 28888; CIMConnectorManager manager; WakeLock wakeLock; @@ -67,12 +68,19 @@ import com.farsunset.cim.sdk.android.model.SentBody; android.os.Process.killProcess(android.os.Process.myPid()); } - if(CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE.equals(action) && !manager.isConnected()) + if(CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE.equals(action) ) { + if(!manager.isConnected()){ + + boolean isManualStop = CIMCacheToolkit.getInstance(this).getBoolean(CIMCacheToolkit.KEY_MANUAL_STOP); + Log.i(TAG, "CIM.isConnected() == false, isManualStop == " + isManualStop); + CIMPushManager.connect(this); + + }else + { + Log.i(TAG, "CIM.isConnected() == true"); + } - String host = CIMCacheToolkit.getInstance(this).getString(CIMCacheToolkit.KEY_CIM_SERVIER_HOST); - int port =CIMCacheToolkit.getInstance(this).getInt( CIMCacheToolkit.KEY_CIM_SERVIER_PORT); - manager.connect(host,port); } try{ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java index 8846777..c0a0438 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ @@ -52,8 +52,6 @@ public interface CIMConstant { public static String CLIENT_BIND ="client_bind"; - public static String CLIENT_LOGOUT ="client_logout"; - public static String CLIENT_OFFLINE_MESSAGE ="client_get_offline_message"; } diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/CIMSessionDisableException.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/CIMSessionDisableException.java index 7fb83fe..eb3a005 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/CIMSessionDisableException.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/CIMSessionDisableException.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetWorkDisableException.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetWorkDisableException.java index f35ed57..d549e9f 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetWorkDisableException.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetWorkDisableException.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/WriteToClosedSessionException.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/WriteToClosedSessionException.java index d01c683..5c925a6 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/WriteToClosedSessionException.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/WriteToClosedSessionException.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageCodecFactory.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageCodecFactory.java index dbfeba5..dd86e15 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageCodecFactory.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageCodecFactory.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageDecoder.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageDecoder.java index 54be3a0..dbff0d8 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageDecoder.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageDecoder.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ @@ -31,13 +31,14 @@ public class ClientMessageDecoder extends CumulativeProtocolDecoder { final static String TAG = ClientMessageDecoder.class.getSimpleName(); - private IoBuffer buff = IoBuffer.allocate(320).setAutoExpand(true); @Override - public boolean doDecode(IoSession iosession, IoBuffer iobuffer, - ProtocolDecoderOutput out) throws Exception { + public boolean doDecode(IoSession iosession, IoBuffer iobuffer,ProtocolDecoderOutput out) throws Exception { + boolean complete = false; - + IoBuffer tBuffer = IoBuffer.allocate(320).setAutoExpand(true); + iobuffer.mark(); + while (iobuffer.hasRemaining()) { byte b = iobuffer.get(); /** @@ -49,16 +50,16 @@ public class ClientMessageDecoder extends CumulativeProtocolDecoder { complete = true; break; } else { - buff.put(b); + tBuffer.put(b); } } if (complete) { - buff.flip(); - byte[] bytes = new byte[buff.limit()]; - buff.get(bytes); + tBuffer.flip(); + byte[] bytes = new byte[tBuffer.limit()]; + tBuffer.get(bytes); String message = new String(bytes, CIMConstant.UTF8); - buff.clear(); + tBuffer.clear(); try { @@ -68,6 +69,9 @@ public class ClientMessageDecoder extends CumulativeProtocolDecoder { { e.printStackTrace(); } + }else + { + iobuffer.reset();//如果消息没有接收完整,对buffer进行重置,下次继续读取 } return complete; @@ -96,7 +100,7 @@ public class ClientMessageDecoder extends CumulativeProtocolDecoder { NodeList items = doc.getElementsByTagName("data").item(0).getChildNodes(); for (int i = 0; i < items.getLength(); i++) { Node node = items.item(i); - reply.getData().put(node.getNodeName(), node.getTextContent()); + reply.put(node.getNodeName(), node.getTextContent()); } return reply; } diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageEncoder.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageEncoder.java index 4ec4953..d4c1acc 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageEncoder.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageEncoder.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Message.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Message.java index ce19251..e59786b 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Message.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Message.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/ReplyBody.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/ReplyBody.java index 4497506..9fa706e 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/ReplyBody.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/ReplyBody.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/SentBody.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/SentBody.java index c0f1508..61951f9 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/SentBody.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/SentBody.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageDecoder.java b/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageDecoder.java index 5621a39..e09cc7c 100644 --- a/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageDecoder.java +++ b/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageDecoder.java @@ -28,10 +28,14 @@ import com.farsunset.cim.sdk.server.model.SentBody; public class ServerMessageDecoder extends CumulativeProtocolDecoder { protected final Logger logger = Logger.getLogger(ServerMessageDecoder.class); - private IoBuffer buff = IoBuffer.allocate(320).setAutoExpand(true); @Override public boolean doDecode(IoSession iosession, IoBuffer iobuffer, ProtocolDecoderOutput out) throws Exception { + boolean complete = false; + IoBuffer tBuffer = IoBuffer.allocate(320).setAutoExpand(true); + + iobuffer.mark(); + while (iobuffer.hasRemaining()) { byte b = iobuffer.get(); /** @@ -48,19 +52,19 @@ public class ServerMessageDecoder extends CumulativeProtocolDecoder { break; } else { - buff.put(b); + tBuffer.put(b); } } if (complete) { - buff.flip(); - byte[] bytes = new byte[buff.limit()]; - buff.get(bytes); + tBuffer.flip(); + byte[] bytes = new byte[tBuffer.limit()]; + tBuffer.get(bytes); String message = new String(bytes, CIMConstant.UTF8); logger.debug(message); - buff.clear(); + tBuffer.clear(); try{ Object body = getSentBody(message); @@ -70,6 +74,9 @@ public class ServerMessageDecoder extends CumulativeProtocolDecoder { e.printStackTrace(); logger.warn(e.getMessage()); } + }else + { + iobuffer.reset();//如果消息没有接收完整,对buffer进行重置,下次继续读取 } return complete; } diff --git a/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMIoHandler.java b/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMIoHandler.java index a0e6588..7e58e49 100644 --- a/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMIoHandler.java +++ b/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMIoHandler.java @@ -81,20 +81,10 @@ public class CIMIoHandler extends IoHandlerAdapter { /** */ public void sessionClosed(IoSession ios) throws Exception { - + logger.warn(ios.getRemoteAddress()); CIMSession cimSession =new CIMSession(ios); - try{ - logger.warn("sessionClosed()... from "+cimSession.getRemoteAddress()); - CIMRequestHandler handler = handlers.get(CIMSESSION_CLOSED_HANDLER_KEY); - if(handler!=null && cimSession.containsAttribute(CIMConstant.SESSION_KEY)) - { - handler.process(cimSession, null); - } - } - catch(Exception e) - { - e.printStackTrace(); - } + CIMRequestHandler handler = handlers.get(CIMSESSION_CLOSED_HANDLER_KEY); + handler.process(cimSession, null); } /** diff --git a/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/Message.java b/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/Message.java index c0d0108..a777a5e 100644 --- a/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/Message.java +++ b/cim_for_mina/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/Message.java @@ -1,6 +1,6 @@ /** * probject:cim-server-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_mina/cim-server/.classpath b/cim_for_mina/cim-server/.classpath index a323a94..84a952b 100644 --- a/cim_for_mina/cim-server/.classpath +++ b/cim_for_mina/cim-server/.classpath @@ -6,7 +6,6 @@ - @@ -20,6 +19,7 @@ + @@ -30,6 +30,7 @@ + @@ -37,6 +38,5 @@ - diff --git a/cim_for_mina/cim-server/WebRoot/WEB-INF/lib/cim-server-sdk-2.1.jar b/cim_for_mina/cim-server/WebRoot/WEB-INF/lib/cim-server-sdk-2.1.jar new file mode 100644 index 0000000..7464718 Binary files /dev/null and b/cim_for_mina/cim-server/WebRoot/WEB-INF/lib/cim-server-sdk-2.1.jar differ diff --git a/cim_for_mina/cim-server/src/main/java/com/farsunset/cim/handler/LogoutHandler.java b/cim_for_mina/cim-server/src/main/java/com/farsunset/cim/handler/LogoutHandler.java deleted file mode 100644 index 58db228..0000000 --- a/cim_for_mina/cim-server/src/main/java/com/farsunset/cim/handler/LogoutHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * probject:cim - * @version 2.0 - * - * @author 3979434@qq.com - */ -package com.farsunset.cim.handler; - -import com.farsunset.cim.sdk.server.constant.CIMConstant; -import com.farsunset.cim.sdk.server.handler.CIMRequestHandler; -import com.farsunset.cim.sdk.server.model.ReplyBody; -import com.farsunset.cim.sdk.server.model.SentBody; -import com.farsunset.cim.sdk.server.session.CIMSession; -import com.farsunset.cim.sdk.server.session.DefaultSessionManager; -import com.farsunset.cim.util.ContextHolder; - - -/** - * 退出连接实现 - */ -public class LogoutHandler implements CIMRequestHandler { - - public ReplyBody process(CIMSession ios, SentBody message) { - - - DefaultSessionManager sessionManager = ((DefaultSessionManager) ContextHolder.getBean("CIMSessionManager")); - - String account =ios.getAttribute(CIMConstant.SESSION_KEY).toString(); - ios.removeAttribute(CIMConstant.SESSION_KEY); - ios.closeNow(); - sessionManager.remove(account); - - return null; - } - - -} \ No newline at end of file diff --git a/cim_for_mina/cim-server/src/main/java/com/farsunset/cim/handler/SessionClosedHandler.java b/cim_for_mina/cim-server/src/main/java/com/farsunset/cim/handler/SessionClosedHandler.java index e0a80db..bb4c67d 100644 --- a/cim_for_mina/cim-server/src/main/java/com/farsunset/cim/handler/SessionClosedHandler.java +++ b/cim_for_mina/cim-server/src/main/java/com/farsunset/cim/handler/SessionClosedHandler.java @@ -26,15 +26,12 @@ public class SessionClosedHandler implements CIMRequestHandler { public ReplyBody process(CIMSession ios, SentBody message) { - DefaultSessionManager sessionManager = ((DefaultSessionManager) ContextHolder.getBean("CIMSessionManager")); - - if(ios.getAttribute(CIMConstant.SESSION_KEY)==null) - { - return null; - } + DefaultSessionManager sessionManager = ((DefaultSessionManager) ContextHolder.getBean("CIMSessionManager")); - String account = ios.getAttribute(CIMConstant.SESSION_KEY).toString(); - sessionManager.remove(account); + String account =ios.getAttribute(CIMConstant.SESSION_KEY).toString(); + ios.removeAttribute(CIMConstant.SESSION_KEY); + ios.closeNow(); + sessionManager.remove(account); return null; } diff --git a/cim_for_mina/cim-server/src/main/resource/log4j.properties b/cim_for_mina/cim-server/src/main/resource/log4j.properties index b0572a1..b883399 100644 --- a/cim_for_mina/cim-server/src/main/resource/log4j.properties +++ b/cim_for_mina/cim-server/src/main/resource/log4j.properties @@ -1,13 +1,13 @@ -log4j.rootLogger=debug,console, file +log4j.rootLogger=info,console, file #----------console---------------- log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.Target=System.out -log4j.appender.console.layout.ConversionPattern=%C %p %d{yyyy-MM-dd HH:mm:ss}%n%m%n--------------------------------------------------------------------------------------------------------------------------%n +log4j.appender.console.layout.ConversionPattern=%C.%M() %p %d{yyyy-MM-dd HH:mm:ss}%n%m%n--------------------------------------------------------------------------------------------------------------------------%n #----------file---------------- log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=cim.log log4j.appender.file.layout=org.apache.log4j.PatternLayout -log4j.appender.file.layout.ConversionPattern=%C %p %d{yyyy-MM-dd HH\:mm\:ss} - %m%n +log4j.appender.file.layout.ConversionPattern=%C.%M() %p %d{yyyy-MM-dd HH:mm:ss}%n%m%n--------------------------------------------------------------------------------------------------------------------------%n diff --git a/cim_for_mina/cim-server/src/main/resource/spring-cim.xml b/cim_for_mina/cim-server/src/main/resource/spring-cim.xml index e2ab23f..2eedc80 100644 --- a/cim_for_mina/cim-server/src/main/resource/spring-cim.xml +++ b/cim_for_mina/cim-server/src/main/resource/spring-cim.xml @@ -21,9 +21,7 @@ - - - + diff --git a/cim_for_mina/client-mchat-android/.classpath b/cim_for_mina/client-mchat-android/.classpath index 5176974..9c49fa5 100644 --- a/cim_for_mina/client-mchat-android/.classpath +++ b/cim_for_mina/client-mchat-android/.classpath @@ -1,9 +1,12 @@ - - + + + + + diff --git a/cim_for_mina/client-mchat-android/AndroidManifest.xml b/cim_for_mina/client-mchat-android/AndroidManifest.xml index fafbada..2ed9424 100644 --- a/cim_for_mina/client-mchat-android/AndroidManifest.xml +++ b/cim_for_mina/client-mchat-android/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="3" + android:versionName="2.1.0" > diff --git a/cim_for_mina/client-mchat-android/libs/cim-android-sdk-2.0.jar b/cim_for_mina/client-mchat-android/libs/cim-android-sdk-2.0.jar deleted file mode 100644 index 87458be..0000000 Binary files a/cim_for_mina/client-mchat-android/libs/cim-android-sdk-2.0.jar and /dev/null differ diff --git a/cim_for_mina/client-mchat-android/libs/cim-android-sdk-2.1.jar b/cim_for_mina/client-mchat-android/libs/cim-android-sdk-2.1.jar new file mode 100644 index 0000000..e4b8470 Binary files /dev/null and b/cim_for_mina/client-mchat-android/libs/cim-android-sdk-2.1.jar differ diff --git a/cim_for_mina/client-mchat-android/libs/mina-core-2.0.13.jar b/cim_for_mina/client-mchat-android/libs/mina-core-2.0.13.jar new file mode 100644 index 0000000..557f190 Binary files /dev/null and b/cim_for_mina/client-mchat-android/libs/mina-core-2.0.13.jar differ diff --git a/cim_for_mina/client-mchat-android/libs/slf4j-api-1.7.5.jar b/cim_for_mina/client-mchat-android/libs/slf4j-api-1.7.5.jar new file mode 100644 index 0000000..8766455 Binary files /dev/null and b/cim_for_mina/client-mchat-android/libs/slf4j-api-1.7.5.jar differ diff --git a/cim_for_mina/client-mchat-android/libs/slf4j-nop-1.7.5.jar b/cim_for_mina/client-mchat-android/libs/slf4j-nop-1.7.5.jar new file mode 100644 index 0000000..e55bdd8 Binary files /dev/null and b/cim_for_mina/client-mchat-android/libs/slf4j-nop-1.7.5.jar differ diff --git a/cim_for_mina/client-mchat-android/proguard.cfg b/cim_for_mina/client-mchat-android/proguard.cfg index 6609a47..22a2de2 100644 --- a/cim_for_mina/client-mchat-android/proguard.cfg +++ b/cim_for_mina/client-mchat-android/proguard.cfg @@ -6,29 +6,14 @@ -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -dontwarn --keep public class com.adview.** {*;} --keeppackagenames com.madhouse.android.ads --keepclassmembers class * {public *;} --keep public class com.wqmobile.sdk.** {*;} --keep public class * {public *;} --keep public class com.adwo.adsdk.AdwoAdBrowserActivity --keep public class com.wooboo.** {*;} --keep public class cn.aduu.adsdk.**{*;} --keep class net.youmi.android.** {*;} +-keep public class org.apache.mina.** {*;} +-keep public class com.farsunset.cim.sdk.android.model.** {*;} + -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider --keep public class com.android.vending.licensing.ILicensingService --keep public class MobWin.* --keep public class MobWin.cnst.* --keep class com.tencent.lbsapi.* --keep class com.tencent.lbsapi.core.* --keep class LBSAPIProtocol.* --keep class com.tencent.lbsapi.core.QLBSJNI { -*; -} -keepclasseswithmembernames class * { native ; } diff --git a/cim_for_mina/client-mchat-android/project.properties b/cim_for_mina/client-mchat-android/project.properties index a5578ba..358ce4a 100644 --- a/cim_for_mina/client-mchat-android/project.properties +++ b/cim_for_mina/client-mchat-android/project.properties @@ -8,4 +8,4 @@ # project structure. # Project target. -target=android-19 +target=android-22 diff --git a/cim_for_mina/client-mchat-android/src/com/farsunset/ichat/example/app/Constant.java b/cim_for_mina/client-mchat-android/src/com/farsunset/ichat/example/app/Constant.java index 921b44e..75e0c14 100644 --- a/cim_for_mina/client-mchat-android/src/com/farsunset/ichat/example/app/Constant.java +++ b/cim_for_mina/client-mchat-android/src/com/farsunset/ichat/example/app/Constant.java @@ -9,7 +9,7 @@ package com.farsunset.ichat.example.app; public interface Constant { //服务端IP地址 - public static final String CIM_SERVER_HOST = "192.168.2.2"; + public static final String CIM_SERVER_HOST = "192.168.191.1"; //服务端web地址 public static final String SERVER_URL = "http://"+CIM_SERVER_HOST+":8080/cim-server"; diff --git a/cim_for_netty/2.0.0.VERSION b/cim_for_netty/2.1.0.VERSION similarity index 100% rename from cim_for_netty/2.0.0.VERSION rename to cim_for_netty/2.1.0.VERSION diff --git a/cim_for_netty/cim-android-sdk/.classpath b/cim_for_netty/cim-android-sdk/.classpath index 24c8e68..6f7dcf0 100644 --- a/cim_for_netty/cim-android-sdk/.classpath +++ b/cim_for_netty/cim-android-sdk/.classpath @@ -2,11 +2,11 @@ - + diff --git a/cim_for_netty/cim-android-sdk/cim-android-sdk-2.1.jar b/cim_for_netty/cim-android-sdk/cim-android-sdk-2.1.jar new file mode 100644 index 0000000..ecb7452 Binary files /dev/null and b/cim_for_netty/cim-android-sdk/cim-android-sdk-2.1.jar differ diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheToolkit.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheToolkit.java index b4c62de..a932a33 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheToolkit.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheToolkit.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java index a3cc71c..0c44707 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java @@ -94,7 +94,7 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { private CIMConnectorManager(Context ctx) { context = ctx; - executor = Executors.newFixedThreadPool(3); + executor = Executors.newCachedThreadPool(); bootstrap = new Bootstrap(); loopGroup = new NioEventLoopGroup(); bootstrap.group(loopGroup); @@ -104,7 +104,7 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { @Override public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); - pipeline.addLast(new ClientMessageDecoder(ClassResolvers.cacheDisabled(null))); + pipeline.addLast(new ClientMessageDecoder(ClassResolvers.cacheDisabled(CIMConnectorManager.class.getClassLoader()))); pipeline.addLast(new ClientMessageEncoder()); pipeline.addLast(new IdleStateHandler(READ_IDLE_TIME,0,0)); pipeline.addLast(CIMConnectorManager.this); diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventBroadcastReceiver.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventBroadcastReceiver.java index 6c02e5b..d95d0de 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventBroadcastReceiver.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventBroadcastReceiver.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventListener.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventListener.java index 01f769e..18928e3 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventListener.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMEventListener.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMListenerManager.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMListenerManager.java index 27eced5..1c9c845 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMListenerManager.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMListenerManager.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushManager.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushManager.java index 295ecb0..c98c48f 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushManager.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushManager.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushService.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushService.java index 82f0324..21ad487 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushService.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMPushService.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ @@ -11,6 +11,7 @@ import android.content.Intent; import android.os.IBinder; import android.os.PowerManager; import android.os.PowerManager.WakeLock; +import android.util.Log; import com.farsunset.cim.sdk.android.model.SentBody; @@ -20,7 +21,7 @@ import com.farsunset.cim.sdk.android.model.SentBody; * */ public class CIMPushService extends Service { - + final static String TAG = CIMPushService.class.getSimpleName(); protected final static int DEF_CIM_PORT = 28888; CIMConnectorManager manager; WakeLock wakeLock; @@ -67,14 +68,22 @@ import com.farsunset.cim.sdk.android.model.SentBody; android.os.Process.killProcess(android.os.Process.myPid()); } - if(CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE.equals(action) && !manager.isConnected()) + if(CIMPushManager.ACTION_ACTIVATE_PUSH_SERVICE.equals(action) ) { + if(!manager.isConnected()){ + + boolean isManualStop = CIMCacheToolkit.getInstance(this).getBoolean(CIMCacheToolkit.KEY_MANUAL_STOP); + Log.d(TAG, "CIM.isConnected() == false, isManualStop == " + isManualStop); + CIMPushManager.connect(this); + + }else + { + Log.d(TAG, "CIM.isConnected() == true"); + } - String host = CIMCacheToolkit.getInstance(this).getString(CIMCacheToolkit.KEY_CIM_SERVIER_HOST); - int port =CIMCacheToolkit.getInstance(this).getInt( CIMCacheToolkit.KEY_CIM_SERVIER_PORT); - manager.connect(host,port); } + try{ if(!wakeLock.isHeld()) { diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java index 8846777..d666bb2 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ @@ -52,7 +52,6 @@ public interface CIMConstant { public static String CLIENT_BIND ="client_bind"; - public static String CLIENT_LOGOUT ="client_logout"; public static String CLIENT_OFFLINE_MESSAGE ="client_get_offline_message"; diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/CIMSessionDisableException.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/CIMSessionDisableException.java index 7fb83fe..eb3a005 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/CIMSessionDisableException.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/CIMSessionDisableException.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetWorkDisableException.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetWorkDisableException.java index f35ed57..d549e9f 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetWorkDisableException.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetWorkDisableException.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/WriteToClosedSessionException.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/WriteToClosedSessionException.java index d01c683..5c925a6 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/WriteToClosedSessionException.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/WriteToClosedSessionException.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageDecoder.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageDecoder.java index 2e6924c..3f547ba 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageDecoder.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageDecoder.java @@ -39,6 +39,8 @@ public class ClientMessageDecoder extends ObjectDecoder { public Object decode(ChannelHandlerContext arg0, ByteBuf buffer) throws Exception { int length = buffer.readableBytes(); + buffer.markReaderIndex(); + /** * CIMConstant.MESSAGE_SEPARATE 为消息界限 * 当一次收到多个消息时,以此分隔解析多个消息 @@ -58,7 +60,8 @@ public class ClientMessageDecoder extends ObjectDecoder { message = null; return msg; } - + + buffer.resetReaderIndex(); return null; } diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Message.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Message.java index ce19251..e59786b 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Message.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Message.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/ReplyBody.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/ReplyBody.java index 4497506..9fa706e 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/ReplyBody.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/ReplyBody.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/SentBody.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/SentBody.java index c0f1508..61951f9 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/SentBody.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/SentBody.java @@ -1,6 +1,6 @@ /** * probject:cim-android-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-server-sdk/.classpath b/cim_for_netty/cim-server-sdk/.classpath index dfa3f00..d94d058 100644 --- a/cim_for_netty/cim-server-sdk/.classpath +++ b/cim_for_netty/cim-server-sdk/.classpath @@ -2,11 +2,11 @@ - + diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageDecoder.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageDecoder.java index 7c21086..987d9e7 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageDecoder.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageDecoder.java @@ -35,7 +35,7 @@ public class ServerMessageDecoder extends ObjectDecoder { int length = buffer.readableBytes(); - + buffer.markReaderIndex(); /** * CIMConstant.MESSAGE_SEPARATE 为消息界限 * 当一次收到多个消息时,以此分隔解析多个消息 @@ -81,6 +81,8 @@ public class ServerMessageDecoder extends ObjectDecoder { return message; } + + buffer.resetReaderIndex(); return null; } diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/launcher/CIMNioSocketAcceptor.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/launcher/CIMNioSocketAcceptor.java index bdf35a8..a90818e 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/launcher/CIMNioSocketAcceptor.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/launcher/CIMNioSocketAcceptor.java @@ -62,7 +62,7 @@ public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler{ public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); - pipeline.addLast(new ServerMessageDecoder(ClassResolvers.cacheDisabled(null))); + pipeline.addLast(new ServerMessageDecoder(ClassResolvers.cacheDisabled(CIMNioSocketAcceptor.class.getClassLoader()))); pipeline.addLast(new ServerMessageEncoder()); pipeline.addLast(new IdleStateHandler(READ_IDLE_TIME,WRITE_IDLE_TIME,0)); pipeline.addLast(CIMNioSocketAcceptor.this); @@ -93,10 +93,8 @@ public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler{ */ public void exceptionCaught( ChannelHandlerContext ctx, Throwable cause) throws Exception { - logger.error("exceptionCaught()... from "+ctx.channel().remoteAddress()); - ctx.channel().close(); - CIMRequestHandler handler = handlers.get(CIMConstant.RequestKey.KEY_CLIENT_CIMSESSION_CLOSED); - handler.process(new CIMSession(ctx.channel()), null); + logger.error(ctx.channel().remoteAddress()); + } @@ -163,7 +161,9 @@ public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler{ @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { - logger.debug("channelInactive-----------"+ctx.channel().remoteAddress()); + logger.warn(ctx.channel().remoteAddress()); + CIMRequestHandler handler = handlers.get(CIMConstant.RequestKey.KEY_CLIENT_CIMSESSION_CLOSED); + handler.process(new CIMSession(ctx.channel()), null); } diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/Message.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/Message.java index c0d0108..a777a5e 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/Message.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/Message.java @@ -1,6 +1,6 @@ /** * probject:cim-server-sdk - * @version 2.0.0 + * @version 2.1.0 * * @author 3979434@qq.com */ diff --git a/cim_for_netty/cim-server/.classpath b/cim_for_netty/cim-server/.classpath index 116b57d..9f24b76 100644 --- a/cim_for_netty/cim-server/.classpath +++ b/cim_for_netty/cim-server/.classpath @@ -6,7 +6,6 @@ - @@ -22,6 +21,7 @@ + @@ -29,14 +29,6 @@ - - - - - - - - @@ -46,5 +38,13 @@ + + + + + + + + diff --git a/cim_for_netty/cim-server/WebRoot/WEB-INF/classes/log4j.properties b/cim_for_netty/cim-server/WebRoot/WEB-INF/classes/log4j.properties index b0572a1..491f879 100644 --- a/cim_for_netty/cim-server/WebRoot/WEB-INF/classes/log4j.properties +++ b/cim_for_netty/cim-server/WebRoot/WEB-INF/classes/log4j.properties @@ -1,13 +1,13 @@ -log4j.rootLogger=debug,console, file +log4j.rootLogger=info,console, file #----------console---------------- log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.Target=System.out -log4j.appender.console.layout.ConversionPattern=%C %p %d{yyyy-MM-dd HH:mm:ss}%n%m%n--------------------------------------------------------------------------------------------------------------------------%n +log4j.appender.console.layout.ConversionPattern=%C.%M() %p %d{yyyy-MM-dd HH:mm:ss}%n%m%n--------------------------------------------------------------------------------------------------------------------------%n #----------file---------------- log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=cim.log log4j.appender.file.layout=org.apache.log4j.PatternLayout -log4j.appender.file.layout.ConversionPattern=%C %p %d{yyyy-MM-dd HH\:mm\:ss} - %m%n +log4j.appender.console.layout.ConversionPattern=%C.%M() %p %d{yyyy-MM-dd HH:mm:ss}%n%m%n--------------------------------------------------------------------------------------------------------------------------%n diff --git a/cim_for_netty/cim-server/WebRoot/WEB-INF/classes/spring-cim.xml b/cim_for_netty/cim-server/WebRoot/WEB-INF/classes/spring-cim.xml index 6a6ea11..7748d3d 100644 --- a/cim_for_netty/cim-server/WebRoot/WEB-INF/classes/spring-cim.xml +++ b/cim_for_netty/cim-server/WebRoot/WEB-INF/classes/spring-cim.xml @@ -21,9 +21,7 @@ - - - + diff --git a/cim_for_netty/cim-server/WebRoot/WEB-INF/lib/cim-server-sdk-2.1.jar b/cim_for_netty/cim-server/WebRoot/WEB-INF/lib/cim-server-sdk-2.1.jar new file mode 100644 index 0000000..c6ecc68 Binary files /dev/null and b/cim_for_netty/cim-server/WebRoot/WEB-INF/lib/cim-server-sdk-2.1.jar differ diff --git a/cim_for_netty/cim-server/src/main/java/com/farsunset/cim/handler/LogoutHandler.java b/cim_for_netty/cim-server/src/main/java/com/farsunset/cim/handler/LogoutHandler.java deleted file mode 100644 index 58db228..0000000 --- a/cim_for_netty/cim-server/src/main/java/com/farsunset/cim/handler/LogoutHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * probject:cim - * @version 2.0 - * - * @author 3979434@qq.com - */ -package com.farsunset.cim.handler; - -import com.farsunset.cim.sdk.server.constant.CIMConstant; -import com.farsunset.cim.sdk.server.handler.CIMRequestHandler; -import com.farsunset.cim.sdk.server.model.ReplyBody; -import com.farsunset.cim.sdk.server.model.SentBody; -import com.farsunset.cim.sdk.server.session.CIMSession; -import com.farsunset.cim.sdk.server.session.DefaultSessionManager; -import com.farsunset.cim.util.ContextHolder; - - -/** - * 退出连接实现 - */ -public class LogoutHandler implements CIMRequestHandler { - - public ReplyBody process(CIMSession ios, SentBody message) { - - - DefaultSessionManager sessionManager = ((DefaultSessionManager) ContextHolder.getBean("CIMSessionManager")); - - String account =ios.getAttribute(CIMConstant.SESSION_KEY).toString(); - ios.removeAttribute(CIMConstant.SESSION_KEY); - ios.closeNow(); - sessionManager.remove(account); - - return null; - } - - -} \ No newline at end of file diff --git a/cim_for_netty/cim-server/src/main/java/com/farsunset/cim/handler/SessionClosedHandler.java b/cim_for_netty/cim-server/src/main/java/com/farsunset/cim/handler/SessionClosedHandler.java index e0a80db..624dece 100644 --- a/cim_for_netty/cim-server/src/main/java/com/farsunset/cim/handler/SessionClosedHandler.java +++ b/cim_for_netty/cim-server/src/main/java/com/farsunset/cim/handler/SessionClosedHandler.java @@ -26,16 +26,13 @@ public class SessionClosedHandler implements CIMRequestHandler { public ReplyBody process(CIMSession ios, SentBody message) { - DefaultSessionManager sessionManager = ((DefaultSessionManager) ContextHolder.getBean("CIMSessionManager")); - - if(ios.getAttribute(CIMConstant.SESSION_KEY)==null) - { - return null; - } + DefaultSessionManager sessionManager = ((DefaultSessionManager) ContextHolder.getBean("CIMSessionManager")); + + String account =ios.getAttribute(CIMConstant.SESSION_KEY).toString(); + ios.removeAttribute(CIMConstant.SESSION_KEY); + ios.closeNow(); + sessionManager.remove(account); - String account = ios.getAttribute(CIMConstant.SESSION_KEY).toString(); - sessionManager.remove(account); - return null; } diff --git a/cim_for_netty/cim-server/src/main/resource/log4j.properties b/cim_for_netty/cim-server/src/main/resource/log4j.properties index b0572a1..b883399 100644 --- a/cim_for_netty/cim-server/src/main/resource/log4j.properties +++ b/cim_for_netty/cim-server/src/main/resource/log4j.properties @@ -1,13 +1,13 @@ -log4j.rootLogger=debug,console, file +log4j.rootLogger=info,console, file #----------console---------------- log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.Target=System.out -log4j.appender.console.layout.ConversionPattern=%C %p %d{yyyy-MM-dd HH:mm:ss}%n%m%n--------------------------------------------------------------------------------------------------------------------------%n +log4j.appender.console.layout.ConversionPattern=%C.%M() %p %d{yyyy-MM-dd HH:mm:ss}%n%m%n--------------------------------------------------------------------------------------------------------------------------%n #----------file---------------- log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=cim.log log4j.appender.file.layout=org.apache.log4j.PatternLayout -log4j.appender.file.layout.ConversionPattern=%C %p %d{yyyy-MM-dd HH\:mm\:ss} - %m%n +log4j.appender.file.layout.ConversionPattern=%C.%M() %p %d{yyyy-MM-dd HH:mm:ss}%n%m%n--------------------------------------------------------------------------------------------------------------------------%n diff --git a/cim_for_netty/cim-server/src/main/resource/spring-cim.xml b/cim_for_netty/cim-server/src/main/resource/spring-cim.xml index 6a6ea11..7748d3d 100644 --- a/cim_for_netty/cim-server/src/main/resource/spring-cim.xml +++ b/cim_for_netty/cim-server/src/main/resource/spring-cim.xml @@ -21,9 +21,7 @@ - - - + diff --git a/cim_for_netty/client-mchat-android/AndroidManifest.xml b/cim_for_netty/client-mchat-android/AndroidManifest.xml index fafbada..2ed9424 100644 --- a/cim_for_netty/client-mchat-android/AndroidManifest.xml +++ b/cim_for_netty/client-mchat-android/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="3" + android:versionName="2.1.0" > diff --git a/cim_for_netty/client-mchat-android/libs/cim-android-sdk-2.1.jar b/cim_for_netty/client-mchat-android/libs/cim-android-sdk-2.1.jar new file mode 100644 index 0000000..ecb7452 Binary files /dev/null and b/cim_for_netty/client-mchat-android/libs/cim-android-sdk-2.1.jar differ diff --git a/cim_for_netty/client-mchat-android/libs/cim-server-sdk-2.0.jar b/cim_for_netty/client-mchat-android/libs/cim-server-sdk-2.0.jar deleted file mode 100644 index 48ecc64..0000000 Binary files a/cim_for_netty/client-mchat-android/libs/cim-server-sdk-2.0.jar and /dev/null differ diff --git a/cim_for_netty/client-mchat-android/proguard.cfg b/cim_for_netty/client-mchat-android/proguard.cfg index 6609a47..d63e44b 100644 --- a/cim_for_netty/client-mchat-android/proguard.cfg +++ b/cim_for_netty/client-mchat-android/proguard.cfg @@ -6,29 +6,14 @@ -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -dontwarn --keep public class com.adview.** {*;} --keeppackagenames com.madhouse.android.ads --keepclassmembers class * {public *;} --keep public class com.wqmobile.sdk.** {*;} --keep public class * {public *;} --keep public class com.adwo.adsdk.AdwoAdBrowserActivity --keep public class com.wooboo.** {*;} --keep public class cn.aduu.adsdk.**{*;} --keep class net.youmi.android.** {*;} +-keep public class io.netty.** {*;} +-keep public class com.farsunset.cim.sdk.android.model.** {*;} + -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider --keep public class com.android.vending.licensing.ILicensingService --keep public class MobWin.* --keep public class MobWin.cnst.* --keep class com.tencent.lbsapi.* --keep class com.tencent.lbsapi.core.* --keep class LBSAPIProtocol.* --keep class com.tencent.lbsapi.core.QLBSJNI { -*; -} -keepclasseswithmembernames class * { native ; } diff --git a/cim_for_netty/client-mchat-android/project.properties b/cim_for_netty/client-mchat-android/project.properties index a5578ba..358ce4a 100644 --- a/cim_for_netty/client-mchat-android/project.properties +++ b/cim_for_netty/client-mchat-android/project.properties @@ -8,4 +8,4 @@ # project structure. # Project target. -target=android-19 +target=android-22 diff --git a/cim_for_netty/client-mchat-android/src/com/farsunset/ichat/example/app/Constant.java b/cim_for_netty/client-mchat-android/src/com/farsunset/ichat/example/app/Constant.java index bd6d5b9..75e0c14 100644 --- a/cim_for_netty/client-mchat-android/src/com/farsunset/ichat/example/app/Constant.java +++ b/cim_for_netty/client-mchat-android/src/com/farsunset/ichat/example/app/Constant.java @@ -9,7 +9,7 @@ package com.farsunset.ichat.example.app; public interface Constant { //服务端IP地址 - public static final String CIM_SERVER_HOST = "192.168.2.3"; + public static final String CIM_SERVER_HOST = "192.168.191.1"; //服务端web地址 public static final String SERVER_URL = "http://"+CIM_SERVER_HOST+":8080/cim-server";