发布GameHall 2.0 a测试版本源码
代码下载:https://files.cnblogs.com/Jax/GameHall-2.0-a.rar(含DB)
我申请的CodePlex:http://www.codeplex.com/GameHall(还来不及把源码放上去)
这个版本只实现了大厅,不包括任何游戏。用户可以同时进入多个大厅,但是只能在一个大厅的桌子坐下,进行游戏。
目前仍基于Winform开发,只使用到了.NET 3.5中的LINQ技术处理数据,并大量使用了C# 3.0中的语法糖。
使用了泛型事件和函数式编程,从而完全消除了对Delegate的依赖。
使用TCP Socket通信,抽象出了通信层,为以后版本更换通信方式做准备。
使用了HandShake模式,Client是主动的,Server端是被动的。也就是说,有Request才会有Response。所有38个自定义协议请参见Protocol.txt文件。
在桌子的选择上(4人桌打牌、2人桌下棋)实现了面向接口编程,从而将来能够灵活地增加3人桌和5人桌。这只是一个小的尝试,将来游戏也会采用这套机制。
对非法退出进行了精确地控制。
这个项目有很大的扩展性。一是通讯上的扩展,可以轻松更换TCP连接、UDP连接、HTTP连接等等。二是易于加载新游戏,也就是插件技术,而不用改动大厅程序。
不要怪我很少捕获异常。我是有苦衷的,尤其是Server端的处理要考虑到性能,不能加太多。
附带两个小程序。一个是NAT打洞技术的实现(为以后使用局域网的用户开发);另一个是WPF+WCF版本的简易聊天室(在Jacob老兄的一个源码上进行了重构,是接下来升级WCF的测试程序)。
所有代码我都进行了多轮阶段性测试。但还是要请大家为我挑毛病(尤其是测试人员)。主要集中在Client端。
部分界面如下:
Server端:只是一个CUI程序
Client端:
1)登陆成功,从Server端得到游戏列表并绑定到左边的Treeview。由于未联系到广告商,只好放美女照片。
2)进入“棋类”大厅(2人桌),左边是用户列表和聊天信息
3)进入“牌类”大厅(4人桌)
4)放大了看:
话说,我写这套开源项目,就是为了向世人展现.NET的所有新技术,而并不注重实用性和太复杂的业务逻辑。因此,把原先“只能进入一个大厅”改为“可以同时进入多个大厅”,所增加的逻辑复杂度,是我没有预料到的。为此我在大年初一熬了一个通宵修改数据结构,这也是我很后悔的一件事情。“不要把逻辑搞得很复杂”,将是我接下来的宗旨。但是,安全性和性能,我还是会很在意的。
实战中遇到了很多平时做研究时没有遇到的问题,解决起来煞费周折,我会把这些经验发布到blog上,以飨后人。
重头戏在接下来半个月的开发。WPF、WCF、WF和SilverLight还没出场呢!其中WCF与WF的整合是关键。WPF则主要用来展示Data Binding技术(这门技术决对比WInform好很多很多)。SilverLight用于用户注册。