OpCode(Operation Code) 操作码的意思。

OpCode 有几种域组成,不同领域格式组成不同

1.指令号

2.数据范围

3.数据内容

如 {code}{addr range}{data}

{1}{2-5}{2至5地址内容为 "你好"}

{2}{6-10}{6至10地址内容为 "hello"}

这种编码可以应用到其它领域,本项目用的格式是

{data model}{data}

源码解读

QOpCode 类维护所有opCode

 /**
* @author solq
**/
@Target(TYPE)
@Retention(RUNTIME)
public @interface QOpCode {
short value(); public static final short QPRODUCE = 1;
public static final short QCONSUME = 2;
public static final short QSUBSCIBE = 3;
public static final short QCODE = 4;
public static final short QRPC = 5; } 

QDispenseHandler.class

 private void doReceive0(QPacket packet, ChannelHandlerContext ctx) {

     boolean response = packet.hasStatus(QPacket.MASK_RESPONSE);
// 业务处理
final short c = packet.getC();
switch (c) {
case QOpCode.QPRODUCE:
if (produceHandler != null) {
QProduce produce = packet.toProduce();
produceHandler.onReceive(ctx, packet, produce);
}
break;
case QOpCode.QCONSUME:
if (consumeHandler != null) {
QConsume qConsume = packet.toConsume();
consumeHandler.onReceive(ctx, packet, qConsume);
}
break;
case QOpCode.QSUBSCIBE:
if (subscribeHandler != null) {
Collection<QSubscribe> qSubscribe = packet.toSubscribe();
subscribeHandler.onReceive(ctx, packet, qSubscribe);
}
break;
case QOpCode.QRPC:
response = false;
// 业务回写请求
if (rpcHandler != null) {
QRpc qRpc = packet.toRpc();
rpcHandler.onReceive(ctx, packet, qRpc);
}
break;
case QOpCode.QCODE:
response = false;
// 响应请求
if (responseHandler != null) {
short code = packet.toCode();
responseHandler.onReceive(ctx, packet, code);
}
break;
default:
throw new QSocketException(QCode.SOCKET_UNKNOWN_OPCODE, " opCode : " + c);
} }

根据不同的model code 进行解释,然后调用应用层处理

其中应用层处理统一实现 IQReceiveHandler 接口规范处理参数同处理行为

     //应用层逻辑
protected IQReceiveHandler<QProduce> produceHandler;
protected IQReceiveHandler<QConsume> consumeHandler;
protected IQReceiveHandler<Collection<QSubscribe>> subscribeHandler;
protected IQReceiveHandler<Short> responseHandler;
protected IQReceiveHandler<QRpc> rpcHandler; //通信层逻辑
protected IQReceiveHandler<Void> acceptHandler;
protected IQReceiveHandler<Void> closeHandler; protected IQReceiveHandler<Void> beforeHandler;
protected IQReceiveHandler<Void> afterHandler;
 /**
*
* 响应端 业务逻辑
*
* @author solq
**/
public interface IQReceiveHandler<T> { void onReceive(ChannelHandlerContext ctx,QPacket packet, T body); }

[编织消息框架][设计协议]opCode的更多相关文章

  1. [编织消息框架][设计协议]优化long,int转换

    理论部分 一个long占8byte,大多数应用业数值不超过int每次传输多4byte会很浪费 有没有什么办法可以压缩long或int呢? 答案是有的,原理好简单,如果数值不超过int.max_valu ...

  2. [编织消息框架][设计协议]bit基础

    理论部分 1字节等于8比特,也就是8个二进数,如下面公式 1Byte = 8bits = 0111 1111 1Short = 2Btye 1Int = 4Byte 那学这些有什么用呢? 可以用来做数 ...

  3. [编织消息框架][netty源码分析]2 eventLoop

    eventLoop从命名上看是专门处理事件 事件系统主要由线程池同队列技术组成,有以下几个优点 1.任务出队有序执行,不会出现错乱,当然前提执行线程池只有一个 2.解偶系统复杂度,这是个经典的生产者/ ...

  4. [编织消息框架][传输协议]sctp

    OSI(Open System Interconnect),即开放式系统互联. 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型. 该体系结构标准定义了网络互连的七 ...

  5. [编织消息框架][JAVA核心技术]动态代理应用4

    基础部份: 接下来讲编译JAVA时,生成自定义class 我们用 javax.annotation.processing.AbstractProcessor 来处理 public abstract c ...

  6. [编织消息框架][网络IO模型]BIO

    既然跟网络内容有关就不得不学习网络IO模型,时代在进步,技术也在进步,采取使用那种网络IO模型就已经确定应用程序规模 阻塞IO(blocking IO) 在linux中,默认情况下所有的socket都 ...

  7. [编织消息框架][消息服务]jmx

    JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架,使用的是RMI技术. 比较经典的应用jdk bin目录下 jcons ...

  8. [编织消息框架][netty源码分析]4 eventLoop 实现类NioEventLoop职责与实现

    NioEventLoop 是jdk nio多路处理实现同修复jdk nio的bug 1.NioEventLoop继承SingleThreadEventLoop 重用单线程处理 2.NioEventLo ...

  9. [编织消息框架][netty源码分析]7 Unsafe 实现类NioSocketChannelUnsafe职责与实现

    Unsafe 是channel的内部接口,从书写跟命名上看是不公开给开发者使用的,直到最后实现NioSocketChannelUnsafe也没有公开出去 public interface Channe ...

随机推荐

  1. 初识SuperSocket

    有一些企业由于以前使用的操作系统是被淘汰的操作系统,例如OpenVMS.现需要将针对openvms开发的通讯程序进行移植到现在的windows操作系统上,通过一段时间的了解,现在需要花时间去找商业性的 ...

  2. 《JAVASCRIPT高级程序设计》JSON语法/解析/序列化

    JSON是一种数据格式,不是一种编程语言. 一.语法 JSON语法可以表示以下三种类型的值:简单值.对象.数组. 1.简单值 最简单的JSON数据值就是简单值: 5 "hello world ...

  3. 去除android或者iOS系统默认的一些样式总结

    ios系统中元素被触摸时产生的半透明灰色遮罩怎么去掉 iOS用户点击一个链接,会出现一个半透明灰色遮罩, 如果想要禁用,可设置-webkit-tap-highlight-color的alpha值为0, ...

  4. Kafka 0.8源码分析—ZookeeperConsumerConnector

    1.HighLevelApi High Level Api是多线程的应用程序,以Topic的Partition数量为中心.消费的规则如下: 一个partition只能被同一个ConsumersGrou ...

  5. db_link

    1.查询 SYSDBA登录, sys登录    SELECT * FROM SYS.link$; select owner,object_name from dba_objects where obj ...

  6. iOS企业版APP分发上线流程和注意事项

    0.准备 1]$299/year的企业级开发账号. 2]制作分发证书和描述文件,并下载安装到本机. 3]Xcode编译通过,真机测试通过的源码. 1.打包前配置 1]Xcode 打开项目,common ...

  7. Android灯光系统--深入理解背光灯

    Android灯光系统--深入理解背光灯 一.怎么控制背光灯(简述) APP将亮度值写入数据库 线程检测数据库的值是否发生变化 这种机制成为"内容观察者"--contentObse ...

  8. GAME(A)性能测试过程模型

  9. android学习17——命令行建gradle工程

    使用命令行建gradle工程要涉及到几个工具的版本. 1.gradle的版本.这个用gradle -version查到. 2.SDK BuildTools的版本. 这个要先配好SDK的环境变量,然后在 ...

  10. tornado学习 - TCPServer 实现聊天功能

    最近学习tornado框架,其中有很多值得学习的模块,鉴于某位学长的建议,也决定好好看看tornado.tcpserver. 关于TCP协议详细介绍可查阅wiki. 对于TCP服务器,基本的操作tor ...