开发者社区> 泡泡浅眠> 正文

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方法实现如下:

复制代码
ExpandedBlockStart.gif
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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Ubuntu 20.04 通过ifconfig修改静态ip无法联网,重置设置后恢复网络
系统:Ubuntu 20.04 操作: 1、通过ifconfig将电脑设置为静态ip 2、接着发现无法连接网络,且电脑右上角的网络连接图标多了一个问号标识。 3、访问浏览器时会报错`DNS_PROBE_FINISHED_BAD_CONFIG`。
435 0
node节点pod无法启动/节点删除网络重置“cni0“ already has an IP address different from
node节点pod无法启动/节点删除网络重置“cni0“ already has an IP address different from
163 0
【直播】直播预告 | 云原生游戏第4讲:游戏服的网络接入和状态管理【直播已生成回放】
2022 年 11 月 29 日(周二)阿里云容器服务高级工程师 & 云原生游戏负责人,刘秋阳将会为大家详细介绍 OKG 的网络插件功能,一键式部署游戏服南北向网络,OKG 的自定义服务质量功能,以及自动化地感知并管理游戏服状态。
41 0
如何判断设备使用网络的状态
如何判断设备使用网络的状态
71 0
网络link状态检测
网络link状态检测
519 0
+关注
泡泡浅眠
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
阿里云网络产品概览
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多