messagecenter

Introduction: 消息中心
More: Author   ReportBugs   
Tags:

支持消息多订阅、不依赖上下文、集成了 socket 通讯(收发 socket 消息与普通消息无区别)

使用者可以实现 socket 拦截器实现数据自由拆装和重连机制

Socket 可自动重连,重连机制基于屏幕广播、网络广播及定时器

Socket 自动分包和拆包(采用的开始结束符识别策略)

使用方式

         //初始化消息中心
        //socket 连接模块集成的是 netty 框架
        MessageCenter.create(context)
                .setSocketCheckIntervalTime(10 * 1000)      //设置 socket 自检定时器时间,默认为 10 秒
                .host("192.168.0.1").port(8088)             //设置 socket 连接参数,不需要使用 socket 也可以不设置
                .socketInterceptor(new MySocketInterceptor());//绑定 socket 拦截器,不需要使用 socket 也可以不设置

        //连接 socket,如果已经连上 socket,会自动先断开再连接;不需要使用 socket 也可以不调用
        MessageCenter.connectSocket();
        //断开 socket 连接;不需要使用 socket 也可以不调用
        MessageCenter.disConnectSocket();

        //发送应用内消息
        Msg insideMsg = Msg.ini("insideTag", new Object());//"insideTag"是订阅消息的标识,new Object()是携带的数据包,可以是任意类型
        insideMsg.destination(Msg.APP_INSIDE);//APP_INSIDE 为默认值,可以不用设置,如需发送到服务器则使用 APP_OUTSIDE
        MessageCenter.sendMessage(insideMsg);

        //发送到应用外的消息
        Msg outSideMsg = Msg.ini("outsideTag", new Object());
        outSideMsg.destination(Msg.APP_OUTSIDE);
        MessageCenter.sendMessage(outSideMsg);

        //Listener 方式创建订阅者
        MessageHandler insideMessageHandler = new MessageHandler("insideTag",
                //收到消息订阅
                new MHanderReceiveListener() {
                    @Override
                    public void receivedMsg(Msg message) {}
                },
                //发送消息订阅,可监听发送状态,主要用于处理发送 socket 消息回执,不是必须实现的方法
                new MHanderSendListener() {
                    @Override
                    public void sendMsgReturn(Msg message, int sendState) {}
                });
        //Listener 方式注册订阅者
        MessageCenter.registMessageHandler(insideMessageHandler);
        //Listener 方式注销订阅者。如不再使用一定要记得注销
        MessageCenter.unRegistMessageHandler(insideMessageHandler);

        //注解方式注册订阅者
        MessageCenter.registMessageHandler(this);
        //注解方式注销订阅者。如不再使用一定要记得注销
        MessageCenter.unRegistMessageHandler(this,"outsideTag");

支持注解

 /**
     * 注解方式绑定订阅者
     * 发送 socket 消息监听
     * @param obj 发送的数据包 , 不一定是 Object,视你发送的消息类型而定,如果发送的数据包为 null,这儿可以不要这个参数
     * @param sendState 发送状态
     */
   @MHanderSendTag("outsideTag")
    void sendOutside(Object obj, int sendState){
        //MHanderSendListener.ACTIVE 发送中
        //MHanderSendListener.SUCCESS 发送成功
        //MHanderSendListener.FAIL 发送失败
    }

    /**
     * 注解方式绑定订阅者
     * 接受 socket 消息监听 收到的数据包 , 不一定是 Object,视你收到的消息类型而定,如果收到的数据包为 null,这儿可以不要这个参数
     * @param obj
     */
    @MHanderReceiveTag("outsideTag")
    void receiveOutside(Object obj){

    }

socket 自定义拦截器

/**
     * socket 拦截器
     * 可以在这里做数据拆装、重连机制
     */
    public class MySocketInterceptor implements SocketInterceptor {

        /**
         * 这里会收到服务器发来的且已处理成 String 字符串,你可以根据自己的需求进行包装
         * ReceiveMsg 有 tag 和 obj 可供你的订阅者使用
         * @param msg 收到的数据包
         * @return
         */
        @Override
        public void receiveServerMsg(String msg) {

        }

        /**
         * 这里用于包装心跳包,你可以根据自己的需求包装成需要的字符串样式
         * @return
         */
        @Override
        public String heartbeat() {
            return null;
        }
        /**
         * 把发送 socket 的对象包装成服务器期望的字符串
         * @param msgObj 发送 socket 的 obj 对象
         * @return 最终发送的 socket 的字符串
         */
         public String packageMsg(Object msgObj){
             return null;
         }
         /**
          * 返回分包开始标识符(如果不需要处理分包拆包,可以不处理)
          * @return
         */
         public String getStartTag() {
             return null;
         }

         /**
          * 返回分包结束标识符(如果不需要处理分包拆包,可以不处理)
          * @return
          */
          public String getEndTag() {
              return null;
          }
        /**
         * socket 的连接状态监听
         * @param connetState  CONNECTING:连接中 INTERRUPT:已断开 SUCCESS:连接成功 CANCEL:已取消(主动调用 MessageCenter.disConnectSocket()会调用)
         * @param exception 如已断开会返回错误信息
         */
        @Override
        public void connectState(ConnetState connetState, Exception exception) {

        }
    }

混淆方式

-keepclassmembers class **{
    @com.fanjun.messagecenter.annotion.MHanderReceiveTag <methods>;
    @com.fanjun.messagecenter.annotion.MHanderSendTag <methods>;
}
-keepattributes *Annotation*
-keepattributes Signature,InnerClasses
-keepclasseswithmembers class io.netty.** {*;}
-keepnames class io.netty.** {*;}

依赖

Maven

<dependency>
  <groupId>com.fanjun</groupId>
  <artifactId>messagecenter</artifactId>
  <version>1.0.17</version>
  <type>pom</type>
</dependency>

Gradle

 implementation 'com.fanjun:messagecenter:1.0.17'

联系我

我的博客:https://blog.csdn.net/qwe112113215
我的邮箱:810343451@qq.com
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools