Silverlight MMORPG WebGame游戏设计(五)-----Client的嫁妆

        新郎Server的房子装修好了,就看这边Client 的嫁妆准备如何了。Client小姐出身Silverlight名门,天生高傲较贵,只让给她服务的仆人使用TCP协议,UDP都不能考虑。

         至于Client家的仆人做事,那是大家风范,全部使用"异步"方式。你看看他们的名字:一个是ConnectAsync,一个是SendAsync,还有一个是ReceiveAsync。另外还有两个打杂,负责关门看院的小厮:Shutdown和Close

         你看看Client小姐所在的城堡,真是气派:

        

         整日闷坐在城堡里的Client小姐听说Server少爷那边房子准备好了,就安奈不住芳心,想催问婚礼什么时候举行。

         她忙叫来ConnectAsync,他主要负责和Server联络,

          ConnectAsync让MessageStream马夫牵来socket宝马,坐上刻着SocketAsyncEventArgs字样的族徽的豪华马车,向Server家奔去。

         

socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//使用Tcp套接字
          stream = new MessageStream();//使用MessageStream消息辅助类
          SocketAsyncEventArgs args = new SocketAsyncEventArgs();
          args.RemoteEndPoint 
= new DnsEndPoint(SvIP, Sport);//设定和Server的通讯地址和端口
          args.Completed += new EventHandler<SocketAsyncEventArgs>(OnSocketConnectCompleted);//连接完成后做出OnSocketConnectCompleted报告。
          socket.ConnectAsync(args);//开始异步连接

 

         

 

        等ConnectAsync从风尘仆仆得从Server家联络回来后,就向马不停蹄得向Client报告:“小姐,我已经禀报了Server少爷那边,就等那边回消息了。”Client一听,展颜一笑:“是么,快让ReceiveAsync准备笔墨,等公子那边的回复。”

         ReceiveAsync一听,赶忙准备1024字节的纸张:

         

 byte[] response = new byte[1024];
 e.SetBuffer(response, 
0, response.Length);

 

       那厢ConnectAsync完成跑腿的任务,一边歇息去了:

      

e.Completed -= new EventHandler<SocketAsyncEventArgs>(OnSocketConnectCompleted);

 

      e.Completed -= new EventHandler<SocketAsyncEventArgs>(OnSocketConnectCompleted);

 

e.Completed -= new EventHandler<SocketAsyncEventArgs>(OnSocketConnectCompleted);

 

     就在Client翘首等待之际,少爷那边的仆人催快马已到,高声通报:“少爷那边来消息了。”,Client一听,忙让MessageStream读取私人密信。上次我们说过,Server少爷和Client小姐比较注意隐私,不用String类型的明文信件,用的是byte字节,这解读密信的差事就交给MessageStream去做了: 

    

 this.stream.Write(e.Buffer, e.Offset, e.BytesTransferred);
 Message message;
 
while (stream.Read(out message))
 {
    
//记下message内容

 }

 

 

      MessageStream不费吹灰之力读完密信,放到Message盒子里双手呈给了Client小姐。

      Client小姐接过Message盒子,看完信件:

          8月11日,此乃良辰吉日,愿于卿结秦晋之好

                                            your lover:Server

      Client心中石头终于落地,忙叫来SendAsync仆人:“快回Server少爷,万事具备,只盼佳期”。

 

      SendAsync也开心领命:“小姐,我这就去办!”,他也让MessageStream领来Socket宝马,套上刻着SocketAsyncEventArgs字样族徽的豪华马车,立马启程,当然身上还是带着 Message盒子,Client小姐回复的信件放在里面。

   

 SocketAsyncEventArgs myMsg = new SocketAsyncEventArgs();
 myMsg.RemoteEndPoint 
= socket.RemoteEndPoint;
 Message message 
= msg;
 
byte[] buffer = message.ToBytes();
 myMsg.SetBuffer(buffer, 
0, buffer.Length);
 socket.SendAsync(myMsg);

 

     至此繁琐的婚前准备终于完成,婚礼只待良辰吉日,Server少爷和Client小姐的未来婚后生活是否完美呢?

     请看下一篇文章:

      Silverlight MMORPG WebGame游戏设计(六)-----Server和Client的婚后协议

 

   本文版权属于williams所有,首发http://www.cnblogs.com/,转载请注明出处。
posted @ 2010-05-03 13:25 王传炜 阅读(2257) 评论(14) 编辑 收藏

 回复 引用 查看   
#1楼2010-05-03 13:32 | JustOneDay      
原来,程序也是一场华丽的爱情故事、、、
 回复 引用 查看   
#2楼2010-05-03 13:35 | MagicHu      
太多的图片,把内容变得支离破碎。。。。

 回复 引用 查看   
#3楼[楼主]2010-05-03 13:39 | 王传炜      
@MagicHu
我是想用讲故事的方式把程序流程说清楚,没考虑到你说的问题

 回复 引用 查看   
#4楼2010-05-03 14:06 | HK——BB      
不错 不错
 回复 引用 查看   
#5楼2010-05-03 14:38 | 绵白糖      
感觉没前面的好了. 不过相信作者肯定会写得更好的.支持你 加油
我把我自己想知道的东西列一下
1.用来做服务器端,如何处理那么多人同时连接,以及他们之间的协议内容咋个设计的呢?
2.地图,新娘结婚了.在庄园里面 如何及时知道院子里面家丁以及自己丈夫的情况?用什么样的形式去存储和处理.
这是小白急需了解的东西. 希望楼主在后续章节中能够提及 不胜感激.

 回复 引用 查看   
#6楼[楼主]2010-05-03 15:45 | 王传炜      
@绵白糖
这章其实是为后面做铺垫的。我觉得精彩有趣的东西还在后面,后面会讲到,协议内容的设计,登陆,创建人物,同地图内的消息如何发送,如何用队列处理接收和发送的消息,游戏的地图文件,索引文件如何保存,寻路数据的验证等,涉及到客户端的东西也是比较多的。会讲一些传奇里素材的提取,地图编辑器的使用等。我想下一章开始会放出 demo,这样会生动很多。

 回复 引用 查看   
#7楼2010-05-03 15:46 | 绵白糖      
@王传炜
嗯期待您的大作 我每天都来看下有没有更新

 回复 引用 查看   
#8楼2010-05-03 16:26 | 不若相忘于江湖      
不错。 顶! 

比较喜欢这种白话式的文章。 

 回复 引用 查看   
#9楼2010-05-03 18:56 | eclipse9614      
哈哈,支持一下
 回复 引用 查看   
#10楼2010-05-03 19:34 | pser      
找这些图也算有心了,支持一下
 回复 引用 查看   
#11楼[楼主]2010-05-03 22:02 | 王传炜      
@绵白糖
我计划是一周更新一篇文章,一般都在周末或者周日,谢谢支持

 回复 引用 查看   
#12楼2010-05-04 11:27 | EverettLiu      
写的挺好的, 支持一下
 回复 引用 查看   
#13楼2010-05-22 13:28 | Jiazom      
写的不错, 用故事的模式说明,挺有新意的,支持了。。。。。
 回复 引用 查看   
#14楼2010-07-28 16:42 | shadow2006      
顶顶更健康!