最近有功夫研究写的一个socket的游戏引擎

下面是开发日志,没整理,很多内容被重新整合了。现在的代码是mudserver端保留单独的端口,没功夫做多端口的还。mudcommon端已经写了数据库查询什么的,调试还没通过,是包的问题,应该能解决。这样整个核心部分mudserver+mudcommon就可以脱离具体的数据库单独发布了。在开发具体游戏时就引用mudcommon就可以了。mudserver也提供了method穿透的方法,是不是适用就看以后怎么用了。

 

 

--20090730
把服务端和客户端整合在一起,数据库用最简单的jdbc链接,将来要改成iBatis连接数据库
地图暂时用内存临时生成,其他数据结构还没定
1.随身携带的物品
2.地图的结构

--20090731
定义命令参数的格式
1.用户输入时用:命令 参数1 参数2...
2.发送至服务端时用:[命令][参数1][参数2]...
  无法解析的数据用:[异常][数据]
3.服务端返回的结果为:[模块][参数1][参数2]...
  服务端返回map的情况:[模块][<key1,value1><key2,value2>...]
<!--考虑server端写一个ActionManager的工具,返回当前状态下可供操作的菜单项。这将使现有平行的动作选择变得有层次。比如进入房间后,可以退出房间,但不会退出程序。
Menu应该放到一个xml文件中,用程序写层次关系太复杂了。
-->
菜单列表只做最简单的动作,其他的如每个场景中的动作 采用MENU动态插入,不再用xml或复杂的编程去搞
 
先写一个猜骰子大小的游戏放到神秘房间里去
游戏规则,3个骰子
和[19,36] 算大
和[1,18] 算小
3个骰子相同 算豹子 通杀

--20090812
由于在保存当前状态这里遇到了问题,暂停client编写,着重处理服务端的流程
1.客户端不用保存当前的状态,服务端要保存状态,而且随时可查
2.服务端的core只处理系统命令,其他则由专门的包来完成
3.争取做到游戏单独打包,服务端代码基本不动
4.数据格式统一为:
客户端发送
<?xml version="1.0" encoding="UTF-8"?>
<root>
<action name="help.common"/>
<!--
<action name="login.common">diablo;password</action>

<action name="dice.game">
    <item name="enter"></item>
    or
    <item name="return"></item>
</action>
-->
</root>
服务端返回
<?xml version="1.0" encoding="UTF-8"?>
<root>
<action name="help.common">
    <item name="help.common">当前状态</item>
    <item name="exit.common">退出系统</item>
</action>
<!--
<action name="search.game">
    <item name="dice.room.game">神秘房间</item>
    <item name="shop.room.game">神秘商店</item>
</action>
or
<action name="dice.room.game">
    <item name="big.dice.room.game">买大</item>
    <item name="short.dice.room.game">买小</item>
    ---------------------------
    <description>你赢了/你输了,再来一局?</description>
    <item name="continue.dice.room.game">继续</item>
    <item name="exit.dice.room.game">退出</item>
</action>
-->
</root>

4.服务端设立一个对象池,也就是一个hashmap.key是公共变量,map随时传递,可以向里面添加或移除数据。
  --编写代码时去掉了这个对象池,如果包分的够细,应该不需要这个东西
5.用映射的方法处理相应,包括创建对象,执行方法,映射关系文件为actmodule.xml,这样单独打包以后可以通过ant汇集到一个文件中去

--20090813
1.一旦登录成功,则每次双向发送用户的roleid
<root>
  <userinfo id="ashfmnwfop3j23901uxj1e1j">
     <item name=""></item>
  </userinfo>
  异常时
  <error>
      <item name="login.common" id="12345">已经登录</item>
  </error>
2.MudServer改成线程,有必要调优
3.流程
  连接-登录-(进入game,进入chat-room)
     -帮助
     -退出
4.map也可以不放在common中,而作为独立的模块,只保留接口   
5.完成了mudcommon和mudserver的剥离,这样mudserver就可以仅保留很少量的代码
  分成了4个工程mudserver,mudcommon,mudbetroom,mudclient
6.区分了客户端退出和服务端退出两种状态,有必要加入一个system组件和服务端整合在一起,提供socket服务端的操作,
  如关闭,重新连接,重新读取文件等,最好在服务端内部实现,不对外公布接口
7.调整后的服务端只提供指定命令的关闭,重启,重置端口这三个服务.在编写多线程之前,server没什么要改动的内容了
  close.system, reload.system, restart.system
 
8.可以另做一个socket端口 专门捕获系统操作员发出的命令,这样不会有客户端发送系统级请求,也可以关闭这个端口的对外权限,防止被黑
  操作简单 不是用xml结构,仅采用 命令 参数1 参数2...这样的形式
 
9.执行其他包的方法,有了这个功能,相当于可以执行脚本了,而且可以跨工程的执行方法

关键在于如何将reader的hashmap传递给CommonExecute
 
有空要对server想要实现的功能做一下整理



--20090814
任何配置的类中,实现setActionClassMap就可以获得server中提供的全部action,以及class的映射。不用接口的方式实现,使代码的耦合性更小。子包不必引用server的内容就可以使用。
但这一规则有必要在其他文档中说明,否则不会被人注意到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值