博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight+WCF 新手实例 象棋 获取房间状态列表更新(二十一)
阅读量:6803 次
发布时间:2019-06-26

本文共 1924 字,大约阅读时间需要 6 分钟。

在线演示地址:

 

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

这节说说首次进入房间大厅时,我们自己创建了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

你可能感兴趣的文章
Python for 循环语句
查看>>
N12-数值的整次方
查看>>
mysql5.5复制环境中的一个bug
查看>>
CentOS6.5安装Tab增强版:bash-completion
查看>>
Eclipse可视化操作数据库
查看>>
Linux下/etc/fstab永久挂载
查看>>
网页正文提取技术文库
查看>>
隐藏字体文件信息加快启动速度
查看>>
Xcode下载失败 使用已购项目页面再试一次
查看>>
谈谈Dreamweaver连接SQL数据库中的字符串连接
查看>>
02 企业网络综合性项目设计
查看>>
Struts2中TreadLocal设计模式详解
查看>>
轻松掌握find命令
查看>>
IO异常处理方式
查看>>
Date的用法
查看>>
Juniper SRX 初级配置教程
查看>>
java代码获取pdf文件第一页作为封面缩略图
查看>>
gluLookAt()
查看>>
MySQL 和Swap Memory
查看>>
python读取大文件
查看>>