码迷,mamicode.com
首页 > 其他好文 > 详细

重构消息处理机制

时间:2017-11-08 20:08:45      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:一个   client   客户端   扩展   结束   服务器   pack   情况   添加   

没有重构前,代码了有多处n多if()else if() 这样的代码块,这样的代码可读性非常差,而且扩展的时候需要改动这些代码块,而且要修改的类的地方也非常多!包括这些代码快的类如下:

客户端从服务器端收到消息时的处理类:com.ansatsing.landlords.client.handler.ReceiveMessageHandler
   客户端发送消息到服务器端之前的消息包装类:com.ansatsing.landlords.client.handler.SendMessagePack

服务器从客户端收到消息时的消息处理类:com.ansatsing.landlords.server.socket.ServerMessageHandler,如果实现了Netty框架的话那netty包里也有这样一个类

重构后信息分类枚举类【com.ansatsing.landlords.entity.MsgType】就不要了,,还有一些信息标志常量也不要,常量如下
  
public  final static String SYSTEM_EXIT_MSG_FLAG = "SYSTEM_EXIT_MSG_FLAG";//客户端退出时发送这样的消息从而告诉服务器要把相应的线程停止。
public final static String USER_NAME_MSG_FLAG = "name-@";//用户名信息标志
public final static String ENTER_SEAT_MSG_FLAG = "ENTER_SEAT_MSG_FLAG";//霸占座位信息标志
public final static String EXIT_SEAT_MSG_FLAG = "EXIT_SEAT_MSG_FLAG";//空出座位信息标志
public final static String INIT_SEAT_MSG_FLAG = "INIT_SEAT_MSG_FLAG";//初始化座位信息标志
public final static String ENTER_ROOM_MSG_FLAG = "ENTER_ROOM_MSG_FLAG";//进入房间信息标志
public final static String EXIT_ROOM_MSG_FLAG = "EXIT_ROOM_MSG_FLAG";//退出斗地主房间信息标志
public final static String ROOM_SEND_ALL_MSG_FLAG = "ROOM_SEND_ALL_MSG_FLAG";//房间群发信息标志
public final static String ROOM_SEND_ONE_MSG_FLAG = "ROOM_SEND_ONE_MSG_FLAG";//房间私聊信息标志
public final static String ROOM_REMOVE_SOCKET_FLAG = "ROOM_REMOVE_SOCKET_FLAG";//牌友退出房间时移除牌友socket信息标志
public final static String ROOM_ADD_SOCKET_FLAG = "ROOM_ADD_SOCKET_FLAG";//牌友进入房间时添加牌友socket信息标志
public final static String GAME_READY_MSG_FLAG = "GAME_READY_MSG_FLAG";//游戏准备信息标志
public final static String GAME_DEAL_MSG_FLAG = "GAME_DEAL_MSG_FLAG";//游戏发牌信息标志+
public final static String SEND_CARDS_MSG_FlAG="SEND_CARDS_MSG_FlAG";//洗过的牌发送到客户端
public final static String GAME_ROB_MSG_FLAG = "SEND_ROB_MSG_FLAG";//("抢地主阶段发送抢地主情况给服务器的信息的标志");
public final static String START_READY_MSG_FLAG = "START_READY_MSG_FLAG";//启动游戏准备线程的信号标志
public final static String START_DEAL_MSG_FLAG = "START_DEAL_MSG_FLAG";//启动游戏发牌线程的信号标志
public final static String SET_ROLE_MSG_FLAG = "SET_ROLE_MSG_FLAG";//设置斗地主角色的信号标志
public final static String RESTART_READY_MSG_FLAG = "RESTART_READY_MSG_FLAG";//重启动游戏准备线程的信号标志
public final static String START_PLAY_MSG_FLAG = "START_PLAY_MSG_FLAG";//启动打牌线程的信号标志
public final static String PLAY_CARD_MSG_FLAG = "PLAY_CARD_MSG_FLAG";//游戏出牌的信号标志
public final static String GAME_OVER_MSG_FLAG = "GAME_OVER_MSG_FLAG";//一轮游戏结束的信号标志

这次重构主要用到技术java的反射机制,以及结合策略设计模式一起完成的!以后增加消息,比如qq斗地主踢人功能,那服务器端的消息处理线程以及客户端的消息处理线程都无需代码变动,只管在protocol包下增加所需的类!

这样真正实现程序的可扩展性,以及代码可读性!!!

重构消息处理机制

标签:一个   client   客户端   扩展   结束   服务器   pack   情况   添加   

原文地址:http://www.cnblogs.com/ansating/p/7805483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!