| | |
| | | |
| | | |
| | | |
| | | import static com.example.agvcontroller.utils.DateUtils.formatDate; |
| | | |
| | | import io.netty.buffer.ByteBuf; |
| | | import io.netty.buffer.ByteBufUtil; |
| | | import io.netty.buffer.Unpooled; |
| | |
| | | import android.os.Message; |
| | | import android.util.Log; |
| | | |
| | | import com.example.agvcontroller.AGVApplication; |
| | | import com.example.agvcontroller.AGVCar; |
| | | import com.example.agvcontroller.MainActivity; |
| | | import com.example.agvcontroller.action.AGV_11_UP; |
| | | import com.example.agvcontroller.action.AckMsgBuilder; |
| | | import com.example.agvcontroller.met.AbstractInboundHandler; |
| | | import com.example.agvcontroller.protocol.AGV_03_UP; |
| | | import com.example.agvcontroller.protocol.AGV_12_UP; |
| | | import com.example.agvcontroller.protocol.AGV_13_UP; |
| | | import com.example.agvcontroller.protocol.AGV_A1_DOWN; |
| | |
| | | import com.example.agvcontroller.protocol.AgvAction; |
| | | import com.example.agvcontroller.protocol.AgvPackage; |
| | | import com.example.agvcontroller.protocol.ProtocolType; |
| | | import com.example.agvcontroller.utils.DateUtils; |
| | | |
| | | |
| | | import org.greenrobot.eventbus.EventBus; |
| | | |
| | | import java.net.InetSocketAddress; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | |
| | | private static final String TAG = "NettyServerHandler"; |
| | | private static ConcurrentHashMap<String, Channel> channelMap = new ConcurrentHashMap<>(); |
| | | private Map<String, Runnable> pendingRemovals = new HashMap<>(); |
| | | int battery = 0; |
| | | int status = 0; |
| | | int agvStatus = 0; |
| | | String positionID = "--"; |
| | | int positionX = 0; |
| | | int positionY = 0; |
| | | float agvAngle = 0; |
| | | float gyroAngle = 0; |
| | | int forkHeight = 0; |
| | | int forkExtend = 0; |
| | | int forkAngle = 0; |
| | | int agvError = 0; |
| | | private Handler handler = new Handler(Looper.getMainLooper()) { |
| | | @Override |
| | | public void handleMessage(Message msg) { |
| | |
| | | ProtocolType ackType = isNeedAck(pac); |
| | | final String uniqueNo = pac.getHeader().getUniqueNo(); |
| | | String agvNo; |
| | | AGVCar agvCar; |
| | | |
| | | String log; |
| | | |
| | | label : switch (pac.getHeader().getProtocolType()){ |
| | | case ACTION_COMPLETE: // 动作完成数据包 |
| | | AGV_11_UP agv_11_up = (AGV_11_UP) pac.getBody().getMessageBody(); |
| | |
| | | AGV_12_UP agv_12_up = (AGV_12_UP) pac.getBody().getMessageBody(); |
| | | agvNo = pac.getHeader().getUniqueNo(); |
| | | channelMap.put(clientId, ctx.channel()); |
| | | EventBus.getDefault().post(new AGVCar(clientId,ip,port,agvNo,1)); |
| | | agvStatus = agv_12_up.getStatus(); |
| | | positionID = agv_12_up.getQrCode(); |
| | | positionX = agv_12_up.getOffsetX(); |
| | | positionY = agv_12_up.getOffsetY(); |
| | | agvAngle = agv_12_up.getAGVCurrentAngle(); |
| | | gyroAngle = agv_12_up.getGyroAngle(); |
| | | forkHeight = agv_12_up.getCurrentAltitude(); |
| | | forkExtend = agv_12_up.getForkLength(); |
| | | forkAngle = agv_12_up.getLoaderTheta(); |
| | | agvCar = new AGVCar(clientId, ip, port, agvNo, 1, battery,agvStatus,positionID,positionX,positionY,agvAngle,gyroAngle,forkHeight,forkExtend,forkAngle,agvError); |
| | | EventBus.getDefault().post(agvCar); |
| | | log = formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS") + " 上行: " + ip + "[有码实时数据包]>>>" + pac.getSourceHexStr(); |
| | | Log.d("updown", log); |
| | | AGVApplication.addLog(log); |
| | | break label; |
| | | case DATA_WITHOUT_CODE_REPORT: |
| | | AGV_13_UP agv_13_up = (AGV_13_UP) pac.getBody().getMessageBody(); |
| | | agvNo = pac.getHeader().getUniqueNo(); |
| | | channelMap.put(clientId, ctx.channel()); |
| | | EventBus.getDefault().post(new AGVCar(clientId,ip,port,agvNo,1)); |
| | | agvCar = new AGVCar(clientId, ip, port, agvNo, 1, battery,agvStatus,positionID,positionX,positionY,agvAngle,gyroAngle,forkHeight,forkExtend,forkAngle,agvError); |
| | | EventBus.getDefault().post(agvCar); |
| | | log = formatDate(new Date(), "yyyy-MM-dd HH:mm:ss:SSS") + " 上行: " + ip + "[无码实时数据包]>>>" + pac.getSourceHexStr(); |
| | | Log.d("updown", log); |
| | | AGVApplication.addLog(log); |
| | | break label; |
| | | case HEARTBEAT_REPORT: |
| | | AGV_03_UP agv_03_up = (AGV_03_UP) pac.getBody().getMessageBody(); |
| | | battery = agv_03_up.getBattery(); |
| | | agvError = agv_03_up.getError(); |
| | | // pac.getBody().getMessageBody() |
| | | agvNo = pac.getHeader().getUniqueNo(); |
| | | channelMap.put(clientId, ctx.channel()); |
| | | agvCar = new AGVCar(clientId, ip, port, agvNo, 1, battery,agvStatus,positionID,positionX,positionY,agvAngle,gyroAngle,forkHeight,forkExtend,forkAngle,agvError); |
| | | EventBus.getDefault().post(agvCar); |
| | | log = formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS") + " 上行: " + ip + "[心跳包]>>>" + pac.getSourceHexStr(); |
| | | Log.d("updown", log); |
| | | AGVApplication.addLog(log); |
| | | break label; |
| | | case LOGIN_REPORT: |
| | | AGV_F0_UP agv_f0_up = (AGV_F0_UP) pac.getBody().getMessageBody(); |
| | | if (null != ackType) { |
| | | AgvPackage ackPac = AckMsgBuilder.ofSuccess(pac, ackType); |
| | | AGV_F0_DOWN agv_f0_down = (AGV_F0_DOWN) ackPac.getBody().getMessageBody(); |
| | | log = formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS") + " 上行: " + ip + "[登录包]>>>" + pac.getSourceHexStr(); |
| | | Log.d("updown", log); |
| | | AGVApplication.addLog(log); |
| | | |
| | | // EventBus.getDefault().post(log); |
| | | |
| | | ctx.writeAndFlush(ackPac); |
| | | } |
| | | battery = agv_f0_up.getBattery(); |
| | | // pac.getBody().getMessageBody() |
| | | agvNo = pac.getHeader().getUniqueNo(); |
| | | channelMap.put(clientId, ctx.channel()); |
| | | EventBus.getDefault().post(new AGVCar(clientId,ip,port,agvNo,1)); |
| | | agvCar = new AGVCar(clientId, ip, port, agvNo, 1, battery,agvStatus,positionID,positionX,positionY,agvAngle,gyroAngle,forkHeight,forkExtend,forkAngle,agvError); |
| | | EventBus.getDefault().post(agvCar); |
| | | break label; |
| | | |
| | | } |
| | |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | // 将十六进制字符串转换为字节数组 |
| | | private byte[] hexStringToByteArray(String s) { |
| | | int len = s.length(); |