Silverlight+WCF 新手实例 象棋 获取房间状态列表更新(二十一)

简介:

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示

 

上节是当有用户进入某个房间时,我的某个房间状态被通知,并被通知更新。

这节说说首次进入房间大厅时,我们自己创建了N个房间,默认都是初始状态的,这时我们需要获取服务端的所有已更新的房间状态,

下到本地之后,进行批量更新状态。

 

于是开始了,首先从服务端开始,我们要获取所有已更新的房间,于是到WCF服务端添加一个方法:

到IService.cs添加方法接口

[OperationContract]
Dictionary
< int , Room >  GetRoomList();

 

接着要实现方法了,到Service.cs去

太阳,这方法太简单了,由于我们之前就有全局的roomList对象,直接返回就可以了。

public  Dictionary < int , Room >  GetRoomList()
{
  
return  roomList;
}

 

 

两三行代码就搞定了服务端了。于是我们悄悄的回到客户端

当然了,还是得编绎,更新服务引用,这个说多了,大伙自觉点。

我们回到房间页面Room.xaml.cs里去

我们在构造函数里添加两行代码,默认请求房间列表:

由于之前已有些代码,大伙看注释那两行:

复制代码
ExpandedBlockStart.gif
public  Room()
{
  InitializeComponent();
  game 
=   new  Game();
  game.CreateGameRoom(
30 );
  game.DrawIn(LayoutRoot);
// 看这里看这里,这两行是新添加的,获取房间列表
App.client.GetRoomListCompleted  +=   new  EventHandler < GameService.GetRoomListCompletedEventArgs > (client_GetRoomListCompleted);
App.client.GetRoomListAsync();
// 这里实现ICallBack的方法
App.client.NotifyRoomUpdateReceived  +=   new  EventHandler < GameService.NotifyRoomUpdateReceivedEventArgs > (client_NotifyRoomUpdateReceived);
}
 
// 这里也要看,这里是获取房间列表的事件
void  client_GetRoomListCompleted( object  sender, GameService.GetRoomListCompletedEventArgs e)
{
   
// 房间获取完了,待实现
}
复制代码

 

看到了吧,获取完后,我们要干点什么呢?当实是实现更新房间状态了。

复制代码
ExpandedBlockStart.gif
// 这里也要看,这里是获取房间列表的事件
         void  client_GetRoomListCompleted( object  sender, GameService.GetRoomListCompletedEventArgs e)
        {
            
// 房间获取完了,下面实现了
             if  (e.Result  ==   null )
            {
                
return ;
            }
            
// 变化的房间列表
            Dictionary < int , GameService.Room >  roomList  =  e.Result  as  Dictionary < int , GameService.Room > ;
            
if  (roomList.Count  >   0 )
            {
                
foreach  (KeyValuePair < int , GameService.Room >  item  in  roomList)
                {
                    
if  (item.Key  >   0   &&  item.Key  <   31 )
                    {
                        UpdateRoomState(item.Value, game.GameRoomList[item.Key 
-   1 ]);
                    }
                }
            }
        }
复制代码

 

看到那个UpdateRoomState函数,别说不认识,就上节我们在通知房间更新时,特别皮痒封装起来的。

搞定了,这节的代码都特别简洁,特别简单,接下来按F5看看效果:

一开始的登陆,和进入房间就不截图了,本系列截的太多了。

这里为Index页面加上一句用户显示文字,免的一片空白,第一个进去如下图:

好,开多一个浏览器,第二个用户登陆:

一进去,默认第一个用户位置就亮蓝色灯了

 OK,此节就到此结束了。

这里提供第四阶段源码:点击下载

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2010/07/22/1782763.html

相关文章
|
开发者 开发工具 定位技术
|
.NET 开发框架 数据安全/隐私保护
|
数据库 测试技术 安全
使用Entity Framework和WCF Ria Services开发SilverLight之2:POCO
在上一篇中《使用Entity Framework和WCF Ria Services开发SilverLight之1:简单模型》我们提出这类简单模型的几个问题: 1:实体模型被紧耦合在EDM中,同时它不能项目(模块)使用。
1207 0
WCF入门(四)——会话与实例
会话是两个终结点之间消息交换的一种相互关系;实例化是服务对象的生存期控制。 (一)会话 会话由服务契约的SessionMode属性指定,SessionMode属性用于是否允许,禁止和要求会话状态,它有三种设定: Allowed 如果绑定支持会话,则契约支持会话 Required 要求绑定支持会话,否则引发异常 NotAllowed 指定契约不支持启动会话的绑定 如果服务支持会话,则可以通过实例创建模式属性指定服务契约实例与会话之间的关系。
656 0
WCF入门(四)——会话与实例
会话是两个终结点之间消息交换的一种相互关系;实例化是服务对象的生存期控制。 (一)会话 会话由服务契约的SessionMode属性指定,SessionMode属性用于是否允许,禁止和要求会话状态,它有三种设定: Allowed 如果绑定支持会话,则契约支持会话 Required 要求绑定支持会话,否则引发异常 NotAllowed 指定契约不支持启动会话的绑定 如果服务支持会话,则可以通过实例创建模式属性指定服务契约实例与会话之间的关系。
463 0
|
9月前
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一