博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Netty傻瓜教程(八):服务器生成应答包
阅读量:6033 次
发布时间:2019-06-20

本文共 2218 字,大约阅读时间需要 7 分钟。

hot3.png

客户端要登录,登录成功之后服务器得告诉客户端有没有登录成功,这时候服务器就要生成应答包了。

我们的数据交互使用了ProtoBuf,下面是proto源文件:

option java_package = "com.cdeer.protobuf"; //定义protobuf的包名称空间option java_outer_classname = "CdeerMsg";// 消息体名称/*顶层消息*/ message Message{	required int32  header = 1;							// 包头	optional LoginInfo login_info = 2;					// 登录信息	optional LoginSuccess login_success = 3;			// 登录成功	optional ErrorInfo error_info = 4;					// 错误信息}/**header 包头说明:101--登陆请求;801--登录成功;200--心跳请求ping;201--心跳响应pong;500--消息回执;102--单聊;404--错误消息;502--已读消息;505--正在输入;900--退出登录;*//*登录信息*/message LoginInfo{	required int64 user_id = 1;            // 用户id	required string token = 2;             // 用户token	optional string platform = 3;          // 客户端平台:android,ios,web	optional string app_version = 4;       // APP版本号}/*登录成功*/message LoginSuccess{}/*错误消息*/message ErrorInfo{	required int32 code = 1;		    //错误码	required string info = 2;		    //错误描述	required int32 expose = 3;		    //错误描述是否提示给用户:1 提示;0 不提示}/*单聊消息*/message ChatMsg{	optional int64 msg_id = 1;		//消息id	optional int64 from = 2;		//发送方id	optional int64 to = 3;			//接收方id	optional int64 time = 4;		//时间戳(单位:毫秒)	required int32 msg_type = 5;	//消息类型	optional string content = 6;	//消息内容	optional string url = 7;		//多媒体地址	optional string property = 8;	//附加属性	optional string from_nick = 9;	//发送者昵称	optional string json = 10;		//附加的json串}

用ProtoBuf生成的java文件中加入了set和get方法,下面就是设置包头的方法:

public Builder setHeader(int value) {        bitField0_ |= 0x00000001;        header_ = value;        onChanged();        return this;      }

如果客户端登录成功,那么就开始构造应答消息:

/**	 * 发送登录成功消息	 * 	 * @param channel	 */	public static void routeLoginSuccess(Channel channel) {		LoginSuccess.Builder loginSuccess = LoginSuccess.newBuilder();		Message.Builder msg2 = Message.newBuilder();		msg2.setHeader(801);		msg2.setLoginSuccess(loginSuccess);		Message msgSend = msg2.build();		routeDerict(channel, msgSend);	}

routeDerict是用来直接发送消息的方法:

/**	 * 直接发送消息	 * 	 * @param channel	 *            通道	 * @param msgSend	 *            要发送的消息	 */	public static void routeDerict(Channel channel, Message msgSend) {		try {			channel.writeAndFlush(msgSend);		} catch (Exception e) {			Log.error(e.getMessage(), e);		}	}

 

转载于:https://my.oschina.net/u/438393/blog/847090

你可能感兴趣的文章
linux在文件中查找指定字符串,然后根据查找结果来做进一步的处理
查看>>
在Oracle中删除所有强制性外键约束
查看>>
dhcp
查看>>
【R】R语言使用命令行参数 - [编程技巧(Program Skill)]
查看>>
经典算法题每日演练——第二题 五家共井
查看>>
存储过程中拼接的变量和点的问题
查看>>
ASP.NET那点不为人知的事(一)
查看>>
HTML 表格
查看>>
VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三
查看>>
php 未实例化类调用方法的问题
查看>>
Anaconda jupyter notebook 出现 kernel error 解决办法
查看>>
我对读计算机软件专业硕士的几点看法
查看>>
用JS写CSS
查看>>
TOJ4537: n阶行列式
查看>>
算法刷题笔记-stack-四则运算
查看>>
3.16
查看>>
Linux下arp用法
查看>>
表单文件上传与文件下载
查看>>
jquery 中prop()的使用方法
查看>>
下午考
查看>>