lizhanwei
2020-02-19 4d207cda87d3685a7edfbb4c62887807d2c6ccf1
消息转义后发送;NettyTcp发送消息进行日志记录
6个文件已修改
1个文件已添加
392 ■■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/platformMessage/AttachInfo.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/platformMessage/JK2019MessageBase.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/Utils.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/anyun/im_lib/util/MyLog.java 359 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
@@ -233,12 +233,15 @@
                break;
            case R.id.btn_keepalive:
                ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
                scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
                scheduledExecutorService.scheduleWithFixedDelay(new Runnable() {
                    @Override
                    public void run() {
                        MessageProcessor.getInstance().sendMessage(new JKMessage0002());
                        JKMessage0002 jkMessage0002 = new JKMessage0002();
                        jkMessage0002.checksum = 0x7e;
                        MessageProcessor.getInstance().sendMessage(jkMessage0002);
                        Log.i(TAG, "run: 5s一次");
                    }
                },1000,1000, TimeUnit.MICROSECONDS);
                },1,5, TimeUnit.SECONDS);
                break;
        }
app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java
@@ -94,7 +94,7 @@
            public void run() {
                if (IMSClientBootstrap.getInstance().isActive()){
                    IMSClientBootstrap.getInstance().sendMessage(msg.toBytes());
                    IMSClientBootstrap.getInstance().sendMessage(messageEscaper.escape(msg.toBytes()));
                }else{
                    Log.e(TAG, "run: 发送消息失败,未初始化连接NettyTcp");
                }
app/src/main/java/safeluck/drive/evaluation/platformMessage/AttachInfo.java
@@ -9,12 +9,12 @@
public class AttachInfo extends BinMessageBase {
    @Order(1)
    @Int8
    public int attach_id;
    public int attach_message_id;
    @Order(2)
    @Int8
    public int attach_length;
    public int attach_message_length;
    @Order(3)
    @Length(lengthField="attach_length")
    @Length(lengthField="attach_message_length")
    @Hex
    public String attach_data;
}
app/src/main/java/safeluck/drive/evaluation/platformMessage/JK2019MessageBase.java
@@ -78,7 +78,6 @@
        byte[] bytes = BytesUtils.hexStringToBytes(hex);
        bytes[bytes.length - 2] = BytesUtils.xor(bytes,1,bytes.length -2);
        return BytesUtils.bytesToHexString(bytes);
    }
    @Order(1)
app/src/main/java/safeluck/drive/evaluation/util/Utils.java
@@ -6,6 +6,7 @@
import com.anyun.exam.lib.MyLog;
import com.anyun.exam.lib.util.ByteUtil;
import com.safeluck.aykj.utils.BytesUtils;
/**
 * MyApplication2
@@ -104,4 +105,15 @@
        String regx= "^\\d+";
        return str.matches(regx);
    }
    public static void main(String []args){
        String str   = "EB00020000031420010000000400A5";
//        String str   = "7EEB00020000031420010000000400A5007E";
        String str1  = "EB000200000314200100000004030D00";
//        String str1  = "7EEB000200000314200100000004030D00D57E";
        String str2  = "EB000200000314200100000004035000";
        byte [] dtas=BytesUtils.hexStringToBytes(str);
        byte checkcode = calCheckCode(dtas);
        System.out.println(BytesUtils.toHexString(checkcode));
    }
}
im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
@@ -12,6 +12,7 @@
import com.anyun.im_lib.listener.IMSConnectStatusCallback;
import com.anyun.im_lib.listener.OnEventListener;
import com.anyun.im_lib.util.ByteUtil;
import com.anyun.im_lib.util.MyLog;
import com.safeluck.aykj.utils.BytesUtils;
import java.nio.ByteBuffer;
@@ -332,7 +333,7 @@
            Log.i(TAG, "sendMsg fail,channel为空"+msg);
        }
        try {
            Log.i(TAG, "sendMsg: "+ BytesUtils.bytesToHexString(msg));
            MyLog.i("PlatformMessage", "sendMsg: "+ BytesUtils.bytesToHexString(msg));
            ByteBuf byteBuf = ByteBufAllocator.DEFAULT.ioBuffer();
            byteBuf.writeBytes(msg);
            channel.writeAndFlush(byteBuf);
im_lib/src/main/java/com/anyun/im_lib/util/MyLog.java
New file
@@ -0,0 +1,359 @@
package com.anyun.im_lib.util;
/**
 * anyunProject(20190906)
 * Created by lzw on 2019/9/6. 17:23:17
 * 邮箱:632393724@qq.com
 * All Rights Saved! Chongqing AnYun Tech co. LTD
 */
import android.content.Context;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyLog {
     private static final String TAG = "AYJiaKao";
    private static Boolean MYLOG_SWITCH = true; // 日志文件总开关
    private static Boolean MYLOG_WRITE_TO_FILE = true;// 日志写入文件开关
    private static File file;
    // 输入日志类型,w代表只输出告警信息等,v代表输出所有信息
    private static char MYLOG_TYPE = 'v';
    // 日志文件在sdcard中的路径
    private static String MYLOG_PATH_SDCARD_DIR = "/sdcard/JiaKaolog";
    private static int SDCARD_LOG_FILE_SAVE_DAYS = 3;// sd卡中日志文件的最多保存天数
    private static String MYLOGFILEName = "Log.txt";// 本类输出的日志文件名称
    private static SimpleDateFormat myLogSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 日志的输出格式
    private static SimpleDateFormat logfile = new SimpleDateFormat("yyyy-MM-dd");// 日志文件格式
    public Context context;
    public static void w(String tag, Object msg) { // 警告信息
        log(tag, msg.toString(), 'w');
    }
    public static void e(String tag, Object msg) { // 错误信息
        log(tag, msg.toString(), 'e');
    }
    public static void d(String tag, Object msg) {// 调试信息
        log(tag, msg.toString(), 'd');
    }
    public static void i(String tag, Object msg) {//
        log(tag, msg.toString(), 'i');
    }
    public static void i(Object msg) {//
        log(TAG, msg.toString(), 'i');
    }
    public static void v(String tag, Object msg) {
        log(tag, msg.toString(), 'v');
    }
    public static void w(String tag, String text) {
        log(tag, text, 'w');
    }
    public static void e(String tag, String text) {
        log(tag, text, 'e');
    }
    public static void d(String tag, String text) {
        log(tag, text, 'd');
    }
    public static void i(String tag, String text) {
        log(tag, text, 'i');
    }
    public static void i(String text) {
        log(TAG, text, 'i');
    }
    public static void v(String tag, String text) {
        log(tag, text, 'v');
    }
    /**
     * 根据tag, msg和等级,输出日志
     *
     * @param tag
     * @param msg
     * @param level
     */
    private static void log(final String tag, final String msg, final char level) {
        if (MYLOG_SWITCH) {//日志文件总开关
            if ('e' == level && ('e' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) { // 输出错误信息
                Log.e(tag, msg);
            } else if ('w' == level && ('w' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) {
                Log.w(tag, msg);
            } else if ('d' == level && ('d' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) {
                Log.d(tag, msg);
            } else if ('i' == level && ('d' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) {
                Log.i(tag, msg);
            } else {
                Log.v(tag, msg);
            }
            if (MYLOG_WRITE_TO_FILE)//日志写入文件开关
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        writeLogtoFile(String.valueOf(level), tag, msg);
                    }
                }
                ).start();
        }
    }
    public static void createIfNotExist() {
        String needWriteFiel = logfile.format(System.currentTimeMillis());
        Log.i(TAG, "createIfNotExist: " + needWriteFiel);
        File dirsFile = new File(MYLOG_PATH_SDCARD_DIR);
        if (!dirsFile.exists()) {
            dirsFile.mkdirs();
        }
        //Log.i("创建文件","创建文件");
        file = new File(dirsFile.toString(), needWriteFiel + MYLOGFILEName);// MYLOG_PATH_SDCARD_DIR
        if (!file.exists()) {
            try {
                //在指定的文件夹中创建文件
                file.createNewFile();
            } catch (Exception e) {
            }
        }
    }
    /**
     * 打开日志文件并写入日志
     *
     * @param mylogtype
     * @param tag
     * @param text
     */
    private static void writeLogtoFile(String mylogtype, final String tag, final String text) {// 新建或打开日志文件
        String needWriteMessage = myLogSdf.format(System.currentTimeMillis()) + " " + tag + "  " + text;
        try {
/**后面这个参数代表是不是要接上文件中原来的数据,不进行覆盖**/
            if (file == null) {
                Log.i(TAG, "writeLogtoFile: file==null");
                createIfNotExist();
            }
            FileWriter filerWriter = new FileWriter(file, true);
            BufferedWriter bufWriter = new BufferedWriter(filerWriter);
            bufWriter.write(needWriteMessage);
            bufWriter.newLine();
            bufWriter.close();
            filerWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 删除制定的日志文件
     */
    public static void delFile() {// 删除日志文件
        String needDelFiel = logfile.format(getDateBefore());
        String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/nvlog";
        File file = new File(dirPath, needDelFiel + MYLOGFILEName);// MYLOG_PATH_SDCARD_DIR
        if (file.exists()) {
            file.delete();
        }
    }
    public static void delSubDirLogs() {
        String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/jiakaolog";
        String regx = "^[0-9]{4}-";
        Pattern pattern = Pattern.compile(regx);
        File file = new File(dirPath);
        boolean needDel = false;
        if (file.isDirectory()) {
            Log.i(TAG, "subDirLogs: is a directory");
            File[] subFiles = file.listFiles();
            for (File f :
                    subFiles) {
                String fName = f.getName();
                Log.i(TAG, "subDirLogs: 文件名称:" + fName);
                if (!TextUtils.isEmpty(fName)) {
                    Matcher matcher = pattern.matcher(fName);
                    if (matcher.find()) {
                        Log.i(TAG, "subDirLogs: 符合规则^[0-9]{4}- : " + matcher.group(0));
                        for (int i = 0; i < SDCARD_LOG_FILE_SAVE_DAYS; i++) {
                            String needSaveFileName = logfile.format(getDateBefore(i));
                            Log.i(TAG,"needsaveFileName="+needSaveFileName);
                            if (fName.contains(needSaveFileName)) {
                                Log.i(TAG, "delSubDirLogs: 此log需要保留:" + fName + " 日期:" + needSaveFileName);
                                needDel = false;
                                break;
                            } else {
                                needDel = true;
                            }
                        }
                        if (needDel) {
                            Log.i(TAG, "delSubDirLogs: 删除该文件:" + fName);
                            f.delete();
                        }
                    } else {
                        Log.i(TAG, "delSubDirLogs: 不符合删除规则,则不删除:" + fName);
                    }
                }
            }
        } else {
            Log.i(TAG, "subDirLogs: is not a directory");
        }
    }
    /**
     * 得到现在时间前的几天日期,用来得到需要删除的日志文件名
     */
    private static Date getDateBefore() {
        Date nowtime = new Date();
        Calendar now = Calendar.getInstance();
        now.setTime(nowtime);
        now.set(Calendar.DATE, now.get(Calendar.DATE) - SDCARD_LOG_FILE_SAVE_DAYS);
        return now.getTime();
    }
    private static Date getDateBefore(int i) {
        Date nowtime = new Date();
        Calendar now = Calendar.getInstance();
        now.setTime(nowtime);
        now.set(Calendar.DATE, now.get(Calendar.DATE) - i);
        return now.getTime();
    }
}