diff --git a/app/src/main/java/com/mogo/cloud/netty/client/NettyClientActivity.java b/app/src/main/java/com/mogo/cloud/netty/client/NettyClientActivity.java index e77cbde..de7c021 100644 --- a/app/src/main/java/com/mogo/cloud/netty/client/NettyClientActivity.java +++ b/app/src/main/java/com/mogo/cloud/netty/client/NettyClientActivity.java @@ -20,6 +20,8 @@ import com.mogo.telematic.client.status.ConnectState; import java.util.Arrays; +import io.netty.channel.Channel; + public class NettyClientActivity extends AppCompatActivity implements View.OnClickListener, NettyClientListener { private static final String TAG = "NettyClientActivity"; @@ -107,14 +109,14 @@ public class NettyClientActivity extends AppCompatActivity implements View.OnCli } @Override - public void onMessageResponseClient(MogoProtocolMsg msg, String sign) { + public void onMessageResponseClient(MogoProtocolMsg msg, String sign, Channel channel) { String result = msg.toString(); Log.e(TAG, "onMessageResponse:" + result); logRece(result); } @Override - public void onClientStatusConnectChanged(final int statusCode, final String sign) { + public void onClientStatusConnectChanged(final int statusCode, final String sign, Channel channel) { runOnUiThread(() -> { if (statusCode == ConnectState.STATUS_CONNECT_SUCCESS) { Log.e(TAG, "STATUS_CONNECT_SUCCESS:"); diff --git a/gradle.properties b/gradle.properties index 2c29a8f..3aae84b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -36,26 +36,26 @@ PASSWORD=xintai2018 RELEASE=true # AI CLOUD 云平台 # 工具类 -MOGO_UTILS_VERSION=1.3.50 +MOGO_UTILS_VERSION=1.3.51 # 网络请求 -MOGO_NETWORK_VERSION=1.3.50 +MOGO_NETWORK_VERSION=1.3.51 # 网络DNS -MOGO_HTTPDNS_VERSION=1.3.50 +MOGO_HTTPDNS_VERSION=1.3.51 # 鉴权 -MOGO_PASSPORT_VERSION=1.3.50 +MOGO_PASSPORT_VERSION=1.3.51 # 常链接 -MOGO_SOCKET_VERSION=1.3.50 +MOGO_SOCKET_VERSION=1.3.51 # 数据采集 -MOGO_REALTIME_VERSION=1.3.50 +MOGO_REALTIME_VERSION=1.3.51 # 探路,道路事件发布,获取 -MOGO_TANLU_VERSION=1.3.50 +MOGO_TANLU_VERSION=1.3.51 # 直播推流 -MOGO_LIVE_VERSION=1.3.50 +MOGO_LIVE_VERSION=1.3.51 # 直播拉流 -MOGO_TRAFFICLIVE_VERSION=1.3.50 +MOGO_TRAFFICLIVE_VERSION=1.3.51 # 定位服务 -MOGO_LOCATION_VERSION=1.3.50 +MOGO_LOCATION_VERSION=1.3.51 # 远程通讯模块 -MOGO_TELEMATIC_VERSION=1.3.50 +MOGO_TELEMATIC_VERSION=1.3.51 # v2x -MOGO_V2X_VERSION=1.3.50 +MOGO_V2X_VERSION=1.3.51 diff --git a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/MogoProtocolMsg.java b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/MogoProtocolMsg.java index 1bdcea5..72ad34e 100644 --- a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/MogoProtocolMsg.java +++ b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/MogoProtocolMsg.java @@ -11,6 +11,7 @@ public class MogoProtocolMsg { public static final int IDENTITY_REGIST = 2; // 同步美化模式状态 public static final int SYNC_MODE_STATUS = 3; + public static final int REQ_CAR_NUMBER = 4; private int protocolType; private int bodyLength; diff --git a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/NSDNettyManager.java b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/NSDNettyManager.java index 0c8d657..2b594a1 100644 --- a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/NSDNettyManager.java +++ b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/NSDNettyManager.java @@ -263,6 +263,23 @@ public class NSDNettyManager { } } + /** + * 连接指定ip服务端 + * @param ip + */ + public void connectSpecifiedServer(String ip, int port, String uuid, NettyClientListener listener) { + if (mNsdClient != null) { + // 停止局域网内扫描 + mNsdClient.stopServiceDiscovery(); + } + if (mNettyTcpClient != null && (mNettyTcpClient.isConnecting() || mNettyTcpClient.getConnectStatus())) { + // 断开已连接上的 + mNettyTcpClient.disconnect(); + mNettyTcpClient = null; + } + connectNettyServer(ip, port, uuid, listener); + } + public static String bytesToHexFun(byte[] bytes, int length) { StringBuilder buf = new StringBuilder(length * 2); for (int i = 0; i < length; i++) {// 使用String的format方法进行转换 diff --git a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NettyTcpClient.java b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NettyTcpClient.java index 072bdd0..5250a09 100644 --- a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NettyTcpClient.java +++ b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NettyTcpClient.java @@ -219,16 +219,16 @@ public class NettyTcpClient { private NettyClientListener mProxyListener = new NettyClientListener() { @Override - public void onMessageResponseClient(Object msg, String sign) { + public void onMessageResponseClient(Object msg, String sign, Channel channel) { if (listener != null) { - listener.onMessageResponseClient(msg, sign); + listener.onMessageResponseClient(msg, sign, channel); } } @Override - public void onClientStatusConnectChanged(int statusCode, String sign) { + public void onClientStatusConnectChanged(int statusCode, String sign, Channel channel) { if (listener != null) { - listener.onClientStatusConnectChanged(statusCode, sign); + listener.onClientStatusConnectChanged(statusCode, sign, channel); } if (statusCode == ConnectState.STATUS_CONNECT_SUCCESS && !TextUtils.isEmpty(mSign)) { byte[] signByteArr = mSign.getBytes(); diff --git a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NsdClient.java b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NsdClient.java index c6a726f..ddc79c0 100644 --- a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NsdClient.java +++ b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/NsdClient.java @@ -26,7 +26,7 @@ public class NsdClient { private final Context mContext; private final String mServiceName; private final IServerFound mIServerFound; - + private boolean isRegisterDiscovery; /** * 用来存储解析后的网络对象列表,包含完整数据 */ @@ -57,6 +57,7 @@ public class NsdClient { mNsdManager = (NsdManager) mContext.getSystemService(Context.NSD_SERVICE); initializeDiscoveryListener(); mNsdManager.discoverServices(NSD_SERVER_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener); + isRegisterDiscovery = true; } /** @@ -67,13 +68,13 @@ public class NsdClient { mDiscoveryListener = new NsdManager.DiscoveryListener() { @Override public void onStartDiscoveryFailed(String serviceType, int errorCode) { - mNsdManager.stopServiceDiscovery(this); + isRegisterDiscovery = false; Logger.e(TAG, "onStartDiscoveryFailed()"); } @Override public void onStopDiscoveryFailed(String serviceType, int errorCode) { - mNsdManager.stopServiceDiscovery(this); + isRegisterDiscovery = false; Logger.e(TAG, "onStopDiscoveryFailed()"); } @@ -85,6 +86,7 @@ public class NsdClient { @Override public void onDiscoveryStopped(String serviceType) { Logger.e(TAG, "onDiscoveryStopped()"); + isRegisterDiscovery = false; } /** @@ -142,10 +144,12 @@ public class NsdClient { @Override public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) { Logger.e(TAG, "onResolveFailed()"); + isRegisterDiscovery = false; } @Override public void onServiceResolved(NsdServiceInfo serviceInfo) { + isRegisterDiscovery = false; int port = serviceInfo.getPort(); InetAddress host = serviceInfo.getHost(); String serviceName = serviceInfo.getServiceName(); @@ -165,7 +169,11 @@ public class NsdClient { public void stopServiceDiscovery() { - mNsdManager.stopServiceDiscovery(mDiscoveryListener); + // 必须要加isRegisterDiscovery判断, + // 否则停止扫描的时候会去mListenerMap查找是否存在,不存在的话会崩溃 + if (mNsdManager != null && isRegisterDiscovery) { + mNsdManager.stopServiceDiscovery(mDiscoveryListener); + } } public interface IServerFound { diff --git a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/handler/NettyClientHandler.java b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/handler/NettyClientHandler.java index baf788e..ef87137 100644 --- a/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/handler/NettyClientHandler.java +++ b/libraries/mogo-telematic/src/main/java/com/mogo/telematic/client/handler/NettyClientHandler.java @@ -72,7 +72,7 @@ public class NettyClientHandler extends SimpleChannelInboundHandler { * @param msg 消息 * @param sign tcp 客户端的标识,因为一个应用程序可能有很多个长链接 */ - void onMessageResponseClient(T msg, String sign); + void onMessageResponseClient(T msg, String sign, Channel channel); /** * 当服务状态发生变化时触发 * @param statusCode 状态变化 * @param sign tcp 客户端的标识,因为一个应用程序可能有很多个长链接 */ - void onClientStatusConnectChanged(int statusCode, String sign); + void onClientStatusConnectChanged(int statusCode, String sign, Channel channel); }