Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)

news/2024/6/29 2:56:10

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

 

在Silverlight+WCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)中,我们完成下棋双方的棋谱显示,这节,我们为观众增加棋子列表:

观众进入房间后,第一时间当然也要获取棋步列表了,不然进来干麻呢?你当这是聊天室啊,光聊天不看棋。

 

首先,当然是要在服务端添加一个获取棋步列表的接口方法了:

WCF服务端,IService.cs:

05233755_Ub1k.gif
  ///   <summary>
    
///  服务端方法接口 by 路过秋天
    
///   </summary>
    [ServiceContract(CallbackContract  =   typeof (ICallBack))]
    
public   interface  IService
    {
       
// ...省略N行代码...
        [OperationContract]
        System.Collections.Generic.List
< MoveStep >  GetMoveStepList( int  roomID); // 获取棋步列表 
        
// ...省略N行代码...
    }

 

我们返回的是一个泛型的List,这个得注意了。

接着我们来实现这个方法,回到IService.svc.cs:

05233755_Ub1k.gif
  public   class  Service : IService
    {
        
// ...省略N行代码...


        
public  List < MoveStep >  GetMoveStepList( int  roomID)
        {
            
return  roomList[roomID].StepList;
        }
    }

 

看,每次我们服务端代码都很简短,就一行。

服务端轻松轻松写完了,我们编绎一下,更新服务引用。

 

跟着我们回到客户端ChessManual.xaml.cs,在页面加载时,我们要调用获取一下列表:

整个页面代码不多,就全复制了:

05233755_Ub1k.gif
public   partial   class  ChessManual : UserControl
    {
        
public  ChessManual()
        {
            InitializeComponent();
            App.client.GetMoveStepListCompleted 
+=   new  EventHandler < GameService.GetMoveStepListCompletedEventArgs > (client_GetMoveStepListCompleted);
            App.client.GetMoveStepListAsync(App.player.RoomID);
        }

        
void  client_GetMoveStepListCompleted( object  sender, GameService.GetMoveStepListCompletedEventArgs e)
        {
            
// 获取完棋谱后,这里循环调用Add就可以了
        }
        
public   void  Add(GameService.MoveStep step)
        {
            lbChessManual.Items.Add(step.ID 
+   " : "   +  step.Name);
            lbChessManual.SelectedIndex 
=  lbChessManual.Items.Count  -   1 ;
            lbChessManual.UpdateLayout();
            lbChessManual.ScrollIntoView(lbChessManual.SelectedItem);
        }
    }

 

接着我们要实现把获取到的列表Add到棋谱区去了,可是,这个时候我们发现一个问题,上图:

看到Result出来的提示没有,我们返回的是一个List,结果返回了个System.Collections.ObjectModel.ObservableCollection

这是咋回事呢?我们一直返回Dictionary都好好的,咋返回个List就成这个样子了,大伙摸急,方法是有的:我们看下图说:

1:对着引用的GameService右键:

2:我们选中配置服务引用:

3:从上图我们看到了集合类型,默认是那个ObservableCollection了的,于是我们选一下下拉框看看:

看到了有List了吧,选中它,确定,系统会自动重新更新引用,就OK了,不另外截图把e.Result的提示截出来了:

 

于是,我们重新回到棋谱区,继续完成我们的代码:

05233755_Ub1k.gif
void  client_GetMoveStepListCompleted( object  sender, GameService.GetMoveStepListCompletedEventArgs e)
        {
            
// 获取完棋谱后,这里循环调用添加就可以了
             if  (e.Result  !=   null   &&  e.Result.Count  >   0 )
            {
                
foreach  (GameService.MoveStep step  in  e.Result)
                {
                    lbChessManual.Items.Add(step.ID 
+   " : "   +  step.Name);
                }
            }
        }

 

OK,到此,观众就可以获取到棋步列表了。我们F5运行看下效果:

 

OK,观众进来的时候有棋谱了,可是观众人棋盘还是初始状态的呢??

这个嘛,我们只要把棋谱从头到尾播放一次,状态自然就跟下棋者的一样了;

我们留到下节解说,本节就点到为止了。

 

转载于:https://my.oschina.net/secyaher/blog/274360


http://lihuaxi.xjx100.cn/news/235525.html

相关文章

闭包回调的写法

初学swift&#xff0c;封装了NSURLSession的get请求,在请求成功闭包回调的时候程序崩溃了 然后在图中1&#xff0c;2&#xff0c;3位置加上惊叹号“&#xff01;”&#xff0c;再把4&#xff0c;5&#xff0c;6的惊叹号去掉就闭包回调成功了

CentOS 7 安装 GlusterFS

目录 环境说明&#xff1a; 3台机器安装 GlusterFS 组成一个集群。 使用 docker volume plugin GlusterFS 服务器&#xff1a; 10.6.0.140 10.6.0.192 10.6.0.196转载于:https://www.cnblogs.com/MeiCheng/p/10274222.html

Solaris 上网配置

2019独角兽企业重金招聘Python工程师标准>>> 早上装solaris10系统的时候&#xff0c;没选默认&#xff0c;选了desk-session模式安装。全英文无界面安装&#xff0c;中间还跑出几个乱码。 靠着随便选随便F2&#xff0c;终于安装完了。 就在那设完分辨率后&#xff0…

微信小程序 - 富文本图片宽度自适应(正则)

引言&#xff1a;在微信小程序里&#xff0c;比如商品展示页面的商品详情会有图片展示&#xff0c;PC端设置的商品详情是PC端的宽度&#xff0c;所以在小程序里图片会显示不全&#xff0c;这时就应该做相应的处理&#xff0c;使小程序里图片显示正确 思路 把图片的宽度改为手机…

iOS 支付 [支付宝、银联、微信]

这是开头语 前不久做了一个项目&#xff0c;涉及到支付宝和银联支付&#xff0c;支付宝和银联都是业界的老大哥&#xff0c;文档、SDK都是很屌&#xff0c;屌的找不到&#xff0c;屌的看不懂&#xff0c;屌到没朋友&#xff08;吐槽而已&#xff09;&#xff0c;本文将涉及到的…

Linux下的redis的持久化,主从同步及哨兵

redis持久化 Redis是一种内存型数据库&#xff0c;一旦服务器进程退出&#xff0c;数据库的数据就会丢失&#xff0c; 为了解决这个问题&#xff0c;Redis提供了两种持久化的方案&#xff0c;将内存中的数据保存到磁盘中&#xff0c;避免数据的丢失。 RDB持久化 redis提供了RDB…

CYQ.Data 数据框架系列索引

2019独角兽企业重金招聘Python工程师标准>>> 索引基础导航&#xff1a; 1&#xff1a;下载地址&#xff1a;http://www.cyqdata.com/download/article-detail-426 2&#xff1a;入门教程&#xff1a;http://www.cyqdata.com/cyqdata/article-cate-33 3&#xff1a;购…

Swift - 使用addSubview()方法将StoryBoard中的视图加载进来

使用 Storyboard 我们可以很方便地搭建好各种复杂的页面&#xff0c;同时通过 segue 连接可以轻松实现页面的跳转。但除了segue&#xff0c;我们还可以使用纯代码的方式实现Storyboard界面的跳转。 比如&#xff1a;使用 presentViewController() 方法将当前页面视图切换成新视…