Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示-状态重置(九)

上节留下的问题:

在上一节:Silverlight+WCF 网络象棋 终极篇 解决重复的消息提示(八) 中,我们解决了重复登陆时产生的多次消息的重复提示。

不过由此优化产生的另一个问题:全局只有一个实例,在来回的切换房间或进出时,需要重置状态,我们这节来解决这个问题。

 

 

在上节的,我留下了几行这样的注释代码:

//loginObj.Reset();
//roomObj.Reset();
//indexObj.Reset();

 

本节就顺路把这三个注册的方法给实现了:

1:loginObje.Reset()方法的实现,进入Login.xaml.cs中:

public void Reset()
{
btnLogin.IsEnabled = true;
}

 

就一行,把不可用的按钮重置为可用。

2:roomObj.Reset()方法的实现,进入Room.xaml.cs中:

public void Reset()
{
game.Reset();
App.client.GetRoomListAsync();
}

 

代码很简洁,第一行,把游戏房间的状态重置为初始状态,然后重新获取房间的状态。

代码分解:game.Reset()方法,我们进入到Game.cs中添加Reset方法实现如下:


public void Reset()
{
if (GameRoomList == null)
{
CreateGameRoom(20);
}
foreach (GameRoom item in GameRoomList)
{
if (item.BlackPlayer != null || item.RedPlayer != null)
{
item.BlackPlayer = null;
item.RedPlayer = null;
item.IsGaming = false;
item.ReDraw();
}
}
}

 

把每一个房间重新重置为初始状态了。

3:indexObj.Reset()方法的实现,进入Index.xaml.cs中:

public void Reset()
{
chessControl.Reset();
onlineUserControl.Reset();
chessManualControl.Reset();
eventButtonControl.Reset();
chatControl.Reset();
}

这里代码是比较简单,不过接下来要做的事就多了,每个控件都要去实现一下,当体力活了。

下面为每一个控件实现状态重置方法:

A:棋盘及棋子的重置:chessControl.Reset();

public void Reset()
{
chess.Reset();//这个已经实现了的。
}

因此内部就调用象棋类的重置,分解为:

B:房间在线用户的重置:onlineUserControl.Reset();

public void Reset()
{
App.client.GetPlayerListAsync(App.player.RoomID);
}

重新获取一次用户即可。

C:棋谱的重置:chessManualControl.Reset();


public void Reset()
{
timer.Stop();
moveStepIndex = 0;
tempIsCanMove = false;
App.chessManualPlaying = false;
App.stepList.Clear();
lbChessManual.Items.Clear();
}

D:在线聊天的重置: chatControl.Reset();

public void Reset()
{
lbMsg.Items.Clear();
}

4:回去把那三行注释掉的代码给开启了。

OK,一切就绪,最后运行看下效果,随便点点,运行情况良好,截几张图:

a:登陆

b:进到房间中

c:接着退出系统

d:换个名称重新登陆

e:重新登陆后进房间的界面

OK,本节就介绍到这里了。

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

http://www.cnblogs.com/cyq1162/archive/2011/01/13/1933693.html

时间: 2024-09-12 09:55:59

Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示-状态重置(九)的相关文章

Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示(八)

前言: 最近有网友经常会问,在跟着做象棋对战的通讯中,在重复退出进入的时候,消息会重复出现,本节就这问题进行解说与优化.   一:分析问题产生的原因?   1:首先看App.xaml,里面定义了一个全局客户端回调: public static GameService.ServiceClient client;//回调的客户端   并且这个回调我们全局只实例化一次,并且默认加载时定位到登陆页面: private void Application_Startup(object sender, Sta

Silverlight+WCF 实战-网络象棋最终篇之房间装修-Silverlight端[带第九阶段源码](三)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 上一系列四十篇索引:Silverlight+WCF 新手实例 象棋 专题索引     本篇紧接着上一篇:Silverlight+WCF 实战-网络象棋最终篇之房间装修-WCF端(二) 继续为房间进行如下的装修:   代码实现[Silverlight端] 说明: 由于更换背景引入图片,房间的属性发生了较大的变化,由此引发了客户端房间类较大的改动.     1:Silverlight端:GameRoom类大调整[被注释的是原来的

Silverlight+WCF 实战-网络象棋最终篇之对战视频-下篇[客户端发送与服务端中转](六)

本篇继上一篇:Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)    一:对战视频 简单原理 略,内容见上篇.   二:对战视频 步骤解析: 略,内容见上篇.   三:对战视频 具体实施 1:如何打开视频 略,内容见上篇.   2:Silverlight如何使用Socket进行通讯 2.1:与远程建立链接: 2.2:注册编号[这里的规则是"房间号+棋手颜色值"] 2.3:开新线程,等待接收对方视频 2.4:将视频显示出来,

Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)

前言: 近期在忙点"秋色园"的事情,所以网络象棋这一块文章就写的相对慢,而且刚好接上篇:Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四)  之后, 是一些代码修改,会比较枯燥,所以没接着写,不过有昨天有网页表示对象棋在线演示中的 对战视频 感兴趣,希望可以提前看到代码,所以本次就提前写里面的对战视频这一块. 由于对战视频采用控制台程序,并没有在服务器运行,所以在线演示版本里一进入显示是显示"未链接"的提示. 作者:路过秋天 博客:ht

Silverlight+WCF 实战-网络象棋最终篇之房间装修-WCF端(二)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 上一系列四十篇索引:Silverlight+WCF 新手实例 象棋 专题索引   佛靠金装,人要衣裳,房间也要加金砖.本篇我们来把房间装修下,让它看起来专业一点!   一:效果预览,先上图   这是之前的房间图片: 今天我们要装修成的房间图片: 再上一张游戏中的效果图:   二:实现说明   1:新增加图片 为了实现装修,我这里新增加了3张图片: 1:房间图片 2:房间游戏中状态的图片 3:QQ用户头像 图片是从QQ象棋游戏

Silverlight+WCF 实战-网络象棋最终篇之十字轨迹(一)

前言 继之前Silverlight+WCF 新手实例 象棋系列四十篇之后,一个多月的时间都在写CYQ.Data框架系列[CYQ.Data 轻量数据层之路 框架开源系列 索引], 让各位对该Silverlight+WCF 象棋系列有兴趣的网友久候了,上一系列详见:[Silverlight+WCF 新手实例 象棋 专题索引] 今天开始就在之前四十篇续上,直到把 [Silverlight+WCF 新手实例 象棋 在线演示] 上的最新代码写完,谢谢支持!   乱七杂八说两句: 一个多月没碰VS2010了

Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四)

前言: 在前面的系列中,我们虽然完成了其大部分功能,但是,离正真运行,还是有一大段距离 当你F5运行时,在弹出对话框之后,如果你不即时点确定,或者上个WC回来之后,你会发现已经提示出错了 这节开始,我们将对其进行一小步一小步的优化,来避免一些明显容易引发的错误.   感知一下最原始的消息弹出框如下图:     一:传统消息框,容易引发命案   1:原始的消息框,是线程阻塞类型的,很容易引发超时问题 线程阻塞?怎么理解? 简单的说就是,WCF服务端给客户端发送了消息提示之后,一直进入等待状态,直到

Silverlight+WCF 新手实例 象棋 主界面-事件区-游戏开始(二十七)

本专题出产简单原由: 一开始的初衷,只是想写个简单的单机BS人机对战版的,开始还下了点AI算法看看的: 但是写到最后,都写成了通讯版本的对战了,只因中间不小心看到了WCF的相关内容,顺便加了进来; 最后就定局了,反正新手实例,能加多点内容就加多点了. 关于原始初衷,后期再补上了.       好了,先上几个附加索引: 1:Silverlight+WCF 新手实例 象棋 在线演示 2:Silverlight+WCF 简单部署问题集 3:Silverlight4 ListBox bug 4:Silv

Silverlight+WCF 新手实例 象棋 主界面-事件区-求和认输(三十二)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   事隔几篇,我们又回到事件区,继续其它两个按钮事件,来张图吧: 在Silverlight+WCF 新手实例 象棋 主界面-事件区-游戏开始(二十七) 和之后的几篇,我们实现了游戏开始, 在这篇之前,基本上双方已可以对战了,看似主体功能已完成.只是,大伙都知道,细节的东西,才是花时间的,漫长的路还在后面....... 如标题所示,这节实现"求和+认输"两个事件.   每次开始,我们都习惯的先写WCF服务端代码,再回