From 3f3d7e95e9ed1f45c5605e9593c2d881df826810 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9C=E6=96=B9=E5=A4=95=E9=98=B3?= Date: Mon, 1 Apr 2019 14:49:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9targetVersion=E4=B8=BA26?= =?UTF-8?q?=E6=97=B6=E5=8F=91=E9=80=81=E5=B9=BF=E6=92=AD=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E6=8E=A5=E5=8F=97=E4=B8=8D=E5=88=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cim_for_mina/cim-android-sdk/.classpath | 2 +- .../cim/sdk/android/CIMCacheManager.java | 2 +- .../cim/sdk/android/CIMCacheProvider.java | 2 +- .../cim/sdk/android/CIMConnectorManager.java | 85 ++++++++++++------ .../android/CIMEventBroadcastReceiver.java | 2 +- .../cim/sdk/android/CIMEventListener.java | 2 +- .../cim/sdk/android/CIMListenerManager.java | 2 +- .../cim/sdk/android/CIMPushManager.java | 2 +- .../cim/sdk/android/CIMPushService.java | 2 +- .../cim/sdk/android/constant/CIMConstant.java | 2 +- .../exception/NetworkDisabledException.java | 2 +- .../exception/SessionClosedException.java | 2 +- .../filter/ClientMessageCodecFactory.java | 2 +- .../android/filter/ClientMessageDecoder.java | 2 +- .../android/filter/ClientMessageEncoder.java | 2 +- .../sdk/android/model/HeartbeatRequest.java | 2 +- .../sdk/android/model/HeartbeatResponse.java | 2 +- .../cim/sdk/android/model/Message.java | 2 +- .../cim/sdk/android/model/Protobufable.java | 2 +- .../cim/sdk/android/model/ReplyBody.java | 2 +- .../cim/sdk/android/model/SentBody.java | 2 +- .../app/libs/cim-android-sdk-3.5.jar | Bin 91300 -> 91442 bytes .../filter/decoder/WebMessageDecoder.java | 1 - cim_for_netty/cim-android-sdk/.classpath | 2 +- .../cim/sdk/android/CIMConnectorManager.java | 44 +++++---- .../sdk/android/filter/CIMLoggingHandler.java | 2 +- .../android/filter/ClientMessageDecoder.java | 2 +- .../android/filter/ClientMessageEncoder.java | 2 +- .../app/libs/cim-android-sdk-3.5.jar | Bin 91215 -> 91391 bytes cim_for_netty/cim-server-sdk/.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +- .../cim/sdk/server/constant/CIMConstant.java | 2 +- .../server/filter/ServerMessageDecoder.java | 2 +- .../server/filter/ServerMessageEncoder.java | 2 +- .../filter/decoder/AppMessageDecoder.java | 2 +- .../filter/decoder/WebMessageDecoder.java | 2 +- .../server/handler/CIMNioSocketAcceptor.java | 16 +++- .../sdk/server/handler/CIMRequestHandler.java | 2 +- .../sdk/server/handler/WebsocketHandler.java | 2 +- .../sdk/server/model/HandshakerResponse.java | 2 +- .../sdk/server/model/HeartbeatRequest.java | 2 +- .../sdk/server/model/HeartbeatResponse.java | 2 +- .../cim/sdk/server/model/Message.java | 2 +- .../cim/sdk/server/model/ReplyBody.java | 2 +- .../cim/sdk/server/model/SentBody.java | 2 +- .../model/feature/EncodeFormatable.java | 2 +- .../sdk/server/model/proto/MessageProto.java | 2 +- .../server/model/proto/ReplyBodyProto.java | 2 +- .../sdk/server/model/proto/SentBodyProto.java | 2 +- .../cim/sdk/server/session/CIMSession.java | 2 +- .../server/session/DefaultSessionManager.java | 2 +- .../sdk/server/session/SessionManager.java | 2 +- 52 files changed, 145 insertions(+), 97 deletions(-) diff --git a/cim_for_mina/cim-android-sdk/.classpath b/cim_for_mina/cim-android-sdk/.classpath index 664a9cb..f7a7951 100644 --- a/cim_for_mina/cim-android-sdk/.classpath +++ b/cim_for_mina/cim-android-sdk/.classpath @@ -5,6 +5,6 @@ - + diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheManager.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheManager.java index 55d4a4c..c278110 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheManager.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheManager.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheProvider.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheProvider.java index facbece..4e8204b 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheProvider.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMCacheProvider.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 67df9da..a9c2593 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -71,16 +71,18 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa private final String KEY_LAST_HEART_TIME = "KEY_LAST_HEART_TIME"; private NioSocketConnector connector; + private Context context; + private static CIMConnectorManager manager; + + private ExecutorService executor = Executors.newFixedThreadPool(1); private Semaphore semaphore = new Semaphore(1,true); - - private Context context; - - private static CIMConnectorManager manager; - private CIMConnectorManager(Context ctx) { context = ctx; - + makeNioConnector(); + } + + private void makeNioConnector() { connector = new NioSocketConnector(); connector.setConnectTimeoutMillis(CONNECT_TIMEOUT); connector.getSessionConfig().setTcpNoDelay(true); @@ -95,37 +97,30 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ClientMessageCodecFactory())); connector.getFilterChain().addLast("heartbeat", keepAliveaHandler); connector.getFilterChain().addLast("logger",CIMLoggingFilter.getLogger()); + connector.setHandler(this); - } - + + + public synchronized static CIMConnectorManager getManager(Context context) { + if (manager == null) { manager = new CIMConnectorManager(context); } + return manager; } - - private void handleConnectFailure(Throwable error,InetSocketAddress remoteAddress) { - long interval = CIMConstant.RECONN_INTERVAL_TIME - (5 * 1000 - new Random().nextInt(15 * 1000)); - - CIMLoggingFilter.getLogger().connectFailure(remoteAddress, interval); - - - Intent intent = new Intent(); - intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED); - intent.putExtra(Exception.class.getName(), error.getClass().getSimpleName()); - intent.putExtra("interval", interval); - context.sendBroadcast(intent); - - } + + public void connect(final String host, final int port) { if (!isNetworkConnected(context)) { Intent intent = new Intent(); + intent.setPackage(context.getPackageName()); intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED); intent.putExtra(Exception.class.getName(), NetworkDisabledException.class.getSimpleName()); context.sendBroadcast(intent); @@ -136,16 +131,21 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa if (isConnected() || !semaphore.tryAcquire()) { return; } - + + if(connector == null || connector.isDisposed()) { + makeNioConnector(); + } + executor.execute(new Runnable() { @Override public void run() { - CIMCacheManager.putBoolean(context, CIMCacheManager.KEY_CIM_CONNECTION_STATE, false); final InetSocketAddress remoteAddress = new InetSocketAddress(host, port); CIMLoggingFilter.getLogger().startConnect(remoteAddress); + CIMCacheManager.putBoolean(context, CIMCacheManager.KEY_CIM_CONNECTION_STATE, false); + connector.connect(remoteAddress).addListener(new IoFutureListener() { @Override public void operationComplete(ConnectFuture future) { @@ -160,7 +160,25 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa }); } + + + private void handleConnectFailure(Throwable error,InetSocketAddress remoteAddress) { + + long interval = CIMConstant.RECONN_INTERVAL_TIME - (5 * 1000 - new Random().nextInt(15 * 1000)); + + CIMLoggingFilter.getLogger().connectFailure(remoteAddress, interval); + + Intent intent = new Intent(); + intent.setPackage(context.getPackageName()); + intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED); + intent.putExtra(Exception.class.getName(), error.getClass().getSimpleName()); + intent.putExtra("interval", interval); + context.sendBroadcast(intent); + + + } + public void send(SentBody body) { boolean isSuccessed = false; @@ -180,6 +198,7 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa if (!isSuccessed) { Intent intent = new Intent(); + intent.setPackage(context.getPackageName()); intent.setAction(CIMConstant.IntentAction.ACTION_SENT_FAILED); intent.putExtra(Exception.class.getName(), exceptionName); intent.putExtra(SentBody.class.getName(), body); @@ -196,9 +215,9 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa if (connector != null && !connector.isDisposed()) { connector.dispose(); + connector = null; } - manager = null; } public boolean isConnected() { @@ -214,6 +233,11 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa } public IoSession getCurrentSession() { + + if(connector == null || connector.isDisposed()) { + return null; + } + Map sessions = connector.getManagedSessions(); for (Long key : sessions.keySet()) { IoSession session = sessions.get(key); @@ -230,6 +254,7 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa setLastHeartbeatTime(session); Intent intent = new Intent(); + intent.setPackage(context.getPackageName()); intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_SUCCESSED); context.sendBroadcast(intent); @@ -239,6 +264,7 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa public void sessionClosed(IoSession session) { Intent intent = new Intent(); + intent.setPackage(context.getPackageName()); intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_CLOSED); context.sendBroadcast(intent); @@ -246,22 +272,25 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa @Override public void sessionIdle(IoSession session, IdleStatus status) { + /** * 用于解决,wifi情况下。偶而路由器与服务器断开连接时,客户端并没及时收到关闭事件 导致这样的情况下当前连接无效也不会重连的问题 * */ long lastHeartbeatTime = getLastHeartbeatTime(session); if (System.currentTimeMillis() - lastHeartbeatTime >= HEARBEAT_TIME_OUT) { - session.closeNow(); + session.closeOnFlush(); } } + @Override public void messageReceived(IoSession session, Object obj) { if (obj instanceof Message) { Intent intent = new Intent(); + intent.setPackage(context.getPackageName()); intent.setAction(CIMConstant.IntentAction.ACTION_MESSAGE_RECEIVED); intent.putExtra(Message.class.getName(), (Message) obj); context.sendBroadcast(intent); @@ -270,6 +299,7 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa if (obj instanceof ReplyBody) { Intent intent = new Intent(); + intent.setPackage(context.getPackageName()); intent.setAction(CIMConstant.IntentAction.ACTION_REPLY_RECEIVED); intent.putExtra(ReplyBody.class.getName(), (ReplyBody) obj); context.sendBroadcast(intent); @@ -280,6 +310,7 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa public void messageSent(IoSession session, Object message) { if (message instanceof SentBody) { Intent intent = new Intent(); + intent.setPackage(context.getPackageName()); intent.setAction(CIMConstant.IntentAction.ACTION_SENT_SUCCESSED); intent.putExtra(SentBody.class.getName(), (SentBody) message); context.sendBroadcast(intent); 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 384b04a..9b49855 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 33b5fe6..b904f54 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 f9879fd..b5b18b0 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 7be847d..b61179c 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 5c1f893..c962b3c 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 d4e8519..a503fde 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetworkDisabledException.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetworkDisabledException.java index 991783f..6ad7146 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetworkDisabledException.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/NetworkDisabledException.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/SessionClosedException.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/SessionClosedException.java index 1da2535..84e35d5 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/SessionClosedException.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/exception/SessionClosedException.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 eaafcc3..fdcc050 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 9915a4a..7c2b137 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 9a119ae..71e6f1b 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/HeartbeatRequest.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/HeartbeatRequest.java index 648f804..005964d 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/HeartbeatRequest.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/HeartbeatRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/HeartbeatResponse.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/HeartbeatResponse.java index ddc161c..2920b92 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/HeartbeatResponse.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/HeartbeatResponse.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 8dbf65f..d0185c5 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Protobufable.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Protobufable.java index 3c95b02..9970e4b 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Protobufable.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/model/Protobufable.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 7eaf751..d8838b8 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 c4733b0..2b4a581 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,5 +1,5 @@ /** - * Copyright 2013-2033 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_mina/cim-client-android/app/libs/cim-android-sdk-3.5.jar b/cim_for_mina/cim-client-android/app/libs/cim-android-sdk-3.5.jar index f32b4f94c5a28d8e0d755576da7315b14300fca9..d2827a4362e9d9b76ce5bd123c001a7f77c1c812 100644 GIT binary patch delta 13740 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 - + 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 e3743c0..27c10b0 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 @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -83,7 +83,11 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { private CIMConnectorManager(Context ctx) { context = ctx; + makeNioBootstrap(); + } + + private void makeNioBootstrap() { bootstrap = new Bootstrap(); loopGroup = new NioEventLoopGroup(1); bootstrap.group(loopGroup); @@ -101,7 +105,6 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { ch.pipeline().addLast(CIMConnectorManager.this); } }); - } public synchronized static CIMConnectorManager getManager(Context context) { @@ -118,8 +121,8 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { CIMLoggingHandler.getLogger().connectFailure(remoteAddress, interval); - Intent intent = new Intent(); - intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED); + Intent intent = new Intent(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED); + intent.setPackage(context.getPackageName()); intent.putExtra(Exception.class.getName(), error.getClass().getSimpleName()); intent.putExtra("interval", interval); context.sendBroadcast(intent); @@ -133,8 +136,8 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { if (!isNetworkConnected(context)) { - Intent intent = new Intent(); - intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED); + Intent intent = new Intent(CIMConstant.IntentAction.ACTION_CONNECTION_FAILED); + intent.setPackage(context.getPackageName()); intent.putExtra(Exception.class.getName(), NetworkDisabledException.class.getSimpleName()); context.sendBroadcast(intent); @@ -144,6 +147,10 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { if (isConnected() || !semaphore.tryAcquire()) { return; } + + if (bootstrap == null || loopGroup.isShutdown()) { + makeNioBootstrap(); + } executor.execute(new Runnable() { @Override @@ -187,14 +194,14 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { } if (!isSuccessed) { - Intent intent = new Intent(); - intent.setAction(CIMConstant.IntentAction.ACTION_SENT_FAILED); + Intent intent = new Intent(CIMConstant.IntentAction.ACTION_SENT_FAILED); + intent.setPackage(context.getPackageName()); intent.putExtra(Exception.class.getName(), exceptionName); intent.putExtra(SentBody.class.getName(), body); context.sendBroadcast(intent); } else { - Intent intent = new Intent(); - intent.setAction(CIMConstant.IntentAction.ACTION_SENT_SUCCESSED); + Intent intent = new Intent(CIMConstant.IntentAction.ACTION_SENT_SUCCESSED); + intent.setPackage(context.getPackageName()); intent.putExtra(SentBody.class.getName(), (SentBody) body); context.sendBroadcast(intent); } @@ -210,7 +217,6 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { loopGroup.shutdownGracefully(); } - manager = null; } public boolean isConnected() { @@ -229,8 +235,8 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { setLastHeartbeatTime(ctx.channel()); - Intent intent = new Intent(); - intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_SUCCESSED); + Intent intent = new Intent(CIMConstant.IntentAction.ACTION_CONNECTION_SUCCESSED); + intent.setPackage(context.getPackageName()); context.sendBroadcast(intent); } @@ -238,8 +244,8 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { @Override public void channelInactive(ChannelHandlerContext ctx) { - Intent intent = new Intent(); - intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_CLOSED); + Intent intent = new Intent(CIMConstant.IntentAction.ACTION_CONNECTION_CLOSED); + intent.setPackage(context.getPackageName()); context.sendBroadcast(intent); } @@ -264,16 +270,16 @@ class CIMConnectorManager extends SimpleChannelInboundHandler { public void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception { if (msg instanceof Message) { - Intent intent = new Intent(); - intent.setAction(CIMConstant.IntentAction.ACTION_MESSAGE_RECEIVED); + Intent intent = new Intent(CIMConstant.IntentAction.ACTION_MESSAGE_RECEIVED); + intent.setPackage(context.getPackageName()); intent.putExtra(Message.class.getName(), (Message) msg); context.sendBroadcast(intent); } if (msg instanceof ReplyBody) { - Intent intent = new Intent(); - intent.setAction(CIMConstant.IntentAction.ACTION_REPLY_RECEIVED); + Intent intent = new Intent(CIMConstant.IntentAction.ACTION_REPLY_RECEIVED); + intent.setPackage(context.getPackageName()); intent.putExtra(ReplyBody.class.getName(), (ReplyBody) msg); context.sendBroadcast(intent); } diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/CIMLoggingHandler.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/CIMLoggingHandler.java index 1ed5937..cf089b8 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/CIMLoggingHandler.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/CIMLoggingHandler.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 4b16445..c53ab1e 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 @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageEncoder.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageEncoder.java index 351fe57..d7fc81c 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageEncoder.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/filter/ClientMessageEncoder.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-client-android/app/libs/cim-android-sdk-3.5.jar b/cim_for_netty/cim-client-android/app/libs/cim-android-sdk-3.5.jar index 01bf8b6bb06e93f85b37b59083581e50a9625cf4..0ec8975e0f961e4b79d1159a19e7d5ce12ee365b 100644 GIT binary patch delta 13739 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

|kBG@E8q*iG~ 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 e2IRy0m)BzoPi7zm7X - + diff --git a/cim_for_netty/cim-server-sdk/.settings/org.eclipse.jdt.core.prefs b/cim_for_netty/cim-server-sdk/.settings/org.eclipse.jdt.core.prefs index c537b63..0c68a61 100644 --- a/cim_for_netty/cim-server-sdk/.settings/org.eclipse.jdt.core.prefs +++ b/cim_for_netty/cim-server-sdk/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,7 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/constant/CIMConstant.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/constant/CIMConstant.java index 7393831..119eb83 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/constant/CIMConstant.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/constant/CIMConstant.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 5a832da..ba61075 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 @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageEncoder.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageEncoder.java index cfcaa68..004e819 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageEncoder.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/ServerMessageEncoder.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/decoder/AppMessageDecoder.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/decoder/AppMessageDecoder.java index 0cb5579..c83c422 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/decoder/AppMessageDecoder.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/decoder/AppMessageDecoder.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/decoder/WebMessageDecoder.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/decoder/WebMessageDecoder.java index 997b3a2..aedd48a 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/decoder/WebMessageDecoder.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/filter/decoder/WebMessageDecoder.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMNioSocketAcceptor.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMNioSocketAcceptor.java index aab710b..759a972 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMNioSocketAcceptor.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMNioSocketAcceptor.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,10 +34,12 @@ import com.farsunset.cim.sdk.server.session.CIMSession; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandler.Sharable; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; @@ -82,7 +84,9 @@ public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler innerHandlerMap.put(WEBSOCKET_HANDLER_KEY, new WebsocketHandler()); ServerBootstrap bootstrap = new ServerBootstrap(); - bootstrap.group(new NioEventLoopGroup(), new NioEventLoopGroup()); + EventLoopGroup bossGroup = new NioEventLoopGroup(); + EventLoopGroup workerGroup = new NioEventLoopGroup(); + bootstrap.group(bossGroup, workerGroup); bootstrap.childOption(ChannelOption.TCP_NODELAY, true); bootstrap.childOption(ChannelOption.SO_KEEPALIVE, true); bootstrap.channel(NioServerSocketChannel.class); @@ -99,6 +103,14 @@ public class CIMNioSocketAcceptor extends SimpleChannelInboundHandler }); bootstrap.bind(port); + + ChannelFuture channelFuture = bootstrap.bind(port).syncUninterruptibly(); + + channelFuture.channel().closeFuture().addListener(future -> { + bossGroup.shutdownGracefully(); + workerGroup.shutdownGracefully(); + }); + } /** diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMRequestHandler.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMRequestHandler.java index 2c78bb3..16aa5b8 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMRequestHandler.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/CIMRequestHandler.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/WebsocketHandler.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/WebsocketHandler.java index 1dad634..1f7aab2 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/WebsocketHandler.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/handler/WebsocketHandler.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HandshakerResponse.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HandshakerResponse.java index 0928ceb..b71cd50 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HandshakerResponse.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HandshakerResponse.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HeartbeatRequest.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HeartbeatRequest.java index 77915d6..172bbd2 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HeartbeatRequest.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HeartbeatRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HeartbeatResponse.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HeartbeatResponse.java index e010abc..3f54b31 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HeartbeatResponse.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/HeartbeatResponse.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 6e46f95..e9e02ba 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,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/ReplyBody.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/ReplyBody.java index d4d079c..d35b00d 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/ReplyBody.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/ReplyBody.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/SentBody.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/SentBody.java index 1025369..8a148b2 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/SentBody.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/SentBody.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/feature/EncodeFormatable.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/feature/EncodeFormatable.java index af57438..5ef9d5f 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/feature/EncodeFormatable.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/feature/EncodeFormatable.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/MessageProto.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/MessageProto.java index 1916dab..8aa073c 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/MessageProto.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/MessageProto.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/ReplyBodyProto.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/ReplyBodyProto.java index 5c7420c..d4cbab2 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/ReplyBodyProto.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/ReplyBodyProto.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/SentBodyProto.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/SentBodyProto.java index e86f011..bf53d62 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/SentBodyProto.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/model/proto/SentBodyProto.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/CIMSession.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/CIMSession.java index 1155df8..b8f13d4 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/CIMSession.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/CIMSession.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/DefaultSessionManager.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/DefaultSessionManager.java index 30a4043..ba537c4 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/DefaultSessionManager.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/DefaultSessionManager.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/SessionManager.java b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/SessionManager.java index 390d18b..d067129 100644 --- a/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/SessionManager.java +++ b/cim_for_netty/cim-server-sdk/src/com/farsunset/cim/sdk/server/session/SessionManager.java @@ -1,5 +1,5 @@ /** - * Copyright 2013-2023 Xia Jun(3979434@qq.com). + * Copyright 2013-2019 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.