1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- /*
- * Copyright 2013-2019 Xia Jun(3979434@qq.com).
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ***************************************************************************************
- * *
- * Website : http://www.farsunset.com *
- * *
- ***************************************************************************************
- */
- package com.fdkk.server.coder;
- import com.fdkk.server.constant.CIMConstant;
- import com.fdkk.server.model.Transportable;
- import io.netty.buffer.ByteBuf;
- import io.netty.channel.ChannelHandlerContext;
- import io.netty.handler.codec.MessageToByteEncoder;
- /**
- * 服务端发送消息前编码
- */
- public class AppMessageEncoder extends MessageToByteEncoder<Transportable> {
- @Override
- protected void encode(final ChannelHandlerContext ctx, final Transportable data, ByteBuf out){
- byte[] body = data.getBody();
- byte[] header = createHeader(data.getType(), body.length);
- out.writeBytes(header);
- out.writeBytes(body);
- }
- /**
- * 创建消息头,结构为 TLV格式(Tag,Length,Value)
- * 第一字节为消息类型
- * 第二,三字节为消息长度分隔为高低位2个字节
- */
- private byte[] createHeader(byte type, int length) {
- byte[] header = new byte[CIMConstant.DATA_HEADER_LENGTH];
- header[0] = type;
- header[1] = (byte) (length & 0xff);
- header[2] = (byte) ((length >> 8) & 0xff);
- return header;
- }
- }
|