From 4e307b0d89c9a84916bbbc2119e41d34c6badc13 Mon Sep 17 00:00:00 2001 From: lizhanwei <Dana_Lee1016@126.com> Date: 星期五, 14 二月 2020 16:39:49 +0800 Subject: [PATCH] 修改平台协议文档;调通注册消息; --- app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java | 10 + im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java | 15 ++ app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java | 2 Documents/驾考模拟系统业务平台协议设计xc20200211.doc | 0 app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java | 113 ++++++++++++++++++++++ im_lib/src/main/java/com/anyun/im_lib/MsgDispatcher.java | 2 app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java | 111 +++++++++++++++++++-- app/src/main/java/safeluck/drive/evaluation/util/Utils.java | 7 + im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java | 2 im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java | 4 app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java | 12 ++ 11 files changed, 251 insertions(+), 27 deletions(-) diff --git "a/Documents/\351\251\276\350\200\203\346\250\241\346\213\237\347\263\273\347\273\237\344\270\232\345\212\241\345\271\263\345\217\260\345\215\217\350\256\256\350\256\276\350\256\241xc20200211.doc" "b/Documents/\351\251\276\350\200\203\346\250\241\346\213\237\347\263\273\347\273\237\344\270\232\345\212\241\345\271\263\345\217\260\345\215\217\350\256\256\350\256\276\350\256\241xc20200211.doc" index ecc0695..08714bb 100644 --- "a/Documents/\351\251\276\350\200\203\346\250\241\346\213\237\347\263\273\347\273\237\344\270\232\345\212\241\345\271\263\345\217\260\345\215\217\350\256\256\350\256\276\350\256\241xc20200211.doc" +++ "b/Documents/\351\251\276\350\200\203\346\250\241\346\213\237\347\263\273\347\273\237\344\270\232\345\212\241\345\271\263\345\217\260\345\215\217\350\256\256\350\256\276\350\256\241xc20200211.doc" Binary files differ diff --git a/app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java b/app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java index 52ac0ce..dbfff02 100644 --- a/app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java +++ b/app/src/main/java/safeluck/drive/evaluation/bean/RegisterMessage.java @@ -1,5 +1,12 @@ package safeluck.drive.evaluation.bean; + +import android.text.TextUtils; + +import com.anyun.im_lib.util.ByteUtil; + +import static com.anyun.im_lib.util.ByteUtil.shortGetBytes; + /** * 娉ㄥ唽娑堟伅 * MyApplication2 @@ -9,7 +16,42 @@ */ public class RegisterMessage extends DriveExamProtocol { - private static final int BODY_LENGTH = 2; + /** + * 1.1.1 缁堢娉ㄥ唽 + * 娑堟伅ID锛�0x0100銆� + * 璧峰瀛楄妭 + * 瀛楁 + * 鏁版嵁绫诲瀷 + * 鎻忚堪鍙婅姹� + * 0 + * 鐪佸煙ID + * WORD + * 缁堢鎵�鍦ㄥ湴鐪両D + * 2 + * 甯傚幙鍩烮D + * WORD + * 缁堢鎵�鍦ㄥ湴甯侷D + * 4 + * 缁堢鍨嬪彿 + * BYTE[20] + * 20涓瓧鑺傦紝姝ょ粓绔瀷鍙风敱鍒堕�犲晢鑷瀹氫箟锛屼綅鏁颁笉瓒�20浣嶇殑锛屽悗琛モ��0X00鈥� + * 24 + * 缁堢鍑哄巶搴忓垪鍙� + * BYTE[8] + * 8涓瓧鑺傦紝鐢卞ぇ鍐欏瓧姣嶅拰鏁板瓧缁勬垚锛屾缁堢ID鐢卞埗閫犲晢鑷瀹氫箟锛屼綅鏁颁笉瓒虫椂锛屽悗琛モ��0X00鈥� + * 32 + * IMEI + * BYTE[15] + * 鍥介檯绉诲姩璁惧鏍囪瘑锛孉SCII鐮� + */ + private static final int BODY_LENGTH = 55; + + private short proviceId; + private short cityid; + private String model;//缁堢鍨嬪彿 + private String sn;//鍑哄巶搴忓垪鍙� + private String imei;// + /** * 鏋勯�犲嚱鏁� * @@ -17,6 +59,50 @@ */ public RegisterMessage(short msg_id) { super(msg_id); + } + + public static int getBodyLength() { + return BODY_LENGTH; + } + + public short getProviceId() { + return proviceId; + } + + public void setProviceId(short proviceId) { + this.proviceId = proviceId; + } + + public short getCityid() { + return cityid; + } + + public void setCityid(short cityid) { + this.cityid = cityid; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public String getSn() { + return sn; + } + + public void setSn(String sn) { + this.sn = sn; + } + + public String getImei() { + return imei; + } + + public void setImei(String imei) { + this.imei = imei; } @Override @@ -27,9 +113,30 @@ @Override protected byte[] createMessageBody() { + int pos = 0; byte[] messageBody = new byte[BODY_LENGTH]; - messageBody[0] = 0x65; - messageBody[1] = 0x67; + //鐪佸煙ID + byte[] provinceIdBytes = ByteUtil.shortGetBytes(proviceId); + System.arraycopy(provinceIdBytes,0,messageBody,pos,provinceIdBytes.length); + pos += provinceIdBytes.length; + //甯傚煙ID + byte[] cityIdBytes = ByteUtil.shortGetBytes(cityid); + System.arraycopy(cityIdBytes,0,messageBody,pos,cityIdBytes.length); + pos += cityIdBytes.length; + //model + byte[] modelBytes = !TextUtils.isEmpty(model)?model.getBytes():"".getBytes(); + System.arraycopy(modelBytes,0,messageBody,pos,modelBytes.length); + pos += 20; + + //sn + byte[] snBytes = !TextUtils.isEmpty(sn)?sn.getBytes():"".getBytes(); + System.arraycopy(snBytes,0,messageBody,pos,snBytes.length); + pos += 16; + + //IMEI + byte[] imeiBytes = !TextUtils.isEmpty(imei)?imei.getBytes():"".getBytes(); + System.arraycopy(imeiBytes,0,messageBody,pos,imeiBytes.length); + return messageBody; } } diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java index 7ff9ebc..98b53e5 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/SignalConfigFragment.java @@ -2,12 +2,17 @@ import android.content.Context; import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; +import android.widget.CompoundButton; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; @@ -18,6 +23,7 @@ import androidx.appcompat.widget.Toolbar; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import me.yokeyword.fragmentation.SupportFragment; @@ -38,6 +44,7 @@ private Toolbar mToobar; private ListView listView; private LinearLayout linearLayout; + private static final String TAG = SignalConfigFragment.class.getSimpleName(); public static SupportFragment newInstance(){ return new SignalConfigFragment(); } @@ -71,13 +78,13 @@ signalConfiglist .add(new SignalConfigBean("瀹夊叏甯�","鑴氬埞",false,true,true,false,3,4)); signalConfiglist .add(new SignalConfigBean("鐔勭伀","缁曡溅1",false,true,true,false,5,6)); signalConfiglist .add(new SignalConfigBean("闂ㄩ攣","缁曡溅2",false,true,true,false,7,8)); - signalConfiglist .add(new SignalConfigBean("鎵嬪埞","绂诲悎",true,false,true,false,1,2)); - signalConfiglist .add(new SignalConfigBean("宸﹁浆鍚�","1妗�",false,true,true,false,3,4)); - signalConfiglist .add(new SignalConfigBean("鍙宠浆鍚�","2妗�",false,true,true,false,5,6)); - signalConfiglist .add(new SignalConfigBean("杩戝厜鐏�","3妗�",false,true,true,false,7,8)); - signalConfiglist .add(new SignalConfigBean("杩滃厜鐏�","4妗�",false,true,true,false,7,8)); - signalConfiglist .add(new SignalConfigBean("闆剧伅","闆ㄥ埛",false,true,true,false,7,8)); - signalConfiglist .add(new SignalConfigBean("绀哄鐏�","鏃�",false,true,true,false,7,8)); + signalConfiglist .add(new SignalConfigBean("鎵嬪埞","绂诲悎",true,false,true,false,9,10)); + signalConfiglist .add(new SignalConfigBean("宸﹁浆鍚�","1妗�",false,true,true,false,11,12)); + signalConfiglist .add(new SignalConfigBean("鍙宠浆鍚�","2妗�",false,true,true,false,13,14)); + signalConfiglist .add(new SignalConfigBean("杩戝厜鐏�","3妗�",false,true,true,false,15,16)); + signalConfiglist .add(new SignalConfigBean("杩滃厜鐏�","4妗�",false,true,true,false,17,18)); + signalConfiglist .add(new SignalConfigBean("闆剧伅","闆ㄥ埛",false,true,true,false,19,20)); + signalConfiglist .add(new SignalConfigBean("绀哄鐏�","鏃�",false,true,true,false,21,22)); listView.setAdapter(mySignalsAdapter); @@ -111,19 +118,97 @@ } @Override - public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder viewHolder; + public View getView(final int position, View convertView, ViewGroup parent) { + final ViewHolder viewHolder; if (convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.layout_signal_conf_item,null); viewHolder = new ViewHolder(convertView); + + + viewHolder.editText1.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + Log.i(TAG, "et1 afterTextChanged: "+s.toString()); + String str = s.toString(); + int a = Integer.parseInt(str); + signalConfiglist.get(position).setPort_one(a); + } + }); + viewHolder.editText2.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + Log.i(TAG, "et2 afterTextChanged: "+s.toString()); + String str = s.toString(); + int a = Integer.parseInt(str); + signalConfiglist.get(position).setPort_two(a); + } + }); + + + viewHolder.checkBox3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox3.getTag(); + signalConfigBean.setThree(isChecked); + } + }); + viewHolder.checkBox4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox4.getTag(); + signalConfigBean.setFour(isChecked); + } + });viewHolder.checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox2.getTag(); + signalConfigBean.setTwo(isChecked); + } + });viewHolder.checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox1.getTag(); + signalConfigBean.setOne(isChecked); + } + }); convertView.setTag(viewHolder); + viewHolder.checkBox1.setTag(signalConfiglist.get(position)); + viewHolder.checkBox2.setTag(signalConfiglist.get(position)); + viewHolder.checkBox3.setTag(signalConfiglist.get(position)); + viewHolder.checkBox4.setTag(signalConfiglist.get(position)); }else { viewHolder = (ViewHolder) convertView.getTag(); + viewHolder.checkBox1.setTag(signalConfiglist.get(position)); + viewHolder.checkBox2.setTag(signalConfiglist.get(position)); + viewHolder.checkBox3.setTag(signalConfiglist.get(position)); + viewHolder.checkBox4.setTag(signalConfiglist.get(position)); } - - SignalConfigBean signalConfigItem = getItem(position); + viewHolder.editText1.setTag(position); + viewHolder.editText2.setTag(position); + final SignalConfigBean signalConfigItem = getItem(position); viewHolder.textView1.setText(signalConfigItem.getSignal_name_first()); viewHolder.textView2.setText(signalConfigItem.getSignal_name_second()); + viewHolder.editText1.setText(String.valueOf(signalConfigItem.getPort_one())); viewHolder.editText2.setText(String.valueOf(signalConfigItem.getPort_two())); @@ -147,7 +232,7 @@ TextView textView2; - public ViewHolder(View convertView) { + public ViewHolder(final View convertView) { checkBox1 = convertView.findViewById(R.id.signal_check_1); checkBox2 = convertView.findViewById(R.id.signal_check_2); checkBox3 = convertView.findViewById(R.id.signal_check_3); @@ -162,4 +247,6 @@ } } + + } diff --git a/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java b/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java index 18a7590..b2d6612 100644 --- a/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java +++ b/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java @@ -22,7 +22,7 @@ @Override public void dispatchMsg(Object message) { - MessageProcessor.getInstance().receiveMsg((String)message); + MessageProcessor.getInstance().receiveMsg((byte[])message); } @Override @@ -71,6 +71,12 @@ @Override public byte[] getRegisterMessage() { - return new RegisterMessage((short) 0x802).toBytes(); + RegisterMessage registerMessage = new RegisterMessage((short)0x0100); + registerMessage.setCityid((short) 1); + registerMessage.setProviceId((short)23); + registerMessage.setImei("460123874561"); + registerMessage.setModel("123"); + registerMessage.setSn("0314200100000004"); + return registerMessage.toBytes(); } } diff --git a/app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java b/app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java index edc2c6c..006aece 100644 --- a/app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java +++ b/app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java @@ -7,6 +7,6 @@ * All Rights Saved! Chongqing AnYun Tech co. LTD */ public interface IMessageProcessor { - void receiveMsg(String message); + void receiveMsg(byte[] message); void sendMessage(String msg); } diff --git a/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java b/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java index 2b3e333..450aac7 100644 --- a/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java +++ b/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java @@ -2,7 +2,10 @@ import android.util.Log; +import com.anyun.im_lib.util.ByteUtil; + import safeluck.drive.evaluation.util.CThreadPoolExecutor; +import safeluck.drive.evaluation.util.Utils; /** * MyApplication2 @@ -27,8 +30,13 @@ } @Override - public void receiveMsg(String message) { - Log.i(TAG, "receiveMsg: "+message); + public void receiveMsg(byte[] message) { + byte[] datas = Utils.parseMsg(message); + Log.i(TAG, "receiveMsg: "+ ByteUtil.byte2HexStr(datas)); + byte checkcolde=Utils.calCheckCode(ByteUtil.subArray(datas,0,datas.length-1)); + if (checkcolde == datas[datas.length-1]){ + Log.i(TAG, "receiveMsg: 娑堟伅姝g‘"); + } } @Override diff --git a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java b/app/src/main/java/safeluck/drive/evaluation/util/Utils.java index a0548a7..f6054f2 100644 --- a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java +++ b/app/src/main/java/safeluck/drive/evaluation/util/Utils.java @@ -68,8 +68,11 @@ } } temp[y++] = 0x7e; - Log.i(TAG,"杞箟杩囧悗锛�"+ ByteUtil.byte2hex(temp)); - return temp; + + byte[] tranferbytes = new byte[y]; + System.arraycopy(temp,0,tranferbytes,0,y); + Log.i(TAG,"杞箟杩囧悗锛�"+ ByteUtil.byte2hex(tranferbytes)); + return tranferbytes; } /** diff --git a/im_lib/src/main/java/com/anyun/im_lib/MsgDispatcher.java b/im_lib/src/main/java/com/anyun/im_lib/MsgDispatcher.java index 9fbc31e..cf0f2c4 100644 --- a/im_lib/src/main/java/com/anyun/im_lib/MsgDispatcher.java +++ b/im_lib/src/main/java/com/anyun/im_lib/MsgDispatcher.java @@ -16,7 +16,7 @@ this.onEventListener = listener; } - public void receivedMsg(String msg){ + public void receivedMsg(byte[] msg){ // TODO: 2019/12/12 if (onEventListener != null){ onEventListener.dispatchMsg(msg); diff --git a/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java b/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java index 73332d6..70cd0f4 100644 --- a/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java +++ b/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java @@ -11,6 +11,7 @@ import com.anyun.im_lib.interf.IMSClientInteface; import com.anyun.im_lib.listener.IMSConnectStatusCallback; import com.anyun.im_lib.listener.OnEventListener; +import com.anyun.im_lib.util.ByteUtil; import java.nio.ByteBuffer; import java.util.Vector; @@ -220,6 +221,7 @@ try { ByteBuf byteBuf = ByteBufAllocator.DEFAULT.ioBuffer(); byteBuf.writeBytes(mOnEventListener.getRegisterMessage()); + Log.i(TAG, "鍙戦�佹秷鎭�: "+ ByteUtil.byte2HexStr(mOnEventListener.getRegisterMessage())); channel.writeAndFlush(byteBuf); } catch (Exception e) { Log.i(TAG, "鍙戦�佹秷鎭け璐ワ紝reason="+e.getMessage()+"\t"); diff --git a/im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java b/im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java index ad3116d..97a2bbc 100644 --- a/im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java +++ b/im_lib/src/main/java/com/anyun/im_lib/netty/TCPReadHandler.java @@ -63,8 +63,8 @@ buf.readBytes(req); Log.i(TAG, "channelRead hex str: "+ ByteUtil.byte2HexStr(req)); String str = new String(req, "UTF-8"); - - imsClient.getMsgDispatcher().receivedMsg( str ); + if (req!=null && req.length>0) + imsClient.getMsgDispatcher().receivedMsg( req ); } @Override diff --git a/im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java b/im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java index 6b0fb24..5761069 100644 --- a/im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java +++ b/im_lib/src/main/java/com/anyun/im_lib/util/ByteUtil.java @@ -190,8 +190,8 @@ */ public static byte[] shortGetBytes(short data) { byte[] bytes = new byte[2]; - bytes[0] = (byte) (data & 0xff); - bytes[1] = (byte) ((data & 0xff00) >> 8); + bytes[1] = (byte) (data & 0xff); + bytes[0] = (byte) ((data & 0xff00) >> 8); return bytes; } @@ -206,6 +206,17 @@ short b = (short) 32768; b++; System.out.println(byte2HexStr(shortGetBytes((short) b))); + + + String model = "123"; + byte[] messageBody = new byte[30]; + byte[] modelBytes = new byte[20]; + modelBytes = model.getBytes(); + System.arraycopy(shortGetBytes((short)323),0,messageBody,0,2); + System.arraycopy(modelBytes,0,messageBody,2,modelBytes.length); + System.arraycopy(shortGetBytes((short)3),0,messageBody,22,2); + System.out.println(byte2HexStr(messageBody)); + } public static byte[] subArray(byte[] srcBytes, int begin, int length) { -- Gitblit v1.8.0