优化netty

This commit is contained in:
limqhz
2020-07-28 01:33:00 +08:00
parent 6bfe22bb99
commit 032fe493a0
5 changed files with 10 additions and 63 deletions

View File

@@ -1,18 +0,0 @@
package com.ydd.sportfaceid.config;
/**
* 全局配置常量
*
* @author peakren
* @date 05/12/2017 10:29 PM
*/
public class GlobalConfig {
/**
* 与服务器通讯状态
*/
public static boolean isConnected = false;
}

View File

@@ -3,6 +3,7 @@ package com.ydd.sportfaceid.netty;
import android.app.Activity;
import android.util.Log;
import com.ydd.sportfaceid.config.SDAppConfig;
import com.ydd.sportfaceid.netty.message.DeviceType;
import com.ydd.sportfaceid.netty.message.HeartBeat;
import com.ydd.sportfaceid.netty.message.MessageDTO;
@@ -85,8 +86,8 @@ public class ClientHandler extends SimpleChannelInboundHandler<String> {
private HeartBeat getHbMessage() {
HeartBeat hb = new HeartBeat();
hb.setDeviceName(DeviceIdUtil.generateDeviceId(mContext));
hb.setVenueId(mContext.getTaskId()); // TODO 从上下文选择场馆
hb.setEnterOrOut(DeviceType.ENTER); // TODO 上下文获取场馆进场或者出场
hb.setVenueId(SDAppConfig.getInstance().getVenueId());
hb.setEnterOrOut(SDAppConfig.getInstance().getDeviceType());
return hb;
}

View File

@@ -4,7 +4,6 @@ import android.app.Activity;
import android.util.Log;
import com.ydd.sportfaceid.BuildConfig;
import com.ydd.sportfaceid.config.GlobalConfig;
import com.ydd.sportfaceid.event.MessageEvent;
import com.ydd.sportfaceid.utils.SharedPreferencesUtil;
@@ -33,16 +32,14 @@ import io.netty.channel.socket.nio.NioSocketChannel;
*/
public class ClientThread {
private final static String TAG = "sander";
private final static String TAG = "ClientThread";
private static ClientThread instance;
private volatile EventLoopGroup workerGroup;
private volatile Bootstrap bootstrap;
private volatile boolean closed = false;
private String remoteHost;
private int remotePort;
private Activity mContext;
private ChannelFuture future;
@@ -65,74 +62,42 @@ public class ClientThread {
}
public void run() {
closed = false;
workerGroup = new NioEventLoopGroup();
bootstrap = new Bootstrap();
bootstrap.group(workerGroup);
bootstrap.channel(NioSocketChannel.class);
bootstrap.option(ChannelOption.TCP_NODELAY, true);
bootstrap.option(ChannelOption.SO_KEEPALIVE, true);
ReConnectHandler reConnectHandler = new ReConnectHandler();
ClientHandler dmClientHandler = new ClientHandler(mContext);
ClientInitializer channelInitializer = new ClientInitializer(reConnectHandler, dmClientHandler);
bootstrap.handler(channelInitializer);
doConnect();
}
public void clearFuture(){
future = null;
}
public void doConnect() {
Log.d("sander","现在开始链接了");
if (closed) {
return;
}
remoteHost = SharedPreferencesUtil.getServerIp();
remotePort = SharedPreferencesUtil.getServerPort();
if (GlobalConfig.isConnected){
return;
}
Log.d("sander", "连接 = " + remoteHost + " " + remotePort);
future = bootstrap.connect(new InetSocketAddress(remoteHost, remotePort));
future.addListener((ChannelFutureListener) f -> f.channel().eventLoop().schedule(() -> {
if (!f.isSuccess()) {
if (GlobalConfig.isConnected) {
GlobalConfig.isConnected = false;
}
doConnect();
EventBus.getDefault().post(new MessageEvent("等待连接"));
Log.e(TAG, "连接失败!");
} else {
EventBus.getDefault().post(new MessageEvent("已连接"));
Log.i(TAG, "连接成功!");
GlobalConfig.isConnected = true;
}
}, 2, TimeUnit.SECONDS));
}
public void setContext(Activity context) {
mContext = context;
}
public void close() {
closed = true;
workerGroup.shutdownGracefully();
}
public void restart() {
this.remoteHost = SharedPreferencesUtil.getServerIp();
this.remotePort = SharedPreferencesUtil.getServerPort();
close();
run();
}
@ChannelHandler.Sharable
public class ReConnectHandler extends ChannelInboundHandlerAdapter {
@Override

View File

@@ -4,6 +4,7 @@ import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.ydd.sportfaceid.R;
import com.ydd.sportfaceid.config.SDAppConfig;
import com.ydd.sportfaceid.main.SDBaseActivity;
@@ -31,6 +32,8 @@ public class SDSettingActivity extends SDBaseActivity {
Integer venueId = Integer.parseInt(venue_cell.getText().toString());
DeviceType deviceType = DeviceType.valueOf(device_type_cell.getText().toString());
SDAppConfig.getInstance().configSet(venueId,deviceType);
showToast("设置成功!");
onGoToMainAction();
}
public void onGoToMainAction(){

View File

@@ -70,13 +70,9 @@ public class SDGustInfoView extends RelativeLayout {
mTimerOutput.schedule(new TimerTask() {
@Override
public void run() { //定时器,更新日志
Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
subscriber.onNext(null);
subscriber.onCompleted();
}
Observable.create(subscriber -> {
subscriber.onNext(null);
subscriber.onCompleted();
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<Object>() {