新郎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的婚后协议

转载于:https://www.cnblogs.com/wangergo/archive/2010/05/03/1726339.html

Silverlight MMORPG WebGame游戏设计(五)-----Client的嫁妆相关推荐

  1. Silverlight MMORPG WebGame游戏设计(六)-----Server和Client的婚后协议[附上完整15M游戏DEMO]...

    上回说到Server少爷和Client小姐好不容易踏入婚姻的殿堂,洞房花烛之夜,Client小姐却要Server少爷签下婚后协议.Server一脸不快:"都一家人还签什么协议啊?" ...

  2. Silverlight MMORPG网页游戏开发课程(Game Lesson):目录

    [感谢 银光中国 提供本课程所有源码资源分流] 一次全新的开始,一次全新的构建与诠释.渴望在时空长廊中寻觅传说中光的起源,我决定用这部课程编写一首血脉喷张之进行曲.一年前,我一个人在战斗,前行,引导我 ...

  3. Silverlight MMORPG网页游戏开发课程[一期] 序言

    本课程Demo在线演示地址:http://silverfuture.cn/ (随课程进度不断更新,所有资源暂时放在xap) 2010年7月20日是一个不平凡的日子,应朋友的邀请在自己的家乡广西师范大学 ...

  4. Silverlight MMORPG网页游戏开发课程[一期] 第十课:面向对象的重构

    引言 在游戏的基本功能大体实现后适当的回过头来,重新审视当下的游戏框架并做一些有利于下阶段功能延伸的结构改进,以达到精简代码,优化性能,提高拓展性的目的:这就是本节我将要为课程示例游戏做的一次内科大手 ...

  5. Silverlight MMORPG网页游戏开发课程[一期] 第九课:HUD与背景音乐

    引言 征服玩家的不仅仅是创意,无比动人的视觉体验譬如精美的界面UI同样能让人倾慕,辅以优柔的旋律仿若一缕思绪让您身临其境而流连.深刻的第一印象无限大的冲击着玩家那份内敛的狂热,优秀的游戏作品价值将在欢 ...

  6. MMORPG大型游戏设计与开发(服务器 游戏场景 地图和区域)

    地图的数据以及区域的信息是场景的重要组成部分,这些数据同时存在客户端和服务器,而且都是由编辑器生成的.那么保存的文件数据结构是怎样的?一张3D的场景地图又是怎样处理这些数据的?同时告诉大家这里同样只是 ...

  7. Silverlight MMORPG网页游戏开发课程[一期] 第十一课:战斗系统之脚本与精灵捕获...

    引言 整个游戏的推进工作显得异常顺利,或许之前我们所做的一切都是为了接下来的核心内容打基础:RPG之战斗系统.在踏入这块神秘而又让人的垂涎的领域前,我们迫切需要充实更多的相关知识以适应并更好的处理即将 ...

  8. MMORPG大型游戏设计与开发(part5 of net)

    上一部分将服务器的具体代码的实现介绍给了大家,想必大家也了解到了服务器处理一次消息的复杂度.如果大家能够将各个过程掌握清楚,就会发觉其实整个逻辑与交互过程是比较清晰的.那么服务器与服务器之间的通讯,其 ...

  9. MMORPG大型游戏设计与开发(服务器 游戏场景 动态场景与副本)

    场景的内容讲解到今天算是暂时划上一个句号了,接下来为大家讲解的是AI部分(大型AI),如果有兴趣的朋友不妨持续关注这些文章,大家一起学习和进步.动态场景和副本是场景中特殊的类型,副本在这里想必已经是无 ...

  10. MMORPG大型游戏设计与开发(part3 of net)

    这一部分需要向大家介绍的是服务器的select以及收发包的具体流程,从核心代码功能上分析网络交互具体过程. 首先大家要看第二部分(part2 of net)的代码结构图,因为在接下来的流程过程中会用到 ...

最新文章

  1. 选红叶家装不就得了,用得着这么费事吗?!
  2. 三菱fb功能块手册中文_技成周报33期 | 三菱、西门子全系列这34个问题值得一看!...
  3. .NET Core实战项目之CMS 第十四章 开发篇-防止跨站请求伪造(XSRF/CSRF)攻击处理...
  4. Visual Studio项目版本转换器(c#项目版本转换器 v1.0)
  5. 【Java】辨析JUnit4中的@AfterClass、@BeforeClass、@after、@before
  6. Rtworld目录网全解开源2.0-功能齐全
  7. Google 日历 API 和工具
  8. 浅谈消息队列的原理及优势
  9. jemter 使用if控制器,选择需要的内容
  10. tl wdr5660虚拟服务器,TP-Link TL-WDR5660路由器怎么设置?
  11. 一些javascript的经验 (3)
  12. 【路径规划】基于matlab人工蜂群优化粒子群算法求解最短路径规划问题【含Matlab源码 124期】
  13. 在线供应链服务平台方案:构建企业供应链平台业务、功能、技术管理架构
  14. 2022-2028年中国仿制药产业深度调研及投资前瞻分析报告
  15. 基于单片机和GPS定位农田面积测量仪设计(毕业设计资料)
  16. 广东工业大学计算机学院师资,广东工业大学计算机学院导师教师师资介绍简介-朱清华...
  17. 学习java第6天 模仿XP画板(10%)
  18. java语言输出当前日期时间的方法
  19. Springboot毕业设计毕设作品,学生信息管理和新生报到系统 开题报告
  20. h3c防火墙服务器ip修改,H3C防火墙安全策略配置建议

热门文章

  1. Metrics 入门教程
  2. [转载]autorun.inf病毒源代码
  3. hazy的leetcode刷题笔记(三)
  4. S5PV210 I2C电容触摸屏驱动
  5. 计算机三级数据库考试知识点及题库总结(最全)
  6. 闲鱼直播flutter化实践
  7. 一文了解肠-器官轴,肠好身体好
  8. 樱花何处有?动态樱花飘落图
  9. 移动通信网络规划:机房设计
  10. 学术捜索新添找寻新近文章功能