zoukankan      html  css  js  c++  java
  • 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的婚后协议

     

  • 相关阅读:
    #JVM方法区、堆、栈’#
    #前端# 解决前端页面滑动不顺畅的问题
    【Web协议】服务器推送浏览器:Server-Sent Events(SSE)
    【性能调优】Java程序CPU高定位
    转载 I/O模型:BIO/NIO/AIO 学习
    【性能调优】Java程序内存高定位
    算法--字符串:最长回文子序列
    算法--字符串:最长递增子序列LIS
    算法--字符串:最长回文子串
    算法--字符串:最长公共子序列LCS
  • 原文地址:https://www.cnblogs.com/wangergo/p/1726339.html
Copyright © 2011-2022 走看看