客户端通讯协议
parent
5d988e092d
commit
62bcc185b0
@ -0,0 +1,46 @@
|
|||||||
|
package com.zhehekeji.web.service;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 空货位检测的存储map
|
||||||
|
*/
|
||||||
|
public class GoodsEmptyMap {
|
||||||
|
|
||||||
|
private static Map<String, Set<String>> shelveEmptyMap = new HashMap<>();
|
||||||
|
|
||||||
|
public void startEmptyCheck(String SRMNumber){
|
||||||
|
shelveEmptyMap.put(SRMNumber,new HashSet<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getEmptyCheck(String SRMNumber){
|
||||||
|
return shelveEmptyMap.get(SRMNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void Position(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Data
|
||||||
|
// public static class ShelveEmptyMap{
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * {左右}{深浅}{行}{列}
|
||||||
|
// * L 01 0001 0002
|
||||||
|
// */
|
||||||
|
// private String position;
|
||||||
|
// /**
|
||||||
|
// * true: 空
|
||||||
|
// * false: 非空
|
||||||
|
// */
|
||||||
|
// private Boolean isEmpty;
|
||||||
|
// }
|
||||||
|
}
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
package com.zhehekeji.web.service.client;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.buffer.Unpooled;
|
||||||
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户端解码器 连接用
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class Decoder extends DelimiterBasedFrameDecoder {
|
||||||
|
|
||||||
|
private static final Logger tcpLogger = LoggerFactory.getLogger("client_tcp");
|
||||||
|
|
||||||
|
|
||||||
|
public Decoder() {
|
||||||
|
super(200,true,false, Unpooled.copiedBuffer(";".getBytes()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
|
||||||
|
in = (ByteBuf) super.decode(ctx, in);
|
||||||
|
if(in == null){
|
||||||
|
log.debug("no data");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String body = in.toString(Charset.forName("UTF-8"));
|
||||||
|
if(body.startsWith(HBTransmission.getHEADER())) {
|
||||||
|
//心跳
|
||||||
|
HBTransmission hbTransmission = new HBTransmission(body);
|
||||||
|
//回复客户端心跳
|
||||||
|
|
||||||
|
ctx.channel().writeAndFlush(hbTransmission.toString());
|
||||||
|
tcpLogger.info("client:{} heart", hbTransmission.getSRMNumber());
|
||||||
|
in.release();
|
||||||
|
} else if(body.startsWith(TMTransmission.getHeader())){
|
||||||
|
//盘点与空货位扫描相关的指令
|
||||||
|
TMTransmission tmTransmission = new TMTransmission(body);
|
||||||
|
if(tmTransmission.getType() == 1){
|
||||||
|
//空货位扫描
|
||||||
|
|
||||||
|
}else {
|
||||||
|
//盘点
|
||||||
|
}
|
||||||
|
in.release();
|
||||||
|
}else if(body.startsWith(CETransmission.getHEADER())){
|
||||||
|
//建立连接
|
||||||
|
CETransmission ceTransmission = new CETransmission(body);
|
||||||
|
//回复客户端,建立连接完成
|
||||||
|
ctx.channel().writeAndFlush(ceTransmission.toString());
|
||||||
|
ClientChanel.connect(ceTransmission.getSRMNumber(), ctx.channel());
|
||||||
|
tcpLogger.info("client:{} connect", ceTransmission.getSRMNumber());
|
||||||
|
in.release();
|
||||||
|
}else if(body.startsWith("DC")){
|
||||||
|
//客户端断开连接
|
||||||
|
String [] strings = body.split(",");
|
||||||
|
if(strings != null && strings.length == 2){
|
||||||
|
tcpLogger.info("client:{} disConnect", strings[1]);
|
||||||
|
ClientChanel.disConnect(strings[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
package com.zhehekeji.web.service.client;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
/**
|
||||||
|
* 空托盘检测
|
||||||
|
*/
|
||||||
|
public class EmptyTrayCheckTransmission {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
package com.zhehekeji.web.service.client;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
/**
|
||||||
|
* 与客户端的心跳
|
||||||
|
*/
|
||||||
|
public class HBTransmission {
|
||||||
|
|
||||||
|
private static String HEADER = "HB";
|
||||||
|
|
||||||
|
private String SRMNumber;
|
||||||
|
|
||||||
|
public String toString(){
|
||||||
|
return HEADER + "," + SRMNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getHEADER(){
|
||||||
|
return HEADER;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HBTransmission(String body){
|
||||||
|
String [] strings = body.split(",");
|
||||||
|
if(strings != null && strings.length == 2 && HEADER.equals(strings[0])){
|
||||||
|
SRMNumber = strings[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue